在c ++中读取csv文件并存储在不同的变量中

时间:2015-03-15 19:25:28

标签: c++ csv fstream

我需要读取一个类似于CSV文件的文件(第一行与文本的其余部分不同)。

文件结构如下,第一行和每行后面包含名字和名称:

first line
Barack Obama
Jacques Chirac
John Paul-Chouki
etc.

我需要使用getline存储名称和名字不同的变量:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {


    //open file with ifstream (with full path)
    ifstream file("file.txt");
    string line;
    string lineContent;
    string firstname;
    string name;
    int i=1;


    //check if file is really open
    if ( ! file.is_open() ) {
        cout <<" Failed to open" << endl;
    }
    else {
        cout <<"Opened OK" << endl;
    }

    while(file >> line) {
        if(i == 1)
            cout << "1st line==> "+line << endl;
        else
            getline(file,line, ' ');
            cout << "result==> "+line << endl;
        i++;
    }
}

现在它不起作用。

1 个答案:

答案 0 :(得分:2)

问题是file >> linegetline(file,line, ' ')都读取了文件。

请尝试:

...
while(getline(file,line)) {
    if(i == 1)
        cout << "1st line==> "+line << endl;  // ignore first line
    else {    // read data
        string firstname, lastname;
        stringstream sst(line); 
        sst >> firstname >> lastname; 
        cout << "result==> "<< firstname<<" "<<lastname << endl;
        // where to store the data ? 
    }  
    i++;
}

目前尚不清楚您必须存储数据的位置。因此,请完成代码,将名字和姓氏添加到数组中,或者更好的是向量。

修改

请注意,您的样本数据不是CSV格式:CSV表示Comma Separated Values。如果要用逗号分隔数据,您可以使用

替换sst>>...
    getline(getline (sst, firstname, ','),lastname, ',');