2016-03-04 26 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

相關問題