0

私は(再び)Qtで立ち往生していて、テキストファイルからテキストを読み込もうとしています。テキストファイルの内容は次のとおりです。

1001 James Bark
1002 Jeremy Parker
1003 Seinfeld Parker
1004 Sigfried FonStein
1005 Rabbun Hassan
1006 Jenniffer Jones
1007 Agent Smith
1008 Mister Anderson

名前の由来を聞かないでください。このファイルにインデックスを付けてテーブルに追加できるようにする必要があります。現在のところ、テーブルは次のようになっています。

|--------------------------------|
|          |First Name|Last Name | 
|--------------------------------|
|1001      |          |          |  
|--------------------------------| 
|          |          |          |
|--------------------------------|      
|          |          |          |
|--------------------------------|      
|          |          |          |      
|--------------------------------|

しかし、それはこのように見える必要があります

    |--------------------------------|
    |          |First Name|Last Name | 
    |--------------------------------|
    |1001      |James     |Bark      |  
    |--------------------------------| 
    |1002      |Jeremy    |Parker    |
    |--------------------------------|      
    |1003      |Seinfeld  |FonStein  |
    |--------------------------------|      
    |1004      |Rabbun    |Hassan    |      
    |--------------------------------|

テーブル部分とアイテムの入れ方は問題ありません。問題は、上部の例のようにフォーマットされたテキストファイルを読み取ることにあります。また、そのようにフォーマットする必要はありません。ID、Fname、Lnameの3つの異なるテキストファイルをこれらのファイルで区切ることができます。これは面倒ですが、私がこれをしなければならないなら、私はそうします。

だから私の質問は、このファイルをどのようにインデックス付けしてこれらの値を取得するのですか?

関数は次のとおりです。

Function(){
    QString fileName = "C:\\Users\\Gabe\\SeniorProj\\Students.txt";
    QFile mFile(fileName);

    if(!mFile.open(QFile::ReadOnly | QFile::Text)){
        qDebug() << "Could not open file for reading";
        return;
    }

    QTextStream in(&mFile);
    QString mText = in.readAll();

    mFile.flush();
    mFile.close();
    }

このコードは、どこかのチュートリアルから入手したものです。すべてが機能し、ファイルにアクセスできるかどうかを確認しました。すべて問題ありません。しかし、それをどうするか...私はすべてのテキストに等しい文字列を持っています。それはあまり役に立ちません。そこで、c ++で使用したものを試してみました。たとえば、mFile.nextInt();その関数は存在しません!!!

Qtで特定のものをテキストファイルで検索するにはどうすればよいですか?

4

1 に答える 1

5

このファイル形式では、名前にスペースを含めることができる場合、名と姓のどちらに2つの部分が含まれているかがわからないため、多くの問題が発生します。たとえば、他の文字を区切り文字として使用することを検討してください。

1001;James;Bark
1002;Jeremy;Parker
1003;Seinfeld;Parker

次に、一度に1行ずつ読み取り(QTextStreamのドキュメントを参照)、QStringをQStringListに分割します。

QTextStream stream(stdin);
QString line;    
do {
    line = stream.readLine();
    QStringList parts = line.split(";", QString::KeepEmptyParts);
    if (parts.length() == 3) {
        QString id        = parts[0];
        QString firstName = parts[1];
        QString lastName  = parts[2];
    }        
} while (!line.isNull());
于 2012-04-05T21:05:30.690 に答える