2012-03-01 2 views
0

Я хочу получить некоторые строки из текстового файла. Я знаю, как получить все строки из текстового файла сКак получить строку из текстового файла с Qt-библиотеками

QTextStream Stream (GEO); 
QString text;  
do  
{  
text = Stream.readLine(); 

} 
while(!text.isNull()); 

Это прекрасно работает, чтобы получить весь текст под текстом QString, но мне просто нужны некоторые конкретные строки из текста, схематически как:

if the text "start" appears in the Qstring text (or the QTextStream Stream) 

save the following text under QString First 

until the text "end" appears 

Может кто-нибудь сказать мне, как это сделать или, может быть, даже дать мне небольшой пример?

ответ

1

Одна вещь, которую вы можете использовать, чтобы получить индексы «Пуск» и «конец» с IndexOf() и просто использовать:

QString x = "start some text here end"; 
QString s = "start"; 
QString e = "end" 
int start = x.indexOf(s, 0, Qt::CaseInsensitive); // returns the first encounter of the string 
int end = x.indexOf(e, Qt::CaseInsensitive); // returns 21 

if(start != -1) // we found it 
    QString y = x.mid(start + s.length(), end); 

или midRef, если вы не хотите, чтобы создать новый список , Возможно, вам придется обрабатывать «конец», иначе вы можете перейти от 0 до -1, что ничего не вернет. Возможно (end> start? End: start)

Редактировать: Nevermind. Если end == -1, это означает, что он вернет все до конца (по умолчанию второй параметр равен -1). Если вы этого не хотите, вы можете пойти с моим примером и использовать какой-то if-statement при выборе «end»

Редактировать: Заметил, что я пропустил прочтение документа, и это будет определено. work:

Это производит следующие изменения. Последние два числа означают, что «начало» заканчивается и начинается «конец».

х = "начать некоторый текст здесь конец" => "текст здесь" 5 16

х = "некоторый текст здесь конец" => нет outprint

х = «старт старт тестирования некоторый текст здесь конец»=>„начать текст здесь“13 22

х =„тестирование начать начать некоторый текст здесь“=>„начать текст здесь“13 -14

Или вы можете сделать это используя regEx. Написал очень простой фрагмент кода здесь для вас:

#include <QDebug> 
#include <QRegExp> 

int main(int argc, char *argv[]) { 
    QRegExp rxlen("(start)(.*(?=$|end))"); 
    rxlen.setMinimal(true); // it's lazy which means that if it finds "end" it stops and not trying to find "$" which is the end of the string 
    int pos = rxlen.indexIn("test start testing some text start here fdsfdsfdsend test "); 

    if (pos > -1) { // if the string matched, which means that "start" will be in it, followed by a string 
     qDebug() << rxlen.cap(2); // " testing some text start here fdsfdsfds" 
    } 
} 

Это работает, даже если вы сделали есть «конец» в конце концов, то он просто разобрать до конца строки. Наслаждайтесь!

+0

THX для ответа. http://qt-project.org/doc/qt-4.8/qstring.html#mid У меня просто проблема с «концом», потому что в документальном фильме написано, что второй аргумент (n -> в вашем примере «end») - количество возвращаемых символов, начинающихся с первого аргумента «start + s.length()». Поэтому, если ваш первый аргумент - это начальная позиция/индекс, который является ок, второй будет числом символов строки, равной индексу/позиции «end». Не могли бы вы рассказать мне, как исправить проблему с концом? В противном случае действительно прекрасная идея с приветствием «s.length()» – Streight

+0

Хорошо, если я прав для второго аргумента, «end - (start + s.length)» должен работать. я проверю это, когда у меня будет время в следующие дни, и после этого примите ваш ответ, если он будет работать. – Streight

+0

Привет, извините за это. прочитайте мою измененную версию. Также протестировали его и предоставили вам выход – chikuba

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

  • Нет связанных вопросов^_^