LINUX.ORG.RU

Как лучше? (чтение строк из файла)


0

0

Имеется файл примерно на 1800-2000 строк. Его необходимо прочитать и разобрать соглсно определенным правилам. Читать построчно из файла с помощью fgets на мой взгляд не совсем верно (т.к. функция будет выполнять 1800-2000 обращений к диску). Поэтому я просто полностью закидываю файл (примерно 2,5-3 Мб) в паммять:

//Open file
if ((fp_input = fopen(filename, "r")) == NULL) {
//If cannot open input file - exit
fprintf(stderr, "fopen: %s: %s\n", filename, strerror(errno));
exit(-1);
}

fseek (fp_input , 0 , SEEK_END);
fileSize = ftell (fp_input);
rewind (fp_input);
szBuffer3 = (char *) malloc(fileSize);

fread(szBuffer3, 1, fileSize, fp_input);

Вопрос: как быстрее всего (или проще) разобрать файл в пямяти? Сам пока ищу в гугле.

Re: Как лучше? (чтение строк из файла)

> Читать построчно из файла с помощью fgets на мой взгляд не совсем верно (т.к. функция будет выполнять 1800-2000 обращений к диску)

Она не будет выполнять 1800-2000 обращений к диску, но прочесть сразу все равно будет быстрее. Если хочется двигаться в этом направлении дальше - man mmap

>как быстрее всего (или проще) разобрать файл в пямяти?

man regex

anonymous ()

Re: Как лучше? (чтение строк из файла)

> szBuffer3 = (char *) malloc(fileSize);

szBuffer3 = (char *) malloc(fileSize + 1 );
На всякий случай, чтобы \0 туда положить. Это если всякими str-функциями дальше ковыряться и считать, что файл текстовый. Но я бы пользователю не доверял. :)

anonymous ()
Ответ на: Re: Как лучше? (чтение строк из файла) от anonymous

Re: Как лучше? (чтение строк из файла)

>Это если всякими str-функциями дальше ковыряться и считать, что файл текстовый

А каким образом с помощью str функций можно читать из определенных адресов памяти? Заранее извиняюсь за такой вопрос.

garlic ()

Re: Как лучше? (чтение строк из файла)

обязательно на С?
просто специально для таких целей есть perl

anonymous ()

Re: Как лучше? (чтение строк из файла)

> Читать построчно из файла с помощью fgets на мой взгляд не совсем верно (т.к. функция будет выполнять 1800-2000 обращений к диску).

Буферизацию уже отменили? Почему я не знаю?

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.