我有一个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 ++中有替代函数吗?
答案 0 :(得分:1)
您必须完全按Elasticsearch 5.4
分隔,保留2个状态:在"
内外。 ""
和,
根据州有不同的含义。
您可以使用EOL
读取getline(file, rowStr, '"')
以外的所有内容,但您在记录中分隔的逻辑会更复杂一些。如果允许数字不带引号,那么它就会变得更加复杂。
答案 1 :(得分:1)
例如,
(开放撇号)&#34;第1行单元格1 使用折断线&#34;(关闭撇号),&#34;(打开撇号)Row1 cell2,用逗号&#34;(关闭撇号)
您必须使用索引或数字跟踪打开和关闭双撇号,并且只有在&#39; \ n&#39;在开始和结束的撇号之外被发现。
如果您确定没有&#34;也可以使用正则表达式。在细胞中。
感谢@Alex有用的链接,如果其他人遇到同样的问题:http://mybyteofcode.blogspot.nl/2010/11/parse-csv-file-with-embedded-new-lines.html