Easyelectronics.ru

Электроника для всех
Текущее время: 24 апр 2018, 02:16

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Какой формат легче парсить?
СообщениеДобавлено: 22 ноя 2017, 18:38 
Заглядывает иногда

Зарегистрирован: 17 фев 2016, 17:31
Сообщения: 197
В кои то веки мне дали выбор - выбери документ для парсинга а мы его заполним данными.
Инструмент для парсинга - С.
И я задумался какой документ быстрее распарсить? До сих пор я парсил в основном три формата - ini, xml, comma separated
но я никогда не задумывался какой из них лучше парситься по скорости (в данном случае определяющий фактор - скорость).
Может кто то проводил такой анализ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 22 ноя 2017, 18:46 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1408
XML однозначно самый медленный (а если по всем правилам парсить, то еще и достаточно сложный) формат для парсинга. ini для данных подходит слабо, а вот CSV, пожалуй, самый простой и быстрый. Хотя нужно учесть некоторые частные случаи, типа текста с запятыми внутри.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 22 ноя 2017, 19:11 
Заглядывает иногда

Зарегистрирован: 17 фев 2016, 17:31
Сообщения: 197
спасибо. это в принципе конфигурационный файл. около 80-100 переменных. некоторые строковые.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 22 ноя 2017, 19:18 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1408
jenya77 писал(а):
это в принципе конфигурационный файл. около 80-100 переменных. некоторые строковые.

Конкретно в этом случае, INI с секциями будет удобнее и читабельнее. Особенно если разбить переменные на категории и категории положить в секции. Что-то типа такого:
Код:
# Input variables
[input]
vmax = 10
vmin = 5

# Output variables
[output]
delay = 15
format = "%s"



В плане парсинга сильно большой разницы в скорости нет. На выходе можно формировать имена переменных из секции и собственно имени, типа input.vmax. Результат парсинга удобно складывать в какой-нибудь контейнер, типа hash map или сразу устанавливать переменные в программе.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 22 ноя 2017, 19:36 
Заглядывает иногда

Зарегистрирован: 17 фев 2016, 17:31
Сообщения: 197
спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 22 ноя 2017, 19:59 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 2863
руками из текстового файла может и быстрее будет вытащить просто пары
имя = значение
но если там будет хоть что-нибудь посложнее, я бы ещё на lua в качестве формата конфиг файлов посмотрел.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 22 ноя 2017, 20:00 
Старожил
Аватара пользователя

Зарегистрирован: 13 май 2010, 01:32
Сообщения: 836
Откуда: Ижевск
CSV

_________________
Attiny13aПо20р.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 22 ноя 2017, 20:26 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1408
_pv писал(а):
руками из текстового файла может и быстрее будет вытащить просто пары
имя = значение
но если там будет хоть что-нибудь посложнее, я бы ещё на lua в качестве формата конфиг файлов посмотрел.

Если уж и правда хочется чего-то специально заточенного под конфиги, то в этом случае имеет смысл использовать что-то типа YAML. Но для этого случая, я полагаю, это перебор. Так же как и LUA.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 22 ноя 2017, 20:31 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 476
jenya77 писал(а):
спасибо. это в принципе конфигурационный файл. около 80-100 переменных. некоторые строковые.

Тогда чего тебя скорость беспокоит? 80-100КБ инишник в худшем случае должен парситься за тысячные доли секунды, хотя у меня за столько уже компилятор из таких файлов байткод генерит :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 22 ноя 2017, 20:51 
Заглядывает иногда

Зарегистрирован: 17 фев 2016, 17:31
Сообщения: 197
милисекунды тоже иногда имеют решающее значение. тут пару милисекунд, там пару милисекунд, система и так уже поднимается секунд 20. файл лежит на SD. его нужно открыть, вытащить текст, это тоже берет время.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 22 ноя 2017, 21:08 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2409
Откуда: Санкт-Петербург
Ну, нужна скорость - делайте бинарный формат :-D
Хотя по мне для конфига читаемость важнее, и надо ориентироваться на уменьшение зоопарка форматов в приложении.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 22 ноя 2017, 23:50 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 2329
Откуда: КЧР, поселок Нижний Архыз
Если хотите с ini работать, я маленько улучшил iniparser, чтобы был бинарный поиск и еще кое-какие вещи для ускорения работы с огромными ini-файлами.
Хотя, конечно, если смотреть в реальность, обычно конфигурационные файлы редко бывают длинней сотни параметров, и главный затык выходит на IO при чтении файла. Уж парсится он потом намного шустрей.

Здесь не о скорости надо думать, а о том, насколько человеку удобно. И, естественно, выбор будет не в пользу XML. Либо JSON, либо ini. В простейшем случае — параметр=значение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 23 ноя 2017, 11:18 
Заглядывает иногда

Зарегистрирован: 17 фев 2016, 17:31
Сообщения: 197
Eddy_Em писал(а):
Если хотите с ini работать, я маленько улучшил iniparser, чтобы был бинарный поиск и еще кое-какие вещи для ускорения работы с огромными ini-файлами.
Хотя, конечно, если смотреть в реальность, обычно конфигурационные файлы редко бывают длинней сотни параметров, и главный затык выходит на IO при чтении файла. Уж парсится он потом намного шустрей.

Здесь не о скорости надо думать, а о том, насколько человеку удобно. И, естественно, выбор будет не в пользу XML. Либо JSON, либо ini. В простейшем случае — параметр=значение.

спасибо. а то я тут свой огород городить начал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 23 ноя 2017, 16:02 
Заглядывает иногда

Зарегистрирован: 17 фев 2016, 17:31
Сообщения: 197
кстати тут возник еще один вопрос - строка прочитанная из файла - это всегда строка? нужно делать atoi() чтоб получить число?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 23 ноя 2017, 16:15 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 2329
Откуда: КЧР, поселок Нижний Архыз
atoi об ошибках ничего не скажет, надо пользоваться strtod, strtof и т.п.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 23 ноя 2017, 16:35 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 1279
А почему нельзя на нормальном компьютере проверить разные способы ?
Померять скорость, посмотреть кол-во строк для реализации, а потом на мелком окончательно протестировать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 23 ноя 2017, 16:57 
Заглядывает иногда

Зарегистрирован: 17 фев 2016, 17:31
Сообщения: 197
Eddy_Em писал(а):
atoi об ошибках ничего не скажет, надо пользоваться strtod, strtof и т.п.

да но меня интересует сам принцип. есть скажем файл, который вернет 1234 а не 31 32 33 34?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 23 ноя 2017, 17:01 
Заглядывает иногда

Зарегистрирован: 17 фев 2016, 17:31
Сообщения: 197
x893 писал(а):
А почему нельзя на нормальном компьютере проверить разные способы ?
Померять скорость, посмотреть кол-во строк для реализации, а потом на мелком окончательно протестировать.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 23 ноя 2017, 17:08 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 451
jenya77 писал(а):
да но меня интересует сам принцип. есть скажем файл, который вернет 1234 а не 31 32 33 34?

Какой-то странный вопрос. Если у вас в файле записано 0x31323334, то почему-то это должны видеть как-то иначе? Запишите в файл 0x04 0xD2 и при чтении этих 2байт увидите число 1234. Только файл уже будет не текстовым, а бинарным, т.к. 0x04 уже управляющий символ если по ASCII. Вы когда сохраняете именно текст 1234, то редактор и переводит его в последовательность ASCII (или любой другой кодировки) 31 32 33 34. Для компа там нет 1234 уже, там именно 31 32 33 34. Именно для этого и нужны функции обратного преобразования.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 23 ноя 2017, 17:12 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 1279
Да тема вообще странная.
Если уже 3 формата парсил, то что мешает померить скорость (если она важна) или размер кода.
Можно эмулятор взять для отладки кода/алгоритма.
Если проверка на большом компьютере вызывает сложности.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 23 ноя 2017, 17:25 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1408
jenya77 писал(а):
ну вы ж понимаете где компьютер а где эмбедед. а если комп мультикор и он растащит задачу по корам?

Пока вы не сделаете многопоточную (или многопроцессорную) обработку, все будет выполняться на одном ядре в любой момент времени.
jenya77 писал(а):
да и кроме этого - не обязательно что соотношение между методами будет релевантно. очень уж большая разница между компом и контролером.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 23 ноя 2017, 17:27 
Заглядывает иногда

Зарегистрирован: 17 фев 2016, 17:31
Сообщения: 197
NStorm писал(а):
jenya77 писал(а):
да но меня интересует сам принцип. есть скажем файл, который вернет 1234 а не 31 32 33 34?

Какой-то странный вопрос. Если у вас в файле записано 0x31323334, то почему-то это должны видеть как-то иначе? Запишите в файл 0x04 0xD2 и при чтении этих 2байт увидите число 1234. Только файл уже будет не текстовым, а бинарным, т.к. 0x04 уже управляющий символ если по ASCII. Вы когда сохраняете именно текст 1234, то редактор и переводит его в последовательность ASCII (или любой другой кодировки) 31 32 33 34. Для компа там нет 1234 уже, там именно 31 32 33 34. Именно для этого и нужны функции обратного преобразования.

понял. спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 23 ноя 2017, 19:00 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 695
Если это конфигурационный файл, то непонятно, почему критична скорость...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 23 ноя 2017, 19:01 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 695
jenya77 писал(а):
x893 писал(а):
А почему нельзя на нормальном компьютере проверить разные способы ?
Померять скорость, посмотреть кол-во строк для реализации, а потом на мелком окончательно протестировать.

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


На самом деле, для этой задачи... Разницы между ними практически нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какой формат легче парсить?
СообщениеДобавлено: 14 дек 2017, 20:23 
Заглядывает иногда

Зарегистрирован: 15 окт 2017, 22:24
Сообщения: 180
Напрашивается ini: и парсится не особо сложно и редактировать не утомительно. А самое плохое что я видел - какой-то длинк хранил конфиг в XML. Пять килобайтов одной строкой. Редактировать его было крайне мучительно. Можно конечно переформатировать, но он при изменении чего либо из вебморды все-равно вернет вид конфига в этот ужас. Не делайте так, люди.

А если система поднимается 20 секунд, логично начать урезать осетра с самых жирных и тормозных вещей и это очень врядли чтение этого конфига. Это именно тот случай когда 20% работы даст 80% результата. Сам по себе старт 20 секунд - то еще безобразие. У вас что за железо и что там 20 секунд происходит?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB