1

そのため、毎回チェックする必要がある単語のリストがあります。私は次のコードでこれをやってみました:

bool woordenKloppen=true;

//doorloop alle woorden in de array
for (int i=0;i<woordenlijst.size();i++)
{
    m_woordenlijst->open(QIODevice::ReadOnly);
    m_woordenlijst->reset();

    char buffer[1024];
    qint64 lineLength = m_woordenlijst->readLine(buffer, sizeof(buffer));

    //zoek in de woordenlijst zolang het woord niet gevonden is en de woordenlijst niet gedaan is
    while (lineLength!=-1 && woordKlopt==false)
    {
        QString vergelijkWoord=QString(buffer);

        lineLength = m_woordenlijst->readLine(buffer, sizeof(buffer));

        //verwijder de return en newline characters van het woord in de file
        vergelijkWoord.remove(vergelijkWoord.length()-2,2);

        //het woord klopt indien het in de woordenlijst staat
        if (woord==vergelijkWoord)
        {
            woordKlopt=true;
        }
    }
    if (!woordKlopt)
    {
        woordenKloppen=false;
    }

    //sluit de woordenlijst
    m_woordenlijst->close();
}

//return true als alle woorden klopten, anders false
return woordenKloppen;

関数が初めて呼び出されるたびに、これはうまくいくようです。2 回目は lineLength が -1 になり、ループをスキップします。何か不足していますか?前もって感謝します

テキストファイルは次のようになります。各行に 1 単語だけです。

aalfuiken
aalgeer
aalgeren
aalglad
aalgladde
aalkorf
aalkorven
aalkuip
aalkuipen
aalmoes
aalmoezen
aalmoezenier
aalmoezeniers
aalmoezenierskamer
aalmoezenierskamers
aalpomp
aalpompen
aalput
aalputten
4

3 に答える 3

0

行を読み取れなかったがエラーが発生しなかった場合、この関数は 0 を返します。エラーが発生した場合、この関数は読み取れた長さを返し、何も読み取れなかった場合は -1 を返します。

とはどういう意味errorString()ですか?

于 2013-08-13T11:01:12.007 に答える
0

これが正しい方法だとは思いませんが、ファイルを閉じないことで問題が解決したようです:S

于 2013-08-13T12:38:29.533 に答える
0

問題は行末です。ファイルには、Windows スタイルの "\r\n" で終わる行があり、バイナリ モードで読み込んでいます。ファイルを開く方法を修正するには:

m_woordenlijst->open(QIODevice::ReadOnly | QIODevice::Text);


トピック外:qtでテキストファイルを読み取る最良の方法は、QTextStreamを使用することです。

于 2013-08-13T13:06:15.803 に答える