2016-03-04 23 views
1

标题几乎说了一切,但我最好更具体一点,以免混淆任何人(包括我自己)。QTextStream将csv文件中每行的第一个字符与已知变量进行比较?

在这里待了两天没有太大的成功。 我有一个CSV文件,并用QTextStream逐行打开/读取它。线长仅设置为每行的第一个字符,line.at(0)。它将每行的开始与已知变量/整数进行比较。 它的工作原理和标签确实显示“Match Found”,但之后立即崩溃。它永远达不到“找不到匹配”。

错误我收到:

ASSERT: "uint(i) < uint(size())" in file ..\..\..\..\Qt\5.0.2\mingw47_32\include/QtCore/qstring.h, line 729 
Invalid parameter passed to C runtime function. 
Invalid parameter passed to C runtime function. 

任何想法?任何人?

哦,是的,这是导致这种头痛的功能的代码。

void DialogToll::ReadAndCompare() 
{ 


QString Number = ui->Tolls->text(); 


QFile filetoCompare("C:/Tolls.txt"); 

if(filetoCompare.open(QIODevice::ReadOnly | QIODevice::Text)) 
{ 
     QTextStream stream(&filetoCompare); 
     QString line; 
     do 
     { 
      line = stream.readLine(); 
      if(line.at(0)== Number) 
      { 
       ui->label->setText("match Found!!!"); 
      } 
     }while(!line.isNull()); 
     ui->label->setText("No match Found!"); 

} 
} 

回答

1

您逐行读取文件中的行,但它看起来像一些线路的长度为零,让您的line.at(0)失败。我想提高通过以下方式代码:

[..] 
QTextStream stream(&filetoCompare); 
do 
{ 
    QString line = stream.readLine(); 
    if (line.size() > 0 && line.at(0) == Number) 
    { 
     ui->label->setText("match Found!!!"); 
    } 
} while (!line.isNull()); 
ui->label->setText("No match Found!"); 
[..] 

注意,我比较它的第一个字符之前检查线路的长度。

+0

会出现正好是一个'line.isEmpty()'方法? – xtofl

+0

是的,'if(!line.isEmpty()&& line.at(0)== Number)'也可以。 – vahancho

+0

感谢vahancho,作品非常漂亮,但是(!line.isEmpty()&& line.at(0)== Number)的优点是什么?另外,感谢xtofl,感到很累,我没有意识到在循环结束后我覆盖了UI标签。 – Hank

0

就像@Vahancho说的:在访问它的元素之前,你并没有检查你的行。这将导致空行崩溃。

您是否意识到在循环 完成后覆盖UI标签?您可以防止通过返回早期:

接下来,您可能需要使用的QRegexp这个功率:

void checkMatch() { 
.... 
    QRegexp expr("^"+ui->Tolls.text()); 
    do { 
     auto line = stream.readLine(); 
     if (expr.exactMatch(line)) { 
     ui->label->setText("Match"); 
     return; // <<<< early return 
     } 
    } while(!stream.atEnd()); 
    ui->label->setText("no match"); 
} 
+0

我将不得不查看QRegexp。我对此不甚了解。谢谢您的帮助。 – Hank

+0

@Hank我们很多人都不太了解正则表达式。我们真的应该!它们是我们开发带的强大工具。 – xtofl

相关问题