2011-08-04 68 views
3

昨天我做了一个小脚本,有一些帮助来阅读.csv文件。尽管我发现了一种读取第一个值并将其存储的方法,但由于某种原因,它存储了最后一个值。读取.csv文件中字段的值?

我存储了我认为应该是value1下的第一个值,并重新显示它以确保它正确显示并且事实上存储在可调用变量下。

有没有人知道这段代码有什么问题?我想我应该使用矢量,但是当我阅读我在互联网上发现的关于它们的参考表时,我正在引起一些注意。任何帮助表示赞赏。

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

int main() 
{ 

    int loop = 1; 
    string value; 
    string value1; 

    while(loop = 1) 
    { 

     cout << "Welcome! \n" << endl; 

     ifstream myfile; 

     myfile.open ("C:/Documents and Settings/RHatfield/My Documents/C++/Product Catalog Creator/Source/External/Sample.csv"); 

     while (myfile.good()) 

     getline (myfile, value, ','); 
     cout << string (value) << endl; 

     value1 = value; 

     cout << value1; 

     myfile.close(); 

     system("PAUSE"); 

     return 0; 
    } 


} 
+0

重复以下问题:http://stackoverflow.com/questions/1120140/csv-parser-in-c –

回答

1

您的错误似乎是纯代码格式。

while (myfile.good()) 

循环后没有{}。所以只有下一行重复。

下面的代码在读完整个文件后执行。

cout << string (value) << endl; 

因此value存储文件的最后一行。

+0

是的你的权利,但是当我修复它,它做同样的事情,只列出所有的逐个值,然后存储最后一个并重新列出它。有谁知道我在哪里可以找到很好的参考资料,因为现在我对结果更加困惑。感谢您的帮助,只是在我面前学习了很多东西。 – Rob

+0

@Rob,现在它是纯粹的算法问题。有很多解决方案。如果你只想得到第一行,你不需要任何循环。只要用'if'语句替换'while'即可。 –

+0

你是对的,但不是说我想从行(某些数字)和列(某个数字)抽取数据,我该怎么做,甚至只是说读线(某个数字)并返回所有值。我不能只是再次改变while循环。这是矢量进来吗? – Rob

0

你可能想改变你while循环条件:

char separator; 
int value1; 
int value2; 
int value3; 
while (myfile >> value1) 
{ 
    // Skip the separator, e.g. comma (',') 
    myfile >> separator; 

    // Read in next value. 
    myfile >> value2; 

    // Skip the separator, e.g. comma (',') 
    myfile >> separator; 

    // Read in next value. 
    myfile >> value3; 

    // Ignore the newline, as it is still in the buffer. 
    myfile.ignore(10000, '\n'); 

    // Process or store values. 
} 

上面的代码片段并不十分可靠,但展现了从文件中读取,跳过非数字分离器和处理结束的概念该线。代码也被优化。