gpt4 book ai didi

c++ - 如何在 C++ 的单元格中读取带有换行符和逗号字符的 CSV 文件

转载 作者:行者123 更新时间:2023-11-28 01:46:23 33 4
gpt4 key购买 nike

我有一个 CSV 文件,其中包含带有换行符 ("\n") 和/或用双引号括起来的逗号的单元格。当我使用 getline() 函数获取每一行时,它会将单元格内的每一行视为 csv 文件的新行。此外,当使用 splitIntoVec 获取每一行的 vector 时,它会将单元格内的逗号视为新的 vector 元素。我想将 csv 文件的内容存储到 vector 的 vector 中,其中每一行都是其单元格内的字符串 vector 。

例如,对于下面的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 个字符串 vector 的结果 vector ,第一个只有一个元素,第二个有 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++ 有替代函数吗?

最佳答案

@Simone 在他的评论中已经说过这不是 CSV 文件。但是看到您的问题,您将需要亲自动手并进行一些文本处理以将其分开。您可以读取字符串中的完整文件,然后使用循环或您认为合适的任何方式进一步分解它。为此,您需要在遍历和中断时仅在不在双引号内时跟踪遇到的 "。

例如,

(左撇号)“第 1 行单元格 1 带分隔线“(右撇号)”(左撇号)Row1 cell2,带逗号“(右撇号)

您必须使用索引或数字来跟踪打开和关闭双撇号,并且仅当在打开和关闭撇号之外发现“\n”时才对行进行换行。

如果您确定单元格中没有 ",您也可以使用正则表达式。

谢谢@Alex 如果其他人面临同样的问题,有用的链接:http://mybyteofcode.blogspot.nl/2010/11/parse-csv-file-with-embedded-new-lines.html

关于c++ - 如何在 C++ 的单元格中读取带有换行符和逗号字符的 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44899061/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com