Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从C+中的.csv读取特定列+;_C++_Csv - Fatal编程技术网

C++ 从C+中的.csv读取特定列+;

C++ 从C+中的.csv读取特定列+;,c++,csv,C++,Csv,我有一个.csv文件,大约有5行,它看起来像这样: "University of Illinois, Chicago","1200, West Harrison","41.3233313","88.221376" 第一列是建筑物的名称,第二列是地址,第三列和第四列代表经纬度。 我只想为每一行获取第3列和第4列中的值 如果使用getline方法并用分隔每个条目,将无法获得所需的结果。以下是我正在做的一个示例: ifstream file("Kiosk Coords.csv"); doub

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

"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;
    }
我特别想要的是:

latitude = "41.3233313"
longitude = "88.221376"

请帮忙

我想你必须手动解析它。假设所有元素都用引号括起来,您只需查找引号就可以轻松地提取它们

读一整行,然后找一对引号,并把内容放在引号之间

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);
}
C++14的救命稻草:

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

“伊利诺伊大学芝加哥分校”
——您认为如果将此应用于
getline
,会发生什么情况?认为不考虑嵌入的逗号是不够明智的。要么写一个真正的csv解析器,要么让其中一个在这里和网络上浮动。我明白了。我想知道是否有某种运算符可以将列分隔开,因为没有“运算符”。唯一的“操作符”是老式的“写函数”。。您的要求不仅仅是在逗号上划界——您已经引用了可以包含逗号的字符串,要正确解析它需要更复杂的技巧。我建议您将csv文件的分隔符更改为非冲突分隔符,例如“\t”。永远不要“和”!
cols[0]: "University of Illinois, Chicago"
cols[1]: "1200, West Harrison"
cols[2]: "41.3233313"
cols[3]: "88.221376"
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