2016-06-09 64 views
-2

我有一個包含一個文本文件,這些行:如何使用QRegExp過濾文本文件內容?

a1  b00  2222 
a1  b01  233 
a1  b92  34444 
a2  b00  2222 
a2  b00  3333 
a2  b01  3333 

我想讀這個文件,並使用QRegExp

過濾文字和填寫比賽成績分爲三個QComboBox combo1,第一個匹配的情況下,combo2到第二個匹配的情況,並且combo3到第三個匹配的情況。 結果是這樣的:

combo1 
a1 
a2 

combo1選擇A2時,那麼combo2

combo2 
    b00 
    b01 

,並從combo2選擇B00時,combo3

combo3 
2222 
3333 

我的天堂」 t與QRegExp一起工作,有人可以告訴我如何做到這一點?

回答

2

我建議你不要使用QRegExp來過濾這個。由於您正在使用空格分隔的文件,因此很簡單,只需將其讀入vector並使用它填充QComboBox即可。例如:你也可以使用一個QTextStream和閱讀這些直接進入QString甚至QStringList

ifstream foo("foo.txt"); 
vector<string> combos{istream_iterator<string>(foo), istream_iterator<string>()}; 

for(auto i = 0; i < size(combos); ++i) { 
    switch(i % 3) { 
    case 0: 
     combo1.addItem(combos[i]); 
     break; 
    case 1: 
     combo2.addItem(combos[i]); 
     break; 
    case 2: 
     combo3.addItem(stoi(combos[i])); 
    } 
} 

Live Example

注意。我選擇不爲了讓您的業務邏輯與GUI邏輯分開。

+1

這是什麼尺寸? (編輯)我認爲並不是所有的編譯器都支持'std :: size'。 – Ajay

+0

@Jonathan Mee我可以讀取文本文件並填充字符串的向量,但是我想測試QRegExp在這個例子中的工作方式,我想在這種情況下使用match和cap。 –

+0

@Ajay你是對的['size'](http://en.cppreference.com/w/cpp/iterator/size)是C++ 17。如果你沒有C++ 17,你需要使用'combos.size()'。但是如果你有* C++ 17,那麼我現在就'combos.size()'現在比'size(combos)''更喜歡'這個問題給出了一個很好的論點:http://stackoverflow.com/questions/33442629/沒有c-have-a-free-function-sizeobject/33442842#33442842 –

-1

的QregExp,我需要過濾(匹配),每一行是這

QRegExp rx("\\s*(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s*"); 
    if (rx.exactMatch(line) //to cehck if rx matches the line from the text file 
     { 
      QString col1 = rx.cap(1);//the first column that goes to combo1 
      QString col2 = rxHeader.cap(2);//the second column that goes to combo2 
      QString col2 = rxHeader.cap(3);//the third column that goes to combo3 
     } 

現在,它的工作原理和我在一起。

+0

如果你添加了實際處理文件的代碼,這將工作。但至少對於提供的示例,可能對於任何空格分隔的文件來說,這是一個劣質解決方案。我鼓勵你考慮[我的解決方案](http:// stackoverflow。com/a/37724418/2642059)作爲優選的替代方案。 –

+0

正如我所說的,它只是測試qt中的正則表達式的工作方式。 –

+0

在Qt5中,你會想要使用[QRegularExpression](http://doc.qt.io/qt-5/qregularexpression.html),它有很好的用法:http://doc.qt。 io/qt-5/qregularexpression.html#details你可以在http://www.stackoverflow.com上找到有關如何完成任務的問題,使用正確的工具來解決問題,但是如果你要通讀Qt寫了一些關於某個特定問題的問題,並且發佈這些問題,我相信你會得到非常好的答案。如果您發現自己處於這種情況,請隨時鏈接新的問題,我也會盡力回答。 –