ОБНОВЛЕНИЕ изменен ответ решительно!
У меня есть огромный набор строк журнала, и мне нужно разобрать каждую строку (так что эффективность очень важна).
Просто имейте в виду, что C++ вряд ли поможет с точки зрения эффективности в этой ситуации. Не обманывайтесь, думая, что только потому, что у вас есть быстрый код синтаксического анализа на C++, что ваша программа будет иметь высокую производительность!
Эффективность, в которой вы действительно нуждаетесь, - это не производительность на уровне машинного кода кода разбора, а на общем уровне алгоритма.
Подумайте, что вы пытаетесь сделать.
У вас есть огромный текстовый файл, и вы хотите, чтобы преобразовать каждую строку в структуру данных,
Сохранение огромную структуру данных в памяти очень неэффективна, независимо от того, какой язык вы используете!
Что вам нужно сделать, это «выборка» по одной строке за раз, преобразовать ее в структуру данных и затем обработать ее, и только после того, как вы закончите работу с структурой данных, вы идете и выбираете следующую строку и преобразуйте ее в структуру данных, обработайте ее и повторите.
Если вы это сделаете, вы уже решили главное узкое место.
Для разбора строки текста, кажется, формат ваших данных весьма упрощенно, проверьте аналогичный вопрос, который я задал некоторое время назад: C++ string parsing (python style)
В вашем случае, я полагаю, вы можете использовать строку и используйте оператор >>
, чтобы прочитать следующую «вещь» в строке.
см. this answer например код.
В качестве альтернативы (я не хотел удалять эту часть!) Если бы вы могли написать это в python, это будет намного проще. Я не знаю вашу ситуацию (это, кажется, что вы застряли с C++), но до сих пор
Посмотрите на эту презентацию для выполнения этих видов задачи эффективного использования питона генератора выражений: http://www.dabeaz.com/generators/Generators.pdf
Это стоит читать , На слайде 31 он имеет дело с тем, что кажется чем-то очень похожим на то, что вы пытаетесь сделать.
Это, по крайней мере, даст вам некоторое вдохновение.
Он также демонстрирует довольно сильно, что производительность достигается не конкретным кодом строковой разборки, а всем алгоритмом.
Хммм ... можете ли вы гарантировать, что полуколоны не появятся в ваших URL-адресах? Или, по крайней мере, они не появляются в конце? – dmckee
Какую цель? что вы собираетесь делать с данными после его анализа? – hasen