Этот баннер — требование Роскомнадзора для исполнения 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 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
всем спасибо за помощь! сейчас мой последний вариант работает менее 1 сек. по крайней мере посимвольное чтение Код: plaintext 1. 2. 3. 4. 5. 6. вообще моментально происходит. еще задам пару глупых вопросов: 1) почему переменная типа char* автоматически считается массивом (т.е. обращаться можно поэлементно []) ? 2) почему сразу после объявления char ch она инициализируется символом M. вернее она не инициализирована, однако Watch показыает 'M' по п.1 ткните где почитать доступно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 12:25 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
novexelfволодька трынькинnovexelf, к сожалению, это очень много, потому что во-первых, этот код даже БЕЗ парсинга строки, во-вторых, реально будет работать на машине намного слабее моей -(1.2 GHz atom, 1GB ram) и время возрастет в разы сразу! говорить о том много это или нет, можно только если ввести вторую величину, с которой сравнивать. почему 80 секунд это много? я так понимаю, что весь вопрос в том, что другое приложение делает это быстрее. т.е. вы сами себе поставили ограничение - реализовать со скоростью, сопоставимой с ... даже если парсинг увеличит время обработки до 3-5 минут, в чем тут проблема? вы же не раскрываете тайный смыл, например, если нужно будет один раз в день обрабатывать файл вашим приложением, то особой проблемы в том будет ли это выполнятся 5-7 секунд или 5-7 минут нет, просто сотрудник нальет себе чашку бодрящего ... другое дело, если технологический процесс выдает файлы 1 раз в минуту и их нужно успевать обрабатывать, явно будет очередь, которая будет постоянно расти. как уже сказали - реализуйте для начала парсинг, а уж потом оптимизируйте. по крайней мере теперь я буду реализовывать парсинг и уже именно его оптимизировать, добиваясь 7 секунд)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 12:27 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькинnovexelf, к сожалению, это очень много, потому что во-первых, этот код даже БЕЗ парсинга строки, во-вторых, реально будет работать на машине намного слабее моей -(1.2 GHz atom, 1GB ram) и время возрастет в разы сразу! чего ты вообще сунулся на эту задачу? Не понимаешь же ничерта... Не знаешь ничего... Сначала учиться надо, потом работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 12:50 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
MasterZivСначала учиться надо, потом работать. Ну дык топикстартер и учится на реальной задаче ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 12:57 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькинвсем спасибо за помощь! сейчас мой последний вариант работает менее 1 сек. по крайней мере посимвольное чтение Код: plaintext 1. 2. 3. 4. 5. 6. вообще моментально происходит. еще задам пару глупых вопросов: 1) почему переменная типа char* автоматически считается массивом (т.е. обращаться можно поэлементно []) ? 2) почему сразу после объявления char ch она инициализируется символом M. вернее она не инициализирована, однако Watch показыает 'M' по п.1 ткните где почитать доступно с такими знаниями С/С++ с парсингом наверное будет тяжко ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 12:58 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
ИзопропилMasterZivСначала учиться надо, потом работать. Ну дык топикстартер и учится на реальной задаче ну да форум вот читает :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 13:01 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
MasterZivволодька трынькинnovexelf, к сожалению, это очень много, потому что во-первых, этот код даже БЕЗ парсинга строки, во-вторых, реально будет работать на машине намного слабее моей -(1.2 GHz atom, 1GB ram) и время возрастет в разы сразу! чего ты вообще сунулся на эту задачу? Не понимаешь же ничерта... Не знаешь ничего... Сначала учиться надо, потом работать. мне кажется именно так и происходит процесс обучения, не? вы учились исключительно читая книжки??? ок, ребят. предыстория такова проект пишется на питоне. и на данный момент чтение как и парсинг файла я реализовал именно на нем (время обработки файла 100 МБ около 3 мин). потом посмотрев, что есть сторонний софт, который аналогичные действия выполняет за считанные секунды, решил приблизиться к этому времени. теперь процедуру парсинга напишу на с++, засуну в DLL и подключу к питон-приложению (через ctypes) как-то так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 13:07 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькинMasterZivпропущено... чего ты вообще сунулся на эту задачу? Не понимаешь же ничерта... Не знаешь ничего... Сначала учиться надо, потом работать. мне кажется именно так и происходит процесс обучения, не? вы учились исключительно читая книжки??? ок, ребят. предыстория такова проект пишется на питоне. и на данный момент чтение как и парсинг файла я реализовал именно на нем (время обработки файла 100 МБ около 3 мин). потом посмотрев, что есть сторонний софт, который аналогичные действия выполняет за считанные секунды, решил приблизиться к этому времени. теперь процедуру парсинга напишу на с++, засуну в DLL и подключу к питон-приложению (через ctypes) как-то так ну если не знаешь азов языка, то обычно их учат, а после практикуются в их применении ... обычно вся мощь языка заключена в его хорошем знании, которого в данном случае у вас нет, а поэтому может случится так, что исполнение на С/С++ будет еще медленнее, чем все остальные. все запутанней и запутанней, если есть сторонний софт, то зачем создавать новый? если уже есть своя разработка, пусть и уступающая в скорости, то зачем ее переписывать? скорость решающий фактор? зачем вообще тратить время ... пока что вы пишите на Сях :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 13:23 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькинMasterZivпропущено... чего ты вообще сунулся на эту задачу? Не понимаешь же ничерта... Не знаешь ничего... Сначала учиться надо, потом работать. мне кажется именно так и происходит процесс обучения, не? вы учились исключительно читая книжки??? ок, ребят. предыстория такова проект пишется на питоне. и на данный момент чтение как и парсинг файла я реализовал именно на нем (время обработки файла 100 МБ около 3 мин). потом посмотрев, что есть сторонний софт, который аналогичные действия выполняет за считанные секунды, решил приблизиться к этому времени. теперь процедуру парсинга напишу на с++, засуну в DLL и подключу к питон-приложению (через ctypes) как-то так А почему ты не пошёл в форум по Питону и не попробовал соптимизировать то что было написано? Почему ринулся сразу кодить на 2-х технологиях (учитывая риски того что ты еще и плохо знаешь С++ и не учёл накладные расходы на переходник между двумя технологиями) а просто не проанализировал где у тебя боттлнек? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 13:36 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
ну если не знаешь азов языка, то обычно их учат, а после практикуются в их применении ... у меня все параллельно идет и теория и практика)) ничего запутанного, есть сторонний софт который делает много чего полезного, работает только под виндой, и проект закрытый. а нам нужно лишь пара функции из того что делает софтина (причем не совсем таких же, а очень похожих), причем работать должно как под виндой, так и под линуксом. ну все равно что мс офис и блокнот (либо gedit) в общем, поверьте мне, смысл в этом есть и время тратить стоит :) ЗЫ чувствую после слов о кроссплатформенности опять полетят "да куда он лезет!", "он же ничерта не знает!", а MasterZiv ?)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 13:36 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
mayton, я не ринулся сразу на 2 технологии. я к этому постепенно пришел. сначала на питоне реализовал это 4-мя различными способами. и подумал, что быстрее уже на нем невозможно. все-таки интерпретатор... шерстил в основном аглицкие форумы а вот насчет передачи данных в питон - вы правы, скорее всего это и будет ботлнеком. посмотрим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 13:44 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькинmayton, я не ринулся сразу на 2 технологии. я к этому постепенно пришел. сначала на питоне реализовал это 4-мя различными способами. и подумал, что быстрее уже на нем невозможно. все-таки интерпретатор... шерстил в основном аглицкие форумы а вот насчет передачи данных в питон - вы правы, скорее всего это и будет ботлнеком. посмотрим Можешь приаттачить в форум эти версии исходников? (Я думаю коллеги модераторы будут не против если это будет сравнение С++ и Pytnon). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 13:50 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
Я не разбираюсь в Питоне но вот нашёл ссылку в которой приводят советы по Performance: https://wiki.python.org/moin/PythonSpeed/PerformanceTips Вы пробовали имплеменить эти советы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 13:58 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
mayton, да конечно Код: python 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. может кому полезно будет да, спасибо, этот документ читал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 14:19 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
а так же сейчас реализовал чисто через вызовы Си ф-ий Код: python 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 14:22 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькинмне кажется именно так и происходит процесс обучения, не? Неа. володька трынькинвы учились исключительно читая книжки??? Да. Извини, но с такими вопросами типа "как из буфера типа char* читать посимвольно? " ты далеко не напарсишь. володька трынькинпроект пишется на питоне. и на данный момент чтение как и парсинг файла я реализовал именно на нем (время обработки файла 100 МБ около 3 мин). потом посмотрев, что есть сторонний софт, который аналогичные действия выполняет за считанные секунды, решил приблизиться к этому времени. теперь процедуру парсинга напишу на с++, засуну в DLL и подключу к питон-приложению (через ctypes) У тебя как у многих дурацкое заблуждение, что на С/С++ программы автоматом будут работать быстрее. Это не так. В частности, чтение файла в буфер на питоне не только такое же по скорости, но и ровно то же самое по реализации -- используется та же библиотека CRT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 15:21 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
MasterZiv, да, у меня получилось чтение в буфер такое же, а вот итеративные операции по строкам и по символам намного медленнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 15:53 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькин, а почему ты не попробовал как пишут здесь http://docs.python.org/2/tutorial/inputoutput.html Код: python 1. 2. 3. 4. 5. или как здесь? http://effbot.org/zone/readline-performance.htm Код: python 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Пока не рассказывай про посимвольное чтение. Ведь ты символы в приведённых фрагментах кода никак не использовал кроме как тупо вёл учёт количества букв. А это можно сделать и через контейнер строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 16:29 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькинMasterZiv, да, у меня получилось чтение в буфер такое же, а вот итеративные операции по строкам и по символам намного медленнее Я уверен, что можно было бы найти решение и на питоне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 16:46 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькинMasterZiv, да, у меня получилось чтение в буфер такое же, а вот итеративные операции по строкам и по символам намного медленнее в сях все на указателях и функциях завязано. скорость как раз достигается за счет умелого использования указателей. ну а по скольку операторов очень ограниченное число, то нет ни строк ни операторов для работы со строками, и соответственно нужно знать еще кучу функции для работы, например, со строками, либо сторонних библиотек. в результате получается, что для успеха нужен большой багаж знаний и если его нет парсинг может превратится в ужас. ЗюЫю в универе делали учебный компилятор, простой при простой, вот те кто делал на паскале имели меньше проблем, чем те которые делали на сях, за счет наличия строк, операторов конкатенации и прочих плюшек паскаля, у меня тогда знания были в зачатке и практики мало, поэтому я намучался, но это была учебная задача, там как раз и нужно было намучаться :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 16:56 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
О каком парсинге тут идёт речь - еще не ясно? Может автору просто надо СSV-файл побить на строки и поля в загрузить в БД. Здесь достаточно тривиально. Если грамматика чуть сложнее то нужно вводить некий "автомат" который имеет в процессе парсинга своё "состояние" и в зависимости от текущего символа принимает разные решения. Это тяжёлая артиллерия, и здесь на голых сях и на питонах обычно не пишут а используют различные генераторы парсеров которых щас много и с либеральными лицезиями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 17:39 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
mayton, эти два варианта есть в моих примерах! символы я буду использовать уже в парсинге ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 17:42 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькинсимволы я буду использовать уже в парсинге Гораздо проще там использовать регэкспы. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 17:45 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
novexelf, делаю нечто похожее, только не компилятор, а интерпретатор. на первоначальном этапе нужно разбить файл на лексемы. для этого и читаю посимвольно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 17:51 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovволодька трынькинсимволы я буду использовать уже в парсинге Гораздо проще там использовать регэкспы. да, возможно стоит попробовать на регулярках. здесть уже не надо будет читать посимвольно. но дело в том что сам алгоритм разбора строки уже реализован на питоне. его нужно только перенести на си. проблем вроде быть не должно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 17:53 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькин, тут непонятно с чем мы воюем. Я конечно не спец в этих ваших питонах но возможно там есть некий ключик который влияет на режим компилляции рантайма. И кстати. Ты мог-бы нарисовать и заполнить табличку? нечто вроде Python sourceElapsed time(sec)1)2)3)4)5)copy file to NULL В последнем варианте ты просто копируешь файл в устройство NUL или /dev/null. copy file.txt NUL или $ cp file.txt /dev/null ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 17:53 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькинделаю нечто похожее, только не компилятор, а интерпретатор. на первоначальном этапе нужно разбить файл на лексемы. для этого и читаю посимвольно А что за программы такие по 100 МБ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 17:54 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyволодька трынькинделаю нечто похожее, только не компилятор, а интерпретатор. на первоначальном этапе нужно разбить файл на лексемы. для этого и читаю посимвольно А что за программы такие по 100 МБ? да-да, мне тоже интересно, что вы там интерпритируете, ядро линуха? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 17:57 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
Тут такие expectations... Если время копирования файла не отличается от времени парсинга (несколько процентов разницы) то мы сделали что смогли и к питону нет претензий. У тебя просто слабая дисковая подсистема или работает параллельно явление или процесс который грузит систему другой нагрузкой. Это конечно смешно но в форуме были любители погонять бенчмарки которые параллельно смотрели кино в HD качестве или сканировали антивирусом активный диск. Если время сильно отличается то надо думать дальше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 17:58 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькинна первоначальном этапе нужно разбить файл на лексемы а дальше куда помещается результат работы лексического анализатора? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 22:54 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
Коллеги, думаю можно наспамить ссылок про азы оптимизации, типо передавать всё по ссылкам и т.п. Главное парсер 100% что за алгоритм там, обратите внимание на Спирит Буста, особенно если С++ Вам интересен в долгосрочной перспективе, т.к. ради одной такой задачи учить язык контрпродуктивно. Если ошибки компиляции на несколько экранов Вас не пугают, пробуйте Спирит, документация норм, примеры, из минусов наверно долгая сборка, но смотря какие словари, не большие не долго собираются ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 18:52 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
Мультритрединг мать его так. И zero-copy. Форсируем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 18:59 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
maytonМультритрединг мать его так. И zero-copy. Форсируем. +Inline functions ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 19:11 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
Ну эт само собой. Не знаю как этом Удаве Питоне с инлайнингом. Думаю что просаживает он перформанс на работе со строками (декодирование кодовой страницы) и с уборкой мусора. Да и вообще неизвестно как там строки реализованы. Мутабельны или нет. Unicode или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 19:18 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
Парсинг для строки. Думаю не составит труда считать файл в буфер и парсить его: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2013, 14:39 |
|
||
|
парсинг текстового файла
|
|||
|---|---|---|---|
|
#18+
володька трынькин, вот кусок куда для работы с буфером. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2013, 14:40 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2019923]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
80ms |
get tp. blocked users: |
1ms |
| others: | 10ms |
| total: | 185ms |

| 0 / 0 |
