Название: Построчное чтение из файла Отправлено: QPeter от Март 07, 2014, 22:23 Хочу чтоб каждую секунду из файла считывалась новая строка из файла и содержимое строки присваивалось переменной- которая является координатой на оси у. Но она почему то сохраняется в значении полученном при первой итерации. Что не так?(
Код: private: Код: ... Код: void Widget:: pointsmath(){ Результаты qDebug() Код: ... Вообще есть подозрение что не работает из за того что постоянно QTextStream stream(&mFile); объявляется при каждой итерации... Название: Re: Построчное чтение из файла Отправлено: kambala от Март 07, 2014, 22:39 каждый раз ты читаешь первую строку потому что при открытии файла указатель в файле стоит на начале.
считай весь файл в переменную, сделай эту переменную полем класса и из нее доставай строчки по очереди. Название: Re: Построчное чтение из файла Отправлено: QPeter от Март 07, 2014, 22:43 Так я же line_number задаю строку которая мне нужна, разве не так?
Название: Re: Построчное чтение из файла Отправлено: QPeter от Март 07, 2014, 22:46 По условию задания файл нельзя открыть и всё сразу прочесть, тк в файл постоянно будут добавляться новые значения.
Название: Re: Построчное чтение из файла Отправлено: Alex Custov от Март 07, 2014, 23:00 Так я же line_number задаю строку которая мне нужна, разве не так? ты документацию читал? Ответ - нет, не читал. readLine(N) читает из потока данные, но не более чем N символов. Это значит, что чтобы прочитать строку под номером 10 нужно сперва прочитать 9 предыдущих строк. Название: Re: Построчное чтение из файла Отправлено: QPeter от Март 07, 2014, 23:07 Читал, но этот момент не доглядел, ::)
Ну а как тогда реализовать такую штуку? Есть какой нибудь оператор который будет читать именно ту строку которая мне нужна? Название: Re: Построчное чтение из файла Отправлено: Alex Custov от Март 07, 2014, 23:17 Ну а как тогда реализовать такую штуку? Есть какой нибудь оператор который будет читать именно ту строку которая мне нужна? Такого оператора, а вернее метода, нет. Сперва нужно считывать все строки до нужной. Это свойство последовательного доступа к диску. Не знаю есть ли диски со случайным доступом, в любом случае в API Qt такой способ чтения файла не поддерживается. Название: Re: Построчное чтение из файла Отправлено: kambala от Март 07, 2014, 23:22 По условию задания файл нельзя открыть и всё сразу прочесть, тк в файл постоянно будут добавляться новые значения. значит каждый раз считаешь сколько строк прочитано, потом пропускаешь столько строк при чтении и сохраняешь только новыеНазвание: Re: Построчное чтение из файла Отправлено: QPeter от Март 07, 2014, 23:22 А можно считать файл, записать его в динамический массив например, а потом вытащить последнее значении массива и обнулить его перед проведением следующей итерации?
Название: Re: Построчное чтение из файла Отправлено: QPeter от Март 07, 2014, 23:36 Цитировать значит каждый раз считаешь сколько строк прочитано, потом пропускаешь столько строк при чтении и сохраняешь только новые Но этот способ мне нравится больше, спасибо) Название: Re: Построчное чтение из файла Отправлено: Johnik от Март 08, 2014, 02:35 Я думаю считать строки не придется. вот пример:
testfileread.h Код
testfileread.cpp Код но все ж есть некоторые маленькие проблемы в подобной реализации... оставляю для самостоятельного исправления Название: Re: Построчное чтение из файла Отправлено: Igors от Март 08, 2014, 14:07 значит каждый раз считаешь сколько строк прочитано, потом пропускаешь столько строк при чтении и сохраняешь только новые А не проще ли хранить размер прочитанного, а при след чтении делать seek?Код
Название: Re: Построчное чтение из файла Отправлено: kambala от Март 08, 2014, 16:31 значит каждый раз считаешь сколько строк прочитано, потом пропускаешь столько строк при чтении и сохраняешь только новые А не проще ли хранить размер прочитанного, а при след чтении делать seek?Название: Re: Построчное чтение из файла Отправлено: Johnik от Март 08, 2014, 19:30 А откуда уверенность что "полная" строка была добавлена? Это может быть напр всего лишь буква (в той же строке) ответ тут:но все ж есть некоторые маленькие проблемы в подобной реализации... оставляю для самостоятельного исправления Название: Re: Построчное чтение из файла Отправлено: Igors от Март 09, 2014, 09:45 но все ж есть некоторые маленькие проблемы в подобной реализации... Ну чего же "маленькие" если их решение заметно больше Вашего? :)оставляю для самостоятельного исправления А сам учитель может исправить или так, только задания дает? :)Название: Re: Построчное чтение из файла Отправлено: Johnik от Март 09, 2014, 12:17 А сам учитель может исправить или так, только задания дает? :) может, а на форуме принято выдавать полностью рабочий и отлаженный код спрашивающему, или давать направление для дальнейшего поиска?Вообще при данных условиях, я не стал бы использовать для чтения строк класс QTextStream, действительно сложно будет избежать возможных разбиений одной строки. При каждом изменении файла следует читать в какой-то буфер. А уже буфер проверять на предмет наличия символов завершения строки (или других необходимых), и при его наличии, осуществлять разбор буфера, получать координаты и испускать ("эмитить") сигнал с координатами. Название: Re: Построчное чтение из файла Отправлено: Igors от Март 10, 2014, 08:39 Вообще при данных условиях, я не стал бы использовать для чтения строк класс QTextStream, действительно сложно будет избежать возможных разбиений одной строки. Может так: запоминаем позицию файла (напр в члене класса). При каждом обновлении читаем файл в буфер "от позиции до конца" и обновляем позицию. Считываем из буфера "полные" строки и отдаем юзверю, затем очищаем буфер но сохраняем в нем последнюю (неполную) строку. При каждом изменении файла следует читать в какой-то буфер. А уже буфер проверять на предмет наличия символов завершения строки (или других необходимых), и при его наличии, осуществлять разбор буфера, получать координаты и испускать ("эмитить") сигнал с координатами. Все-таки здесь одна пакость: последняя строка может и не заканчиваться EOL Название: Re: Построчное чтение из файла Отправлено: Johnik от Март 10, 2014, 08:43 Позицию запоминать не надо, этим занимается QFile, проверено, в остальном: да
Название: Re: Построчное чтение из файла Отправлено: Igors от Март 10, 2014, 08:56 Позицию запоминать не надо, этим занимается QFile, проверено, Это если хотим держать его открытым Название: Re: Построчное чтение из файла Отправлено: Johnik от Март 10, 2014, 09:07 А зачем каждый раз открывать, закрывать? один раз открыть для чтения, тем более писать в него можно будет в этот момент без проблем.
|