是什么导致istream :: getline()在同一行上循环?

时间:2018-01-26 18:50:32

标签: c++ ifstream text-parsing

我正在阅读不同来源的不同.csv文件。我不是在创建这些文件。

在阅读这些文件的某些时候,我需要跳过几行并使用它:

void skipLines(unsigned int nLines, std::ifstream& file){
   char l[1024];
   for (unsigned int i = 0; i < nLines; i++)
      file.getline(l, 1024);
}

对于某个文件,这一直有效。

文件正确打开,然后我想跳过前5行并运行skipLines(5, file)

通过调试,我可以看到l正确获取前4行的数据。当到达下一行(应该有文本)时,它只在调试器中显示为""

如果我检查在该行中找到的字符,我看到第一个字符是'\0'(字符串的结尾?),以下字符是“应该”来自上一行的字符。 / p>

如果继续在更多行上运行skipLines(),它会继续循环使用相同的数据。始终l使用以'\0'开头的相同字符集。

这会导致什么?在解析文本文件时,我应该如何正确地“跳过”?

编辑:如果将文件内容复制并粘贴到新文件并保存。问题消失了。但这不是我可以在这种情况下使用的工作。

我不想分享文件的确切内容,但它基本上是这样的:

Transfers
User,****,*****

Timestamp,Type,***,Subtotal,Fees,Total,Currency,Price,Payment Method,ID,Share
2017-06-01 10:54:42 -0700,***,0.25638772,50.0,2.00,52.0,***,195.02,***************,***54e27dd1741d3810a8e0,0

以Timestamp开头的行是它循环的地方。

0 个答案:

没有答案