Russian Qt Forum
Ноябрь 24, 2024, 16:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: чтение из файла  (Прочитано 6015 раз)
Ursa
Гость
« : Июль 03, 2007, 16:41 »

Нужно прочитать данные из текстового файла построчно, при этом за разделитель строк принимается нестандартный символ. Единственный вариант, который приходит мне в голову -  использовать QTextStream и getChar'ом последовательно перебирать все символы.
Мож, у кого получше идея найдется?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Июль 03, 2007, 16:59 »

Можно считать все при помощи QTextStream::readAll(). Потом заюзать QString::split(). Ты получишь QStringList, каждый элемент которого твоя строка
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Zmey
Гость
« Ответ #2 : Июль 05, 2007, 16:24 »

Оба метода подходят, вопрос только в размере файла.
Записан
SABROG
Гость
« Ответ #3 : Июль 05, 2007, 17:06 »

Код:

QString line;
     QFile file(QLatin1String("file.txt"));
     if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
     {
        qDebug("Can't open file");
        return;
     }
     while (!file.atEnd()) {
         line.append(file.readLine());
     }
    QStringList qList = line.split(QLatin1String("МОЙ_НЕСТАНДАРТНЫЙ_СИМВОЛ_ИЛИ_РЯД_СИМВОЛОВ"));
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #4 : Июль 05, 2007, 17:10 »

Код:
while (!file.atEnd()) { 
    line.append(file.readLine());
}


Лучше тогда так:
Код:

line = file.readAll();


И как правильно заметил Zmey, данный метод не подходит для больших файлов.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #5 : Июль 05, 2007, 22:19 »

Ну, вариант с realLine() больше подойдет для больших файлов.
Вопрос только - насколько большие, и что надо дальше делать с инфой?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #6 : Июль 05, 2007, 23:02 »

Цитата: "Racheengel"
Ну, вариант с realLine() больше подойдет для больших файлов.


Если ты имеешь ввиду вариант решения предложенный SABROG, то, имхо, разницы нету, между этим и моим вариантом. Памяти займёт поидее оба варианта одинаково. Построчный вариант развешо может быть медленее. Что первый что второй вариант неприминим к большим файлам из-за накладных расходов по памяти.

Если ты имел ввиду читать построчно, аналирировать строку и сохранять результат (т.е не держать весь файл в памяти), то тогда я полностью согласен с тобой
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #7 : Июль 06, 2007, 00:04 »

да, именно последнее я и имел виду...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.052 секунд. Запросов: 22.