在C ++中读取.csv中的特定列

时间:2018-01-11 03:15:19

标签: c++ csv

我有一个大约有5行的.csv文件,它看起来像这样:

"University of Illinois, Chicago","1200, West Harrison","41.3233313","88.221376"

第一列是建筑物的名称,第二列是地址,第三列和第四列代表纬度和经度。 我想只为每一行采用第3和第4列中的值。

如果我使用getline方法并将每个条目与,分开,则无法获得所需的结果。以下是我正在做的事情的样本:

ifstream file("Kiosk Coords.csv");
    double latt[num_of_lines];
    double longg[num_of_lines];
    string name;
    string address;
    string latitude;
    string longitude;
    flag = 0;

    while(file.good()){     
            getline(file,name,',');
            getline(file,address,',');
            getline(file,latitude,',');
            getline(file,longitude,'\n');
            //cout<<name<<" "<<address<<" "<<latitude<<" "<<longitude<<endl;
            cout<<longitude<<endl;
    }

对于上面给出的输入,如果我使用我的方法,我在变量中得到以下值:

name = "University of Illinois"
address = "Chicago
latitude = "1200"
longitude = "West Harrison,41.3233313,88.221376"

我特别想要的是:

latitude = "41.3233313"
longitude = "88.221376"

请帮忙

2 个答案:

答案 0 :(得分:3)

C ++ 14&#39; std::quoted救援:

char comma;
file >> std::quoted(name) >> comma          // name: University of Illinois, Chicago
     >> std::quoted(address) >> comma       // address: 1200, West Harrison
     >> std::quoted(latitude) >> comma      // latitude: 41.3233313
     >> std::quoted(longitude) >> std::ws;  // longitude: 88.221376

DEMO

答案 1 :(得分:2)

我认为你必须手动解析它。鉴于所有元素都包含在引号中,您只需查找引号即可轻松提取它们。

阅读整行,然后查找一对引号,并获取它们之间的内容。

std::string str;
std::getline(file, str);
std::vector<std::string> cols;
std::size_t a, b;

a = str.find('\"', 0);
while (true) {
    b = str.find('\"', a + 1);
    if (b != std::string::npos){
        cols.push_back(str.substr(a, b-a));
    }
    a = str.find('\"', b + 1);
}

结果(包括双引号):

cols[0]: "University of Illinois, Chicago"
cols[1]: "1200, West Harrison"
cols[2]: "41.3233313"
cols[3]: "88.221376"