C++读取CSV文件打印到控制台仅输出空白行如何解决
问题原因
- 核心问题是未调用
getline(fin, line)从文件流读取内容到line变量,line始终是初始化的空字符串,传入stringstream解析后得到的所有字段都是空值,所以输出全是空白行,和文件大小没有关系。 - 外层
while(fin.is_open())是冗余逻辑,内部循环执行10次后就会关闭文件,该循环仅会执行1次,没有实际作用。 - 现有逻辑没有判断文件读取状态,若文件行数不足10行,会出现异常读取。
解决方案
调整读取逻辑,每次循环先从文件流读取一行内容到line,再做字段解析,同时增加文件读取结束的判断,修正后代码如下:
#include <iostream> #include <fstream> #include <string> #include <sstream> using namespace std; int main() { string line; ifstream fin; fin.open("train_dataset_20k.csv"); if (!fin.is_open()){ cout << "Error opening file" << endl; return 1; } for (int i = 0; i < 10; i ++){ // 先从文件流读取一行内容 if(!getline(fin, line)) { // 文件提前读取结束则退出循环 break; } string Sentiment,id,Date,Query,User,Tweet; stringstream lineSS(line); getline(lineSS, Sentiment, ','); getline(lineSS, id, ','); getline(lineSS, Date, ','); getline(lineSS, Query, ','); getline(lineSS, User, ','); getline(lineSS, Tweet, '\n'); cout << Sentiment << endl; cout << id << endl; cout << Tweet << endl; } fin.close(); return 0; }
补充提示
如果CSV中的推文字段本身包含逗号,当前用逗号作为分割符的逻辑会出现字段错位,后续可以针对带引号包裹的字段做特殊解析逻辑,避免读取错误。
内容的提问来源于stack exchange,提问作者Nicole Sood
相关产品推荐
相关产品推荐

