在c++中读取文本文件

read in txt file in C++

本文关键字:取文本 文件 读取 c++      更新时间:2023-10-16

我有一个像这样的。txt参数文件:

#Stage
filename = "a.txt";
...
#Stage
filename = "b.txt";
...

基本上我想在每次访问参数文件时读取一个阶段。我计划在c++中使用带有分隔符"#Stage"的getline来做到这一点。或者有更好的解决方法?任何示例代码都会有所帮助。

*struct content{
    DATA data;
    content* next;
};
struct List{
    content * head;
};
static List * list;
char buf[100];
FILE * f = fopen(filename);
while(NULL != fgets(buf,f))
{
    char str[100] ={0};
    sccanf(buf,"%s",str);
    if(strcmp("#Stage",str) == 0)
    {
        // read content and add to list
        cnntent * p = new content();
        list->add();
    }
    else
    {
        //update content in last node
        list->last().data = 
    }
}*

也许我应该表达得更清楚一些。总之,我是这样处理的:

ifstream file1;
file1.open(parfile, ios::binary);
if (!file1) {
    cout<<"Error opening file"<<parfile<<"for read"<<endl;
    exit(1);
}
std::istreambuf_iterator<char> eos;
std::string s(std::istreambuf_iterator<char>(file1), eos);
unsigned int block_begin = 0;
unsigned int block_end = string::npos;
for (unsigned int i=0; i<stage; i++) {
    if(s.find("#STAGE", block_begin)!=string::npos) {
    block_begin = s.find("#STAGE", block_begin);
    }
}
if(s.find("#STAGE", block_begin)!=string::npos) {
block_end = s.find("#STAGE", block_begin);
}

string block = s.substr(block_begin, block_end);
stringstream ss(block);
....

我将逐行阅读,忽略行,从#开始(或行,内容#Stage,取决于格式/目标)(因为没有getline版本,以std::string作为分隔符)。