2017-04-17 116 views
0

我不是很擅长C++,但我需要对csv文件中的数据执行操作。如何在C++中为csv文件指定文件目录?

该文件是在天的格式与分类,使得例如,

revenues,profit,volume 
    481.21,144.36,30 
    449.13,134.74,28 
    544.11,163.23,34 
    368.93,110.68,23 

,使得第一行指定的分类,并从第二行和向前,报名DAY1,DAY2,第3天.... etc

.cpp .csv和可执行程序位于同一目录中,但我怀疑它没有正确读取我的文件。

所以我做了一个简单的测试和编码以下行只是为了看它是否可以打印数据作为天与分类,但它给了我0的到处

ios_base::sync_with_stdio(false); 
cin.tie(NULL); 
cout.tie(NULL); 
ifstream fin("data.csv"); 
int days = 1; 
double revenues,profit,volume; 
while (fin >> revenues >> profit >> volume){ 
    O[1][days] = revenues; 
    O[2][days] = profit; 
    O[3][days] = volume; 
    days++; 
} 
for (int t = 1; t <= days; t++){ 
    for (int i = 1; i <= 3; i++){ 
     cout << O[i][t] << " "; 
    } 
    cout << endl; 
} 
+0

请尝试创建一个[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。并且请记住,数组索引是基于* zero *的(即,一个由三个元素组成的数组,索引为'0','1'和'2')。 –

+0

你确定你的二进制文件和你的csv文件在同一个文件夹中吗?并请说明你的错误。它打开文件还是什么不工作? – retinotop

+0

无论你的'cpp'文件在哪里或你的* binary *程序在哪里,重要的是你从哪里运行你的程序。 – Galik

回答

0

在.cpp文件是这并不重要位于。 .exe文件所在位置(编译后的代码将被执行)很重要。如果.exe和.csv文件都在同一个目录中,那么它就很好。

你的问题是你阅读的方式;如果您进行快速调试,则会看到while块永远不会执行,因为(fin >> revenues >> profit >> volume)将从第一次失败。原因在于提取运算符>>对于流的工作方式。更多的细节你可以找到无处不在(如here)。小故事:由于值之间用逗号分隔,因此无法从流中读取双精度值。它将读取一个字符串,直到显示一个空格(包括逗号),并且它会尝试将该字符串解析为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库并直接使用它。

+0

这有助于我获得数据中的数字,但打印出的版本与实际数据不符比如说,1 =收入,2 =利润,3 =数量,然后打印O [2] [25]!=第25天的利润,实际上就是第31天的收入。 –

+0

@KevvyKim,这可能有多种原因,例如,您将数据放入名为“O”的阵列或文件格式。请将您的代码的新版本添加一些数据作为输入。 –

+0

我刚刚更新了数据的格式。应用getline的类似概念,但是我应该包含for循环for i和O [i] [days]的日期吗? –

相关问题