从txt文件中读取一个随机行,然后在QT SDK中对其进行修剪

Reading a random line from a txt file, then trim it in QT SDK

本文关键字:然后 QT 修剪 SDK 随机 读取 文件 txt 一个      更新时间:2023-10-16

我想请你帮助我的小学校项目。任务是确定一个人的性别(使用2个单选按钮),然后随机选择一个日本姓氏和男性/女性中间名。还有剩下的任务,但与这部分相比,这算不了什么:(问题是,我已经设法使3.txt文件(familynames.txt、maledemiddnames.txt和femaledemiddenames.txt)看起来如下:1、Akiro2、樱花3等。。。

我想做的是创建一个随机数,读取行,直到它到达与我的随机数相同的行,然后去掉数字和逗号,并在相应的标签上显示名称。到目前为止,这就是我所拥有的:

void MainWindow::famname()
{
    QString familyname;
    int famrand =qrand() % 76;
    ui->label_2->setText(QString::number(famrand));
    int i = 1;
    QFile famfile("C:UsersRysethgyakorlas_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

谢谢你,祝你度过美好的一天/晚上:Ruben

我认为使用Boost::Spirit::Qi,您可以将文件解析为std::vector< std::string >,并使用简单的c++方法进行操作。

但为了帮助您的Qt解决方案:

您永远不会检查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

请记住,如果字符串到int的转换失败和/或list throw(list.at(xx))的访问者失败,则必须进行错误处理

积极的一面是,你不需要一个有序的文本文件

我真的不明白你在做什么,但在这一行,我想你得到的是数字,而不是家族名称。

familyname = line2.at(0); // number
familyname = line2.at(1); // family name