我有一个大约有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"
请帮忙
答案 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
答案 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"