powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / парсинг текстового файла
25 сообщений из 61, страница 2 из 3
парсинг текстового файла
    #38422741
всем спасибо за помощь!
сейчас мой последний вариант работает менее 1 сек.
по крайней мере посимвольное чтение
Код: plaintext
1.
2.
3.
4.
5.
6.
	
for(int i=0;i < lSize;i++)
	{
		 ch = buffer[i];
		 j++;
	}



вообще моментально происходит.

еще задам пару глупых вопросов:
1) почему переменная типа char* автоматически считается массивом (т.е. обращаться можно поэлементно []) ?
2) почему сразу после объявления char ch она инициализируется символом M. вернее она не инициализирована, однако Watch показыает 'M'
по п.1 ткните где почитать доступно
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38422748
novexelfволодька трынькинnovexelf,

к сожалению, это очень много, потому что
во-первых, этот код даже БЕЗ парсинга строки,
во-вторых, реально будет работать на машине намного слабее моей -(1.2 GHz atom, 1GB ram)
и время возрастет в разы сразу!

говорить о том много это или нет, можно только если ввести вторую величину, с которой сравнивать.
почему 80 секунд это много?
я так понимаю, что весь вопрос в том, что другое приложение делает это быстрее.
т.е. вы сами себе поставили ограничение - реализовать со скоростью, сопоставимой с ...
даже если парсинг увеличит время обработки до 3-5 минут, в чем тут проблема?
вы же не раскрываете тайный смыл, например, если нужно будет один раз в день обрабатывать файл вашим приложением, то особой проблемы в том будет ли это выполнятся 5-7 секунд или 5-7 минут нет, просто сотрудник нальет себе чашку бодрящего ...
другое дело, если технологический процесс выдает файлы 1 раз в минуту и их нужно успевать обрабатывать, явно будет очередь, которая будет постоянно расти.

как уже сказали - реализуйте для начала парсинг, а уж потом оптимизируйте.

по крайней мере теперь я буду реализовывать парсинг и уже именно его оптимизировать, добиваясь 7 секунд))
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38422806
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
володька трынькинnovexelf,

к сожалению, это очень много, потому что
во-первых, этот код даже БЕЗ парсинга строки,
во-вторых, реально будет работать на машине намного слабее моей -(1.2 GHz atom, 1GB ram)
и время возрастет в разы сразу!

чего ты вообще сунулся на эту задачу?
Не понимаешь же ничерта... Не знаешь ничего...


Сначала учиться надо, потом работать.
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38422815
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivСначала учиться надо, потом работать.
Ну дык топикстартер и учится на реальной задаче
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38422822
novexelf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
володька трынькинвсем спасибо за помощь!
сейчас мой последний вариант работает менее 1 сек.
по крайней мере посимвольное чтение
Код: plaintext
1.
2.
3.
4.
5.
6.
	
for(int i=0;i < lSize;i++)
	{
		 ch = buffer[i];
		 j++;
	}



вообще моментально происходит.

еще задам пару глупых вопросов:
1) почему переменная типа char* автоматически считается массивом (т.е. обращаться можно поэлементно []) ?
2) почему сразу после объявления char ch она инициализируется символом M. вернее она не инициализирована, однако Watch показыает 'M'
по п.1 ткните где почитать доступно

с такими знаниями С/С++ с парсингом наверное будет тяжко ...
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38422829
novexelf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИзопропилMasterZivСначала учиться надо, потом работать.
Ну дык топикстартер и учится на реальной задаче

ну да форум вот читает :-)
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38422836
MasterZivволодька трынькинnovexelf,

к сожалению, это очень много, потому что
во-первых, этот код даже БЕЗ парсинга строки,
во-вторых, реально будет работать на машине намного слабее моей -(1.2 GHz atom, 1GB ram)
и время возрастет в разы сразу!

чего ты вообще сунулся на эту задачу?
Не понимаешь же ничерта... Не знаешь ничего...


Сначала учиться надо, потом работать.

мне кажется именно так и происходит процесс обучения, не?
вы учились исключительно читая книжки???

ок, ребят. предыстория такова
проект пишется на питоне. и на данный момент чтение как и парсинг файла я реализовал именно на нем (время обработки файла 100 МБ около 3 мин). потом посмотрев, что есть сторонний софт, который аналогичные действия выполняет за считанные секунды, решил приблизиться к этому времени.
теперь процедуру парсинга напишу на с++, засуну в DLL и подключу к питон-приложению (через ctypes)
как-то так
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38422866
novexelf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
володька трынькинMasterZivпропущено...


чего ты вообще сунулся на эту задачу?
Не понимаешь же ничерта... Не знаешь ничего...


Сначала учиться надо, потом работать.

мне кажется именно так и происходит процесс обучения, не?
вы учились исключительно читая книжки???

ок, ребят. предыстория такова
проект пишется на питоне. и на данный момент чтение как и парсинг файла я реализовал именно на нем (время обработки файла 100 МБ около 3 мин). потом посмотрев, что есть сторонний софт, который аналогичные действия выполняет за считанные секунды, решил приблизиться к этому времени.
теперь процедуру парсинга напишу на с++, засуну в DLL и подключу к питон-приложению (через ctypes)
как-то так

ну если не знаешь азов языка, то обычно их учат, а после практикуются в их применении ...

обычно вся мощь языка заключена в его хорошем знании, которого в данном случае у вас нет, а поэтому может случится так, что исполнение на С/С++ будет еще медленнее, чем все остальные.

все запутанней и запутанней, если есть сторонний софт, то зачем создавать новый?
если уже есть своя разработка, пусть и уступающая в скорости, то зачем ее переписывать? скорость решающий фактор?
зачем вообще тратить время ...

пока что вы пишите на Сях

:-)
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38422888
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
володька трынькинMasterZivпропущено...


чего ты вообще сунулся на эту задачу?
Не понимаешь же ничерта... Не знаешь ничего...


Сначала учиться надо, потом работать.

мне кажется именно так и происходит процесс обучения, не?
вы учились исключительно читая книжки???

ок, ребят. предыстория такова
проект пишется на питоне. и на данный момент чтение как и парсинг файла я реализовал именно на нем (время обработки файла 100 МБ около 3 мин). потом посмотрев, что есть сторонний софт, который аналогичные действия выполняет за считанные секунды, решил приблизиться к этому времени.
теперь процедуру парсинга напишу на с++, засуну в DLL и подключу к питон-приложению (через ctypes)
как-то так
А почему ты не пошёл в форум по Питону и не попробовал соптимизировать то что было написано?
Почему ринулся сразу кодить на 2-х технологиях (учитывая риски того что ты еще и плохо знаешь
С++ и не учёл накладные расходы на переходник между двумя технологиями) а просто не проанализировал
где у тебя боттлнек?
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38422889
ну если не знаешь азов языка, то обычно их учат, а после практикуются в их применении ...

у меня все параллельно идет и теория и практика))

ничего запутанного, есть сторонний софт который делает много чего полезного, работает только под виндой, и проект закрытый.
а нам нужно лишь пара функции из того что делает софтина (причем не совсем таких же, а очень похожих), причем работать должно как под виндой, так и под линуксом. ну все равно что мс офис и блокнот (либо gedit)
в общем, поверьте мне, смысл в этом есть и время тратить стоит :)
ЗЫ чувствую после слов о кроссплатформенности опять полетят "да куда он лезет!", "он же ничерта не знает!", а MasterZiv ?))
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38422901
mayton,

я не ринулся сразу на 2 технологии. я к этому постепенно пришел.
сначала на питоне реализовал это 4-мя различными способами. и подумал, что быстрее уже на нем невозможно. все-таки интерпретатор...
шерстил в основном аглицкие форумы
а вот насчет передачи данных в питон - вы правы, скорее всего это и будет ботлнеком. посмотрим
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38422910
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
володька трынькинmayton,

я не ринулся сразу на 2 технологии. я к этому постепенно пришел.
сначала на питоне реализовал это 4-мя различными способами. и подумал, что быстрее уже на нем невозможно. все-таки интерпретатор...
шерстил в основном аглицкие форумы
а вот насчет передачи данных в питон - вы правы, скорее всего это и будет ботлнеком. посмотрим
Можешь приаттачить в форум эти версии исходников?

(Я думаю коллеги модераторы будут не против если это будет сравнение С++ и Pytnon).
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38422920
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не разбираюсь в Питоне но вот нашёл ссылку в которой приводят
советы по Performance:

https://wiki.python.org/moin/PythonSpeed/PerformanceTips

Вы пробовали имплеменить эти советы?
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38422955
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.
1)
with open(filename) as fi:
	for line in fi:
		for sym in line:
			i += 1


		
2)
for l in tailer.head(open(filename), lines=100000):
	for sym in l:
		s = sym
		i+= 1
	
3)
with open(filename, "r+b") as f:
	mm = mmap.mmap(f.fileno(), 0)
	for line in iter(mm.readline, ""):
		for sym in line:
			s = sym
			i+= 1
	mm.close()
	
4)
for line in open(filename, 'r').readlines():
	for sym in line:
		s = sym

5)
with open(filename, "r+b") as f:
	while 1:
		lines = f.readlines(100000)
		if not lines: break
		for line in lines:
			for sym in line:
				s = sym
				i+= 1


может кому полезно будет
да, спасибо, этот документ читал.
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38422961
а так же сейчас реализовал чисто через вызовы Си ф-ий
Код: 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.
from ctypes import * 
import ctypes.util

import time 

t1 = time.time()

libc = cdll.LoadLibrary(ctypes.util.find_library('c'))
fopen = libc.fopen
fread = libc.fread
fseek = libc.fseek
ftell = libc.ftell
fclose = libc.fclose
free = libc.free

fread.argtypes = [c_void_p, c_size_t, c_size_t, c_void_p]

fh = fopen(fllename, "rb")
fseek(fh, 0 , 2) # SEEK_END = 2
size = ftell(fh)
fseek(fh, 0 , 0) # SEEK_SET = 0


buf = create_string_buffer(size)
fread(buf, 1, size, fh)

i = 0
st = ''
for m in buf:
	i += 1
	
print i

print "time: " + str(time.time() - t1)

fclose(fh)
free(buf)
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38423080
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
володька трынькинмне кажется именно так и происходит процесс обучения, не?


Неа.

володька трынькинвы учились исключительно читая книжки???


Да. Извини, но с такими вопросами типа "как из буфера типа char* читать посимвольно? "
ты далеко не напарсишь.

володька трынькинпроект пишется на питоне. и на данный момент чтение как и парсинг файла я реализовал именно на нем (время обработки файла 100 МБ около 3 мин). потом посмотрев, что есть сторонний софт, который аналогичные действия выполняет за считанные секунды, решил приблизиться к этому времени.
теперь процедуру парсинга напишу на с++, засуну в DLL и подключу к питон-приложению (через ctypes)


У тебя как у многих дурацкое заблуждение, что на С/С++ программы автоматом будут работать быстрее.
Это не так. В частности, чтение файла в буфер на питоне не только такое же по скорости, но и ровно то же самое
по реализации -- используется та же библиотека CRT.
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38423158
MasterZiv,

да, у меня получилось чтение в буфер такое же, а вот итеративные операции по строкам и по символам намного медленнее
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38423239
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
володька трынькин, а почему ты не попробовал

как пишут здесь
http://docs.python.org/2/tutorial/inputoutput.html
Код: python
1.
2.
3.
4.
5.
>>> for line in f:
        print line,

This is the first line of the file.
Second line of the file



или как здесь?
http://effbot.org/zone/readline-performance.htm
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
# File: readline-example-3.py

file = open("sample.txt")

while 1:
    lines = file.readlines(100000)
    if not lines:
	break
    for line in lines:
	pass # do something



Пока не рассказывай про посимвольное чтение. Ведь ты символы в приведённых
фрагментах кода никак не использовал кроме как тупо вёл учёт количества букв.
А это можно сделать и через контейнер строки.
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38423285
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
володька трынькинMasterZiv,

да, у меня получилось чтение в буфер такое же, а вот итеративные операции по строкам и по символам намного медленнее

Я уверен, что можно было бы найти решение и на питоне.
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38423303
novexelf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
володька трынькинMasterZiv,

да, у меня получилось чтение в буфер такое же, а вот итеративные операции по строкам и по символам намного медленнее

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

в результате получается, что для успеха нужен большой багаж знаний и если его нет парсинг может превратится в ужас.

ЗюЫю в универе делали учебный компилятор, простой при простой, вот те кто делал на паскале имели меньше проблем, чем те которые делали на сях, за счет наличия строк, операторов конкатенации и прочих плюшек паскаля, у меня тогда знания были в зачатке и практики мало, поэтому я намучался, но это была учебная задача, там как раз и нужно было намучаться :-)
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38423378
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О каком парсинге тут идёт речь - еще не ясно? Может автору просто надо СSV-файл побить
на строки и поля в загрузить в БД. Здесь достаточно тривиально. Если грамматика чуть сложнее
то нужно вводить некий "автомат" который имеет в процессе парсинга своё "состояние" и в зависимости
от текущего символа принимает разные решения. Это тяжёлая артиллерия, и здесь на голых сях
и на питонах обычно не пишут а используют различные генераторы парсеров которых щас много
и с либеральными лицезиями.
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38423386
mayton,

эти два варианта есть в моих примерах! символы я буду использовать уже в парсинге
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38423389
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
володька трынькинсимволы я буду использовать уже в парсинге
Гораздо проще там использовать регэкспы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38423397
novexelf,

делаю нечто похожее, только не компилятор, а интерпретатор.
на первоначальном этапе нужно разбить файл на лексемы. для этого и читаю посимвольно
...
Рейтинг: 0 / 0
парсинг текстового файла
    #38423402
Dimitry Sibiryakovволодька трынькинсимволы я буду использовать уже в парсинге
Гораздо проще там использовать регэкспы.

да, возможно стоит попробовать на регулярках. здесть уже не надо будет читать посимвольно.
но дело в том что сам алгоритм разбора строки уже реализован на питоне. его нужно только перенести на си. проблем вроде быть не должно
...
Рейтинг: 0 / 0
25 сообщений из 61, страница 2 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / парсинг текстового файла
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]