从.csv解析器中获取无输出

时间:2014-06-11 15:00:46

标签: c++ csv

以下代码应该采用文件名,即“example.csv”,并输出2D数组。

typedef vector<vector<double> > matrix;

matrix importcsv(string filename)
{
    ifstream myfile (filename);
    matrix contents {{0.0}}; 
    char parens; double data; int i,j;
    while(!myfile.eof())
    {
        if(myfile.get()==',')
        {
            ++j; 
            contents[i].resize(j+1); 
            myfile >> parens;
        }
        else if(myfile.get()=='\n')
        {
            ++i; 
            contents.resize(i+1);
            j=0; 
            contents[i].resize(j+1);
        }
        else
        {
            myfile >> data; 
            contents[i][j]=data;
        }
    }
    return contents;
}

问题:编译器运行顺利,但可执行文件没有返回任何内容。

当我手动写出循环时,即通过Ctrl + V手动重复代码时,该函数按预期工作。所以错误必须在'if'或'else if'语法中的某处...

1 个答案:

答案 0 :(得分:2)

我想我知道问题所在。在你的if语句中,myfile.get()实际上读取了一个字符,而不只是验证下一个字符是什么。

因此,如果下一个字符是新行,则第一个if语句将获取它,但是将为false,第二个if也将不为true,因为前一个如果已经使用了新行字符。

做类似的事情:

    char c = myfile.get();
    if(c == ',')
    {
        ++j; 
        contents[i].resize(j+1); 
        myfile >> parens;
    }
    else if(c=='\n')
    {
        ++i; 
        contents.resize(i+1);
        j=0; 
        contents[i].resize(j+1);
    }
    else
    {
        myfile >> data; 
        contents[i][j]=data;
    }