微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将CSV文件读入2D向量

如何解决将CSV文件读入2D向量

我的文件内容如下:

Barr,3145,7
Rab,12,5513,1412,221,232,179,7121231
Bean,1,1231,219,21,337,9239,312,764,640391,4,7966346,22278,5,116364,56350
Earl,132,230,121,32,425,67
Donut,112,5525,23121,2123,65432,8790,3,4567,444

我希望每行都存储在2D向量(vector<vector<string>>)中,且不带逗号。

我尝试做:

while(getline(filestream,line)){   
    stringstream linestream(line);
    while(getline(linestream,anotherLine,','){
        oneDvector.push_back(anotherLine);  
    }
    twoDvector.push_back(oneDvector);
    oneDvector.clear();
}

但这似乎不起作用。我该怎么办?

解决方法

恕我直言,您不想使用2D向量或数组。您需要一个std::vector的课程:

struct Record
{
    std::string    text;
    std::vector<int> data;

    friend std::istream& operator>>(std::istream& input,Record& r);
};

std::istream& operator>>(std::istream& input,Record& r)
{
    std::string  text_line;
    std::getline(input,text_line);
    std::istringstream text_stream(text_line);
    std::getline(text_stream,r.text,',');
    int value;
    char comma;
    while (text_stream >> value)
    {
        r.data.push_back(value);
        text_stream >> comma;
    }
    return input;
}

注意:在上面的输入函数中,一条记录逐行读入一个字符串。这将使数字的读取更加容易。

您输入的循环看起来像:

Record r;
std::vector<Record> database;
while (file_stream >> r)
{
    database.push_back(r);
}

通常根据输入记录对结构进行建模可以使程序更好。易于开发和调试。

可以通过用空格替换第二个出现的和剩余的逗号来简化输入。第一个逗号用于结束文本字段。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。