0

の後readLine()、カーソル位置を行頭に設定する方法は?

を使用seek()して、私にpos()はうまくいきません。

私のfile.txtは次のようになります。

Object1 Some-name 2 3.40 1.50

Object2 Some-name 2 3.40 1.50 3.25

Object3 Some-name 2 3.40 1.50

これが私のコードです:

QFile file("file.txt");
    if(file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        QTextStream stream(&file);

        while(!stream.atEnd()) {
            qint64 posBefore = file.pos();
            QString line = stream.readLine(); 
            QStringList splitline = line.split(" ");

            if(splitline.at(0) == "Object1") {
                stream.seek(posBefore);
                object1 tmp;
                stream >> tmp;
                tab.push_back(tmp);
            }

           if(splitline.at(0) == "Object2") {
                stream.seek(posBefore);
                object2 tmp;
                stream >> tmp;
                tab.push_back(tmp);
            }

            if(splitline.at(0) == "Object3") {
                stream.seek(posBefore);
                object3 tmp;
                stream >> tmp;
                tab.push_back(tmp);
            }

        }
        file.close();
    }
4

2 に答える 2

1

したがって、 (de)serializationが必要です。

正しく行うようにしてください。公式ドキュメントはこちら: http://qt-project.org/doc/qt-4.8/datastreamformat.html 例: Qt によるシリアル化

于 2013-05-26T18:13:33.010 に答える
0

シンプルなコンソール アプリを作成しました。あなたがする必要があるのは、古き良き時代のQString::split()スペースで、行の最初の要素を好きなように取るだけですQString::section()。メソッドを介して行いました。

main.cppのコードは次のとおりです。

#include <QtCore/QCoreApplication>
#include <QFile>
#include <QStringList>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QFile f("file.txt");
    f.open(QIODevice::ReadOnly);
    // next line reads all file, splits it by newline character and iterates through it
    foreach (QString i,QString(f.readAll()).split(QRegExp("[\r\n]"),QString::SkipEmptyParts)){
    QString name=i.section(" ",0,0);
    // we take first section of string from the file, all strings are stored in "i" variable
    qDebug()<<"read new object - "<<name;
    }
    f.close();
    return a.exec();
}

ファイル file.txt は、実行可能ファイルと同じディレクトリにあり、ファイルのコピーです。

Object1 Some-name 2 3.40 1.50

Object2 Some-name 2 3.40 1.50 3.25

Object3 Some-name 2 3.40 1.50
于 2013-05-26T22:21:59.127 に答える