Какой язык я должен использовать, чтобы написать анализатор текста и отобразить результаты в удобной для пользователя форме? - PullRequest
19 голосов
/ 26 марта 2010

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

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

Итак, я хочу написать программу, которая сможет анализировать этот огромный объем текста в кратчайшие сроки. Мы используем исключительно Windows, поэтому работа на Windows обязательна. Наша текущая реализация работает на локальном веб-сервере, и я убежден, что запуск его как приложения должен был бы быть быстрее.

Все предложения будут полезны. Спасибо.

РЕДАКТИРОВАТЬ: Моя конечная цель состоит в том, чтобы разобрать текст и отобразить его в гораздо более удобной для пользователя форме с цветами и тому подобное. Можете ли вы сделать это с Perl и Python? Я знаю, что вы можете сделать это с Java и C ++. Таким образом, он будет работать как Блокнот, где вы открываете файл журнала, но на экране вы видите удобный для пользователя формат вместо необработанного файла.

РЕДАКТИРОВАТЬ: Итак, я не могу выбрать лучший ответ, и это должен был выбрать язык, который лучше всего отображает то, что я собираюсь, а затем написать парсер в этом. Кроме того, использование ANTLR, вероятно, значительно облегчит этот процесс. Я изменил исходный вопрос, так как, я думаю, я не спросил, что я действительно искал. Спасибо всем!

Ответы [ 12 ]

0 голосов
/ 26 марта 2010

с / с ++ или Java ... для C / C ++ у меня есть фрагмент, который может помочь вам:

FILE *f = fopen(file, "rb");
if(f == NULL) {
    return DBDEMON_OPEN_ERROR; // open fail
}

for(int i = 0; feof(f) == 0; i++)

{

fscanf(f,"%d %s %s %c\n",  &db[i].id, &db[i].name[0], &db[i].uid[0], &db[i].priviledge);

db_size++;

}

fclose(f);

это чтение файла в следующем формате:

int string string char

1 ЧТО-ТО НИЧЕГО Z

для структуры определить следующим образом:

typedef struct {

    unsigned int    id;
    char        name[DBDEMON_NAME_MAXSIZE];
    char        uid[DBDEMON_UID_MAXSIZE];
    char        priviledge;
} DATABASE;

Используйте fscanf с осторожностью, так как типы не проверяются и т. Д., Это может привести к ошибкам. Но я думаю, что это довольно эффективно.

0 голосов
/ 26 марта 2010

Звучит как работа для Perl, так как мне самому не очень важно, как языку. ActivePerl - это разумный дистрибутив Perl для Windows.

...