2017-02-05 22 views
0

Я работаю над проектом для моего университета, требуя, чтобы пойти, хотя прилично больших файлов (> 50МБ), и я использовал прогибается в основном переписать файл, состоящий из строки, такие какЯвляется ли flex-lexer идеальным (быстрым) конвертером для простого распознавания и замены регулярных выражений?

1 1:41 3:54 7:40 13:8 
2 4:7 7:8 23:85 

в

1 1 3 7 13 
2 4 7 23 

(в основном, превращая number_a:number_b в number_a, и печать вывод в файл при исполнении)

Мой вопрос, так как я пишу оставшуюся часть моей программы в C++: в том, что хороший исх lex, так как flex должен быть быстрым (f в гибком состоянии для быстрого), или я просто ошибаюсь, и есть намного более простой и эффективный способ сделать это на C++?

Я довольно новичок в C++, поэтому у меня много C-кодирующих рефлексов и мало информации о всех доступных инструментах и ​​их производительности.

Вот кусок кода я писал в гибком:

%{ 
#include<stdio.h> 
unsigned int nb_doc = 1;//prend en compte le premier doc 
unsigned int i; 
%} 
couple_entiers  [0-9]+:[0-9]+ 
retour_chariot  \n[0-9]+ 
autre    . 
%% 
{couple_entiers}  {i=0; 
         while(yytext[i] != ':'){ 
          printf("%c",yytext[i]); 
          i++; 
         } 
         } 
{retour_chariot}  {nb_doC++; printf("%s",yytext);} 
{autre}    {printf("%s",yytext);} 

%% 
int main (void){ 
    yylex(); 
    printf("\n\n%d",nb_doc); 
    return 0; 
} 
+1

Flex быстро. Но достаточно ли это? Есть множество вещей, которые вы могли бы сделать, чтобы попытаться ускорить свою программу. Кроме того, существует множество простых способов написания кода в чистом C++. Но вам нужно будет делать больше? Если вы напишете простую функцию «читать строку, испускаете каждый другой номер» в C++, она будет быстрой, но не «поймет» строки, и поэтому, если вам нужно добавить больше функциональности, у вас возникнут проблемы. Если вы сохраните свой гибкий код, вы можете легко сделать что-то со вторыми числами в парах. Что более вероятно? –

+1

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

+1

@AustinHastings на самом деле учитель просто добавил еще несколько вещей, например, создание случайных наборов «частей» моего файла и несколько других функций: ваш комментарий был просто золотым, спасибо снова! –

ответ

1

Рекомендуется заменить пользовательский код с общим решением:

system("sed -E 's/:\d+//g'"); 

:)

 Смежные вопросы

  • Нет связанных вопросов^_^