如何在c ++中为csv文件指定文件目录?

时间:2017-04-17 05:01:40

标签: c++ file csv directory ifstream

我不太擅长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

1 个答案:

答案 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库并直接使用它。