2012-06-11 53 views
1

我正在開發一個使用Qt/KDE的應用程序。雖然這個編寫代碼,我需要讀取包含值一樣(分隔;)爲QString如何閱讀分號從QString中分離出某些值?

<http://example.com/example.ext.torrent>; rel=describedby; type="application/x-bittorrent"; name="differentname.ext" 

我需要像相對,類型和名稱每個屬性讀入不同的QString。到目前爲止,我所採取的apporach是這樣

if (line.contains("describedby")) { 
     m_reltype = "describedby" ; 
    } 
    if (line.contains("duplicate")) { 
     m_reltype = "duplicate"; 
    } 

也就是說,如果我需要通過一個屬性的存在唯一困擾(而不是其價值),我手動尋找的文本,如果設置屬性存在。然而,這種方法對於「類型」和名稱等實際值需要存儲在QString中的屬性而言失敗。雖然我知道這可以通過在分隔符;處分割整個字符串,然後搜索屬性或其值來完成,但我想知道是否有更乾淨和更高效的方法。

+1

的QString 。分裂? QRegExp? – kol

回答

2

據我所知,數據並不總是一個URL。 所以,

1:分割字符串

2:對於每個字串,標識符從值分開:

id = str.mid(0,str.indexOf("=")); 
value = str.mid(str.indexOf("=")+1); 

也可以使用一個正則表達式:

regexp = "^([a-z]+)\s*=\s*(.*)$"; 
id = \1 of the regexp; 
value = \2 of the regexp; 
2

我需要讀取像rel,type和name到不同的QString的每個屬性。

有沒有保證這個字符串永遠是一個URL?

我想知道是否有更清潔和更有效的方法。

不要重新發明輪子!您可以使用QURL::queryItems來解析這些查詢變量並返回名稱 - 值對映射。

但是,請確保您的字符串是一個格式正確的URL(以便QURL不會拒絕它)。