将";"分隔的文件读入字符数组结构

Reading a ";" delimited file into a character array structure

本文关键字:字符 结构 数组 文件 分隔      更新时间:2023-10-16

我正试图将一组值从文本文件读取到数组结构的数组中。每个条目由一个"\n"分隔,每个条目由3个值组成,用一个";"分隔。

问题是,在正确读取第一行文件数据后,程序从第二行读取第一个值,然后似乎无法读取其余值。你能指出我语法或逻辑上的错误吗?

测试数据显示在下面。

CS162;Finish Lab 2;9/26/2009
CS201;Take Quiz 1;9/28/2009

在读取测试数据后,我的程序输出如下。

Your tasks are:
Finish Lab 2 for CS162 is due 9/26/2009
CS201
 for  is due

将文件读入数组并输出数组内容的循环如下。我的完整代码将在问题的末尾。

for ( ; InputFile.peek() != EOF; ListSize++ )
{
      InputFile.get(TaskList[ListSize].Course, BUFFERSIZE, ';');
      InputFile.ignore(BUFFERSIZE, ';');
      InputFile.get(TaskList[ListSize].Assignment, BUFFERSIZE, ';');
      InputFile.ignore(BUFFERSIZE, ';');
      InputFile.get(TaskList[ListSize].DueDate, BUFFERSIZE, ';');
      InputFile.ignore(BUFFERSIZE, 'n');
}
cout << "Your tasks are:" << endl;
for ( int Iteration = 0; Iteration <= ListSize; Iteration++ )
{
    cout << TaskList[Iteration].Assignment << " for " << TaskList[Iteration].Course << " is due " << TaskList[Iteration].DueDate << endl;
}

完全公开,这是为计算机科学课。这就是为什么我不要求完整的代码解决方案,只是帮助解决逻辑或语法错误。如果我做这件事的方式完全错误,请给我一些文档来帮助我。但这确实会限制我的代码。程序必须使用字符数组,而不是字符串。

也许最后一个get应该是:

InputFile.get(TaskList[ListSize].DueDate, BUFFERSIZE, 'n');

而不是

InputFile.get(TaskList[ListSize].DueDate, BUFFERSIZE, ';');

您的最后一个字段(截止日期)末尾没有分号,只有换行符。

更新:我建议您也考虑使用getline而不是get。它们有类似的功能,但getline也会使用分隔符,这意味着您不需要使用ignore()。

不用考虑您编写的代码,我只想说我处理这类问题的正常模式是:

while(readline){processline;}

如果您没有完全正确地处理所有内容,增量文件处理更有可能遇到问题。