我正在尝试更改此功能,以便在使用\r
结尾时提供CSV文件时进行说明。我似乎无法弄清楚如何将getline()
考虑在内。
vector<vector<string>> Parse::parseCSV(string file)
{
// input fstream instance
ifstream inFile;
inFile.open(file);
// check for error
if (inFile.fail()) { cerr << "Cannot open file" << endl; exit(1); }
vector<vector<string>> data;
string line;
while (getline(inFile, line))
{
stringstream inputLine(line);
char delimeter = ',';
string word;
vector<string> brokenLine;
while (getline(inputLine, word, delimeter)) {
word.erase(remove(word.begin(), word.end(), ' '), word.end()); // remove all white spaces
brokenLine.push_back(word);
}
data.push_back(brokenLine);
}
inFile.close();
return data;
};
答案 0 :(得分:0)
这可能是Getting std :: ifstream to handle LF, CR, and CRLF?的副本。最佳答案特别好。
如果您知道每一行以\r
结尾,则始终可以使用getline
指定getline(input, data, '\r')
分隔符,其中输入是流,数据是字符串,第三个参数是分裂的角色。在第一个while循环开始后你也可以尝试类似下面的内容
// after the start of the first while loop
stringstream inputLine;
size_t pos = line.find('\r');
if(pos < line.size()) {
inputLine << std::string(x.begin(), x.begin() + p);
inputLine << "\n"
inputLine << std::string(x.begin() + p + 1, x.end());
} else {
inputLine << line;
}
// the rest of your code here