我有一个.txt文件,我希望从中获取某种行格式,其中包含我需要保留的数据。
例如:
input.txt:
Number: 654
Name: Alon
-----
我需要:
1。提取654和“ Alon”到其相应的变量中。
2。如果格式不正确,则会引发错误。
如果这是C,我可能会使用:
if (fscanf(inputFile, "Number: %d", &num) == 0)
{
// raise an error
}
假设使用C函数不是一个好主意,我剩下的是std :: cin,它可能使我可以访问需要提取的数据,但无法控制包装数据的字符串的确切格式。
我已经打开并使用将文件作为“ ifstream”读取。我还使用std :: getline(...)检索了第一行。 这就是我所拥有的:
std::ifstream inputFile;
string lineToParse;
inputFile.open("input.txt", std::fstream::in);
if (inputFile.fail())
{
// throw exception
}
else
{
std::getline(inputFile, lineToParse);
int data;
inputFile >> data;
}
假设input.txt是上面的文件,我希望lineToParse为“ Number:654”,数据为654。 但是正如我所说,我无法以这种方式控制行的格式。
有什么想法吗?
答案 0 :(得分:2)
您可以使用std::getline
来解析诸如':'
之类的特定字符。
类似的东西:
int line_number = 0;
while(std::getline(inputFile, lineToParse))
{
++line_number;
// check for empty lines here and skip them
// make a stream out of the line
std::istringstream iss(lineToParse);
std::string key, value;
if(!std::getline(std::getline(iss, key, ':') >> std::ws, value))
{
std::cerr << "bad format at line: " << line_number << '\n';
continue;
}
// do something with key and value here...
}
您有key
和value
,key
应该告诉您如何转换值(整数,浮点数,日期/时间等)。