【发布时间】:2017-07-04 07:01:53
【问题描述】:
我有一个 CSV 文件,其中包含带有换行符 ("\n") 和/或用双引号括起来的逗号的单元格。 当我使用 getline() 函数获取每一行时,它将单元格内的每一行视为 csv 文件的新行。此外,当使用 splitIntoVec 获取每一行的向量时,它会将单元格内的逗号视为新的向量元素。 我想将 csv 文件的内容存储到一个向量向量中,其中每一行都是其单元格内的字符串向量。
例如,对于以下 csv 文件内容
"Row 1 cell 1
With break line","Row1 cell2, with comma"
"Row 2 cell 1
With break line","Row2 cell2, with comma"
Row 3 cell 1,Row3 cell 2
我得到了 4 个字符串向量的结果向量,其中第一个只有一个元素,第二个有 3 个元素。 这是我的代码:
vector<vector<string>> readFromCsv(string &fileName, char rowDelimiter = "\n", char colDelimiter = ",") {
ifstream file(fileName); // declare file stream
string value;
vector<vector<string>> contentVec;
vector<string> rowVec;
string rowStr;
while (getline(file, rowStr, rowDelimiter)) {
rowVec = splitIntoVec(rowStr, colDelimiter);
contentVec.push_back(rowVec);
}
return contentVec;
}
是否有任何其他功能(在诸如 boost 之类的库中)可用于解决这些问题?任何帮助,将不胜感激。
在 PHP 中,我通过 fgetcsv() 正确获取了 csv 文件的内容。 c++中是否有替代功能?
【问题讨论】:
-
您要解析的不是 CSV。 CSV 语法由RFC4180 定义,文档的第一点声明:
Each record is located on a separate line, delimited by a line break (CRLF). -
单元格内的双引号怎么样?
-
@SimoneCifani 我使用的 csv 文件是由 PHP 创建的。另外,我用 excel 和 Libreoffice 创建了逗号分隔的 csv 文件,结果还是一样。
-
@DAle 是的! :|。单元格可能包含双引号。但我忽略了这个案例以避免更复杂!