Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
добрый вечер, коллеги стоит задача распарсить большой файл (размер ок 100 МБ). экспериментирую с С++ сейчас такая задача (просто посимвольное чтение, БЕЗ парсинга) занимает ок 80 сек. вот код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. для сравнения в коммерческой софтине чтение файла ВМЕСТЕ с парсингом занимает ок 5-7 сек как добиться результата, приближенного к этому? был вариант использовать загрузку файла в озу, но думаю в скорости прироста не будет потому что на компе ssd-диск. (по крайней мере реализация этими двумя способами: через озу и без - на питоне эффекта не дало) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 19:49 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькинкак добиться результата, приближенного к этому? Читать большими буферами. 32к или больше. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 20:04 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькиндля сравнения в коммерческой софтине чтение файла ВМЕСТЕ с парсингом занимает ок 5-7 сек как добиться результата, приближенного к этому? смаппировать файл на память и распарсить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 20:10 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, а можно поподробнее? прошу понять - я новичок в с++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 20:51 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
Mapped File, имеете ввиду через mmap ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 20:51 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькин, Я тебе скажу по секрету, что чтение файла и парсинг и просто чтение файла занимают почти одно и то же время. Потому как чтение -- это милисекунды, а парсинг -- наносекунды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 20:58 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькиня новичок в с++ Ну так программируй по-старинке, как в С: fopen, fread, fclose. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 20:58 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovволодька трынькинкак добиться результата, приближенного к этому? Читать большими буферами. 32к или больше. Да ерунда, я писал парсинг подобных же файлов таких размеров, на том же ifstream. Не нужно никаких больших буферов. Они и так есть. Может не большие, но достаточные вполне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 20:59 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovволодька трынькиня новичок в с++ Ну так программируй по-старинке, как в С: fopen, fread, fclose. А смысл ? Думаешь, оно из файла будет быстрее таким образом читать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 21:00 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
Ну, от getline по любому надо избавиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 21:04 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
пока никто ничего дельного не посоветовал. может быть стоит читать файл кусками например строк по 1000. и каждую в отдельном потоке обрабатывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 23:38 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
MasterZivволодька трынькин, Я тебе скажу по секрету, что чтение файла и парсинг и просто чтение файла занимают почти одно и то же время. Потому как чтение -- это милисекунды, а парсинг -- наносекунды. почему в итоге время такое большое получается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 23:39 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькинпока никто ничего дельного не посоветовал. может быть стоит читать файл кусками например строк по 1000. неправда - тебе посоветовали не читать строками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 00:10 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькин, А вы случайно не в Дебаг режиме собираете программу? Если да - переключите в Релиз. Как - не знаю, т.к. вы не указали какой компилятор и среду разработки используете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 00:47 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
Я кстати только что взял ваш код (один в один) и с помощью него прочел 120 МБ видео файл. Замерял на глаз - 1 сек при первом (некешированном) чтении с диска и мгновенно при последующих (кешированных) чтениях. В дебаг сборке тоже меньше секунды занимает чтение. Так что откуда ваши 80 секунд взялись - не понятно. Давайте нам сюда детали - что за оборудование, ОС, компилятор, опции сборки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 00:59 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
У меня возникло предположение что в вашем файле нет или очень мало концов строк, что означает что внутри getline очень большой объем данных постепенно записывается в строковую переменную, и происходят постоянные переаллокации памяти в этой переменной, что дает экспоненциальный рост времени выполнения от размера файла. Какие у вас j и m в конце работы программы? Если ваш файл не текстовый, а бинарный, то построчно его парсить нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 01:13 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyНу, от getline по любому надо избавиться. Почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 01:20 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
MasterZivAnatoly MoskovskyНу, от getline по любому надо избавиться. Почему? См. мое предыдущее сообщение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 01:32 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, вроде со строками нормально все. получились m = 104 145 658, j = 5 296 259 - те же самые числа, что показывает текстовый редактор. за исключением, что в редакторе число символов почти на 10 млн больше - видимо, потому что он считает служебные символы (переход на новую строку и тд) файл именно текстовый, не бинарный! хар-ки машины: i3 2.2, 4GB, SSD 250 GB. VS2010 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 11:01 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькиндобрый вечер, коллеги стоит задача распарсить большой файл (размер ок 100 МБ). экспериментирую с С++ сейчас такая задача (просто посимвольное чтение, БЕЗ парсинга) занимает ок 80 сек. вот код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. для сравнения в коммерческой софтине чтение файла ВМЕСТЕ с парсингом занимает ок 5-7 сек как добиться результата, приближенного к этому? был вариант использовать загрузку файла в озу, но думаю в скорости прироста не будет потому что на компе ssd-диск. (по крайней мере реализация этими двумя способами: через озу и без - на питоне эффекта не дало) а в чем проблема-то? 80 секунд разве не ерунда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 11:21 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
novexelf, к сожалению, это очень много, потому что во-первых, этот код даже БЕЗ парсинга строки, во-вторых, реально будет работать на машине намного слабее моей -(1.2 GHz atom, 1GB ram) и время возрастет в разы сразу! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 11:27 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
в общем переписал код. теперь весь файл грузится в память Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. может это будет работать быстрее. но у меня вопрос: как из буфера типа char* читать посимвольно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 11:32 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькин, Ты сначала парсинг напиши, а потом уже будешь его оптимизировать. Ещё раз, если не напороть, то скорость парсинга будет просто скоростью чтения. Поэтому если тебе не нужно в процессе обработки прыгать в начало и конец файла попеременно, то читать файл в память нет смысла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 11:49 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
выводим первые 100 символов на экран Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 11:52 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькинnovexelf, к сожалению, это очень много, потому что во-первых, этот код даже БЕЗ парсинга строки, во-вторых, реально будет работать на машине намного слабее моей -(1.2 GHz atom, 1GB ram) и время возрастет в разы сразу! говорить о том много это или нет, можно только если ввести вторую величину, с которой сравнивать. почему 80 секунд это много? я так понимаю, что весь вопрос в том, что другое приложение делает это быстрее. т.е. вы сами себе поставили ограничение - реализовать со скоростью, сопоставимой с ... даже если парсинг увеличит время обработки до 3-5 минут, в чем тут проблема? вы же не раскрываете тайный смыл, например, если нужно будет один раз в день обрабатывать файл вашим приложением, то особой проблемы в том будет ли это выполнятся 5-7 секунд или 5-7 минут нет, просто сотрудник нальет себе чашку бодрящего ... другое дело, если технологический процесс выдает файлы 1 раз в минуту и их нужно успевать обрабатывать, явно будет очередь, которая будет постоянно расти. как уже сказали - реализуйте для начала парсинг, а уж потом оптимизируйте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 12:05 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38422627&tid=2019923]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
147ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 255ms |

| 0 / 0 |
