从文件中读取。多个分隔符? C ++

时间:2016-04-26 21:00:59

标签: c++ file-io delimiter

所以我试图从文件中读取一些信息,但我一直很难做到这一点。这是我尝试阅读的文件的格式。

Name#Description
Name2#Description2 ...
NameX#DescriptionX
%
info1,info2,info3,info4 ...
infoX1,infoX2,infoX3,infoX4,
%
Keyword#Message

所以我要做的就是在每个#之后拆分代码的第一部分,并将Name拆分为一个变量,将Description拆分为另一个变量。然后在第一个%将每条信息分成它自己的变量之后。最后,在第二个%之后将#分开,就像上面那样,但不同的变量。

所以我尝试了while(getline(inFile, str, '%')但是在第一行之后停止阅读然后转到%下的任何内容。在这里遇到一些麻烦,所以任何帮助都会受到赞赏!

1 个答案:

答案 0 :(得分:1)

下面是一个(非完整的)结构,说明如何解决这个问题:

#include <fstream>
#include <iostream>
#include <string>

int main(void) {

    const char* in_file_path = "foo.txt";
    std::ifstream in_file(in_file_path);

    std::string buffer = "";
    while (std::getline(in_file, buffer)) {
        //parse input using `#` as separator...
        if (buffer.at(0) == '%') {
            // get position of `%` char in stream using (e.g.) in_file.seekg
            break;
        }
    }
    // after getting position of first `%` char in stream, this loop 
    // will start from this position in the file
    while (std::getline(in_file, buffer)) {
        // parse input using `,` as separator...
        if (buffer.at(0) == `%`) {
            // get position of `%` char in stream using (e.g.) in_file.seekg
            break;
        }
    }

    // ... and so on for as many separations as you need until you hit end of file

}

这取决于使用(例如)seekg的{​​{1}}方法:

http://en.cppreference.com/w/cpp/io/basic_istream/seekg