C++ 从C+中的.csv读取特定列+;
我有一个.csv文件,大约有5行,它看起来像这样: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
"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