我不太擅长c ++,但我需要对csv文件中的数据执行操作。
该文件采用天数与分类的格式,例如
if (linkIsSafe(dl[i].href))
setTimeout(function() {
window.open(dl[i].href);
}, 2000);
}
这样第一行指定分类,从第二行和前面开始,征集day1,day2,day3 ......等等
.cpp .csv和可执行程序在同一目录中,但我怀疑它没有正确读取我的文件。
所以我做了一个简单的测试并对以下几行进行了编码,看它是否可以将数据打印为天数与分类,但它给了我0到处
revenues,profit,volume
481.21,144.36,30
449.13,134.74,28
544.11,163.23,34
368.93,110.68,23
答案 0 :(得分:0)
.cpp文件所在的位置并不重要。重要的是.exe文件所在的位置(将被执行的编译代码)。如果.exe和.csv文件都在同一个目录中,那么一切都很好。
你的问题就是你的阅读方式;如果进行快速调试,您将看到while块永远不会被执行,因为(fin >> revenues >> profit >> volume)
将从第一次失败。原因是流的提取运算符>>
的工作方式。您可以在任何地方找到更多详细信息(例如here)。简短的故事:它无法从流中读取双精度值,因为值以逗号分隔。它将读取一个字符串,直到空格显示(包括逗号),它将尝试将该字符串解析为double,它将失败。
你应该尝试逐行阅读。您将该行拆分为三个值并使用它们。
或者您可以在逗号之前读取字符串并将这些字符串解析为double值。我已经提出了一些代码:
string line;
while (fin.good()){
std::getline (fin, line);
stringstream line_stream(line);
string value;
std::getline (line_stream, value, ',');
O[1][days] = atof(value.c_str());
std::getline (line_stream, value, ',');
O[2][days] = atof(value.c_str());
std::getline (line_stream, value, ',');
O[3][days] = atof(value.c_str());
days++;
}
std::getline()
读取字符串直到换行符或','。
或者您可以在C ++中搜索一些专用的CSV库并直接使用它。