读取引用的CSV数据而不使用换行符换行

时间:2013-09-11 06:40:10

标签: c++ qt csv

我在尝试阅读的文件存在问题但我不知道该如何解决。

该文件是CSV,但文件文本中也有逗号,因此逗号周围有引号表示新值。

例如:

"1","hello, ""world""","and then this"  // In text " is written as ""

我想知道如何使用QFileStream处理引号(虽然我还没有看到基本解决方案)。

此外,另一个问题是我也无法逐行阅读,因为在这些引号中可能会有换行符。

在R中,有一个quotes=""选项可以解决这些问题。

C ++中必定存在一些东西。它是什么?

2 个答案:

答案 0 :(得分:2)

你可以在qt中按引号(不仅仅是引号,但是任何符号,例如'\')符号拆分,只需将\放在它前面,例如:string.split("\"");将拆分{{1通过string符号。

这是一个简单的控制台应用程序来拆分您的文件(最简单的解决方案是拆分“,”符号似乎到目前为止):

'"'

其中// opening file split.csv, in this case in the project folder QFile file("split.csv"); file.open(QIODevice::ReadOnly); // flushing out all of it's contents to stdout, just for testing std::cout<<QString(file.readAll()).toStdString()<<std::endl; // reseting file to read again file.reset(); // reading all file to QByteArray, passing it to QString consructor, // splitting that string by "," string and putting it to QStringList list // where every element of a list is value from cell in csv file QStringList list=QString(file.readAll()).split("\",\"",QString::SkipEmptyParts); // adding back quotes, that was taken away by split for (int i=0; i<list.size();i++){ if (i!=0) list[i].prepend("\""); if (i!=(list.size()-1)) list[i].append("\""); }//*/ // flushing results to stdout foreach (QString i,list) std::cout<<i.toStdString()<<std::endl; // not using QDebug, becouse it will add more quotes to output, which is already confusing enough 包含split.csv,输出为:

"1","hello, ""world""","and then this"

答案 1 :(得分:1)

谷歌搜索后,我找到了一些现成的解决方案。请参阅this article关于qxt