1

私の小さな学校のプロジェクトであなたの助けを求めたい. タスクは、(2 つのラジオ ボタンを使用して) 人の性別を決定し、ランダムな日本の姓と男性/女性のミドルネームを選択することです。タスクの残りの部分がありますが、この部分に比べれば何もありません :( つまり、3 つの .txt ファイル (familynames.txt、malemiddlenames.txt、femalemiddlenames.txt) を次のようにすることができました: 1,アキロ2、サクラ3、etc...

私がやりたいのは、乱数を作成し、乱数と同じ番号の行に到達するまで行を読み取り、その番号とカンマを切り取り、対応するラベルに名前を表示することです。これまでのところ、これは私が持っているものです:

void MainWindow::famname()
{
    QString familyname;
    int famrand =qrand() % 76;
    ui->label_2->setText(QString::number(famrand));
    int i = 1;

    QFile famfile("C:\Users\Ryseth\gyakorlas\_familynames.txt");
    QTextStream in(&famfile);
    if(famfile.open(QIODevice::ReadOnly)){

        while (!in.atEnd()) {
             QString line = in.readLine();
             i++;
             if(i==famrand){
                 QStringList line2 =line.split(',');
                 familyname = line2.at(0);
                 ui->label_2->setText(QString::number(famrand)+" "+QString::number(i));
                 ui->FamilyLabel->setText(familyname);
             }//IF
         }//WHILE
    }//IF
         famfile.close();
}//NGEN

なんらかの解決策を思いつく人がいる場合、または何か提案がある場合は、遠慮なく私と共有してください:D

ありがとう、良い昼/夜をお過ごしください : ルーベン

4

2 に答える 2

1

Boost::Spirit::Qi を使用すると、ファイルを解析std::vector< std::string >して単純な C++ メソッドで操作を実行できると思います。

ただし、Qt-Solution を支援するには:

int famrand =qrand() % 76;正当な番号を生成するかどうか、テキストファイルに十分なエントリがあるかどうかを確認することはありません...

int i = 1;この整数は不要です。数値はテキスト ファイル内にあります...

私の解決策(未テスト):

while (!in.atEnd()) {
  QString line = in.readLine();
  QStringList list = line.split(",", QString::SkipEmptyParts);
  bool ok;
  int idx = list.at(0).toInt(&ok);
  if (ok && idx == famrand) {
    familyname = list.at(1).trimmed();
    // ... do with your ui whatever you want
  }//IF
}//WHILE

list.at(xx)string から int への変換が失敗した場合、および/または list throw ( )のアクセサーが失敗した場合は、エラー処理を行う必要があることに注意してください。

良い点は、順序付けられたテキスト ファイルが必要ないことです。

于 2013-07-20T11:35:55.030 に答える
0

あなたが何をしようとしているのかよくわかりませんが、この行では姓ではなく番号を取得していると思います。

familyname = line2.at(0); // number
familyname = line2.at(1); // family name
于 2013-07-20T11:34:14.423 に答える