从txt文件中读取随机行,然后在QT SDK中修剪它

时间:2013-07-20 10:50:54

标签: c++ qt

我想请教你的小学校项目。 任务是确定一个人的性别(使用2个单选按钮),然后选择一个随机的日本姓氏和男/女中间名。还有剩下的任务,但与这部分相比没有什么:( 事实上,我已设法使3 .txt文件(familynames.txt,malemiddlenames.txt和femalemiddlenames.txt)如下所示: 1,Akiro 2,樱花 3,等...

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

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

谢谢你,祝你有个美好的一天/晚上:鲁本

2 个答案:

答案 0 :(得分: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

请记住,如果将string转换为int失败和/或list throw(list.at(xx))的访问者

,则必须进行错误处理

积极的是,你不需要有序的文本文件!

答案 1 :(得分:0)

我真的不明白你要做什么,但在这一行,我猜你得到的是数字,而不是姓氏。

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