1

我尝试读取的文件有问题,我不知道如何解决它。

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

例如:

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

我想知道如何使用 a 处理报价QFileStream(尽管我也没有看到基本解决方案)。

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

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

C++ 中一定有一些东西。它是什么?

4

2 回答 2

2

您可以在qt中按引号(不仅仅是引号,而是任何符号,例如'\')符号分割,只需放在\它之前,例如:string.split("\"");将按符号分割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"
"hello, ""world"""
"and then this"
于 2013-09-11T09:52:47.600 回答
1

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

于 2013-09-11T12:28:10.427 回答