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);

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


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

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

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

man regex

anonymous
()

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

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

anonymous
()
Ответ на: комментарий от anonymous

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

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

garlic
() автор топика
Ответ на: комментарий от garlic

Ну почитай какую-нибудь книгу по C. На предмет работы с указателями.

anonymous
()
Ответ на: комментарий от anonymous

>обязательно на С?
В том-то и дело, что обязательно :) Хотя я уже весь файл разобрал обычной функцией strtok.

garlic
() автор топика

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

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

anonymous
()
Ответ на: комментарий от anonymous

Привет. Меня тоже этот вопрос интересует... Вы бы лучше показали, как надо, на примере... было бы очень полезно!

Заранее спасибо!

anonymous
()
Ответ на: комментарий от anonymous

Действительно. И что вы всегда в книгу посылаете? Пару строк написать трудно?

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