20 / 20 / 2
Регистрация: 28.11.2012
Сообщений: 366
|
||||||
1 | ||||||
QProgressBar считывания большого файла12.01.2015, 22:35. Показов 5887. Ответов 47
Метки нет (Все метки)
Есть большой текстовый файл (.txt). Строки там представляют собой числа разделенные запятой: 1,1112,68... строки разной длинны.
Перед тем как передать данные в модель считываю их в QList<QStringList>.
Хотелось бы сделать QProgressBar, что бы было видно, считывает файл программа или зависла. Вопрос, что считать максимальным числом? 1) сначала пройтись по всему файлу и считать в переменную количество строк(узнать их максимальное количество в файле), а уж потом зная их количество, считывать данные (снова проходиться по файлу). 2) в свойствах файла изначально узнать его объем в мегабайтах (это и будет максимальное значение), а потом считывая строку - узнавать ее (объем, делить на объем файла) *100? Или как-то проще можно сделать?
0
|
12.01.2015, 22:35 | |
Ответы с готовыми решениями:
47
Создать программу считывания произвольного файла и создание нового нетипизированного файла, копируя блоками Считывания из файла Считывания с файла Считывания из файла в структуру |
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
|
|
05.10.2016, 08:39 | 41 |
Xantrax,
Ну если ты перед этим еще и выбор делаешь, тогда тут только два раза читать. для поиска первой запятой никакой split тебе не нужен. Обращаешься напрямую к данным через data() и потом например через memcpy копируешь кусок памяти в int Добавлено через 1 минуту Я не предлагал в int конвертировать, можно в строку сложить, все от максимального количества байт зависит. Вообщем куда то скопировать, а потом сравнивать.
0
|
661 / 662 / 106
Регистрация: 29.05.2015
Сообщений: 3,967
|
|
05.10.2016, 08:51 | 42 |
1. Если читаешь файл по байтам, делишь длину файла на сто (нужно заранее знать длинну файла), сравниваешь полученное число с количеством прочитанных байт - получаешь индикатор в процентах. Если за время чтения/записи длинного файла 100 раз вызовешь
QApplication::processEvents(); - катастрофы не случится, программа сильно не замедлится.2. В вашем случае - как уже было сказано ранее, через каждые 100 или 500 или 1000 прочитанных строк выводить на экран счётчик. Число подобрать методом тыка, что-бы циферки на экране "красиво менялись". Например приблизительно раз в полсекунды - секунду. Если слишком быстро будут мелькать - замедлится процесс чтения, если медленно - будет неинформативно. 3. Через каждые 100 или 500 или 1000 прочитанных строк выводить на экран выводить на экран системное время - будут часики тикать. Или, если вычесть время старта - будет тикать уже время чтения файла. КСТАТИ: при чтении старыми методами (fread, fwrite) можно получить длину файла не читая его - ставишь указатель на конец файла, и в указателе будет длина в байтах. Как сделать это современными способами, с помощью QFile?
0
|
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,671
|
|
05.10.2016, 09:23 | 43 |
0
|
661 / 662 / 106
Регистрация: 29.05.2015
Сообщений: 3,967
|
|
05.10.2016, 11:42 | 44 |
Несколько гб, тем более десятков гб тупо в память к тебе не влезут. Ты уж начинай с чего-нить реального, а не с фантастики. Научись сперва с средненькими файлами работать.
Разделитель между строками какой? Возврат каретки + перевод строки? Если файл стандартный текстовый, то его наверное можно прочитать стандартными средствами работы с текстом - открыть как текстовый, прочитать по строкам. Если нестандартный, то читаешь по байтам до признака конца строки. Либо читаешь блоками по 1024 байта (например) и распарсиваешь прочитанное - так наверное быстрее будет. Но сложнее. Если гигабайты цифр хранятся в текстовом формате, то это характеризует уровень мастерства программиста, писавшего такие программы. Что ты тут ускорять собираешься? Переформатируй файлы, чтобы числа хоть в int хранились, потом можно будет говорить о скорости чтения.
0
|
20 / 20 / 2
Регистрация: 28.11.2012
Сообщений: 366
|
|
06.10.2016, 09:16 [ТС] | 45 |
Если внимательно читать данную тему, то я об этом не один раз упоминал, что файл размером от 1 гигабайта пихать в оперативну
память не стоит. Да, возврат каретки и перевод строки. Чем отличается файл txt, где хранятся числа от файла txt в котором хранятся числа? Всегда думал, что существует два типа файлов, либо текстовый, либо двоичный...
0
|
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
|
|
06.10.2016, 10:19 | 46 |
Xantrax,
Для примера число 301989887 При записи его как число занимает 4 байта При записи его как текст занимает 9 байт Есть разница? Не говоря уже о длительности преобразований и сравнений текстовых чисел.
0
|
661 / 662 / 106
Регистрация: 29.05.2015
Сообщений: 3,967
|
|
06.10.2016, 10:53 | 47 |
Но ты же хочешь читать файлы в неск гб - куда?
Добавлено через 3 минуты Плюс запятая между числами тоже 1 байт занимает, совершенно бесполезно.
0
|
06.10.2016, 11:10 | 48 | |||||
0
|
06.10.2016, 11:10 | |
06.10.2016, 11:10 | |
Помогаю со студенческими работами здесь
48
Считывания файла пословно Оптимизация считывания файла Ошибка считывания с файла Ошибка считывания из файла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |