Использование Grep для сопоставления с образцом в программе на C / C ++ целесообразно или нет? - PullRequest
1 голос
/ 07 мая 2011

Мне нужно написать программу на C / C ++, чтобы обработать несколько текстовых файлов (около 100) и найти шаблон (обычно строку).Поскольку платформа, которую я собираюсь запустить, будет Unix, я подумал, почему бы мне не использовать системную команду grep в моей программе, поскольку она очень быстрая и эффективная.Но, мой друг говорит, что использование системы ("grep ...") внутри программы не рекомендуется.Он предлагает мне использовать алгоритм сопоставления строковых шаблонов, который, по моему мнению, замедлит работу программы.

Итак, я хочу получить совет по этому поводу.Помоги мне.

Ответы [ 3 ]

4 голосов
/ 07 мая 2011

Не зная, что собирается делать ваша программа, трудно сказать. Но выполнение команд через system () значительно замедлит вашу программу, хотя это может быть и не важно. Что бы вы ни делали, не пишите свой собственный строковый код, если регулярные выражения могут решить эту проблему - используйте одну из многих существующих библиотек регулярных выражений. И если большую часть вашей проблемы можно решить с помощью grep, подумайте о написании сценария оболочки или использовании языка сценариев, такого как Python, вместо программы на C ++.

1 голос
/ 07 мая 2011

Ваши две основные альтернативы: (а) использовать grep или (б) использовать библиотеку, связанную с вашей программой на C или C ++, которая предоставляет регулярные выражения.

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

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

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

Если вы решите использовать библиотеку регулярных выражений, я думаю, что они все примерно одинаковы. Я выбрал что-то, с чем я знаком, поскольку знаю Perl: совместимая с Perl библиотека регулярных выражений .

0 голосов
/ 07 мая 2011

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

...