1

読み込もうとしているファイルに問題があり、その解決方法がわかりません。

ファイルは CSV ですが、ファイルのテキストにもカンマがあるため、新しい値を示すカンマの周りに引用符があります。

例えば:

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

a を使用して見積もりを処理する方法を知りたいですQFileStream(ただし、基本的な解決策も見ていません)。

さらに、別の問題は、これらの引用符内に改行がある可能性があるため、行ごとに読むこともできないことです。

quotes=""Rには、これらの問題を解決するオプションがあります。

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 に答える