2012-06-11 2 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:

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 не отклоняет ее).

Смежные вопросы