通过c++解析csv

parsing csv via C++

本文关键字:csv 解析 c++ 通过      更新时间:2023-10-16

晚上好,我有以下问题。我正在解析csv文件,像这样:

entry1;entry2;entry3
entry4;entry5;entry6
;;

我是这样获取条目的:

stringstream iss;
while(getline(file, string) {
iss << line;
     while(getline(iss, entry, ';') {
     /do something
     }
}

但是我在最后一行(;;)中遇到了一个问题,我只读取了2个条目,我需要读取第三个空白条目。我该怎么做呢?

首先,我应该指出代码中的一个问题,您的iss在读取第一行然后调用while(getline(iss, entry, ';'))后处于失败状态,因此在读取每行后您需要重置stringstream。处于失败状态的原因是调用std:getline(iss, entry, ';'))后到达流上的文件结束。

对于您的问题,一个简单的选择是简单地检查是否有任何内容被读入entry,例如:

stringstream iss;
while(getline(file, line)) {
iss << line; // This line will fail if iss is in fail state
entry = ""; // Clear contents of entry
     while(getline(iss, entry, ';')) {
         // Do something
     }
     if(entry == "") // If this is true, nothing was read into entry
     { 
         // Nothing was read into entry so do something
         // This doesn't handle other cases though, so you need to think
         // about the logic for that
     }
     iss.clear(); // <-- Need to reset stream after each line
}