Информатика и технология программирования

       

Позиционирование в текстовом файле


Текстовые файлы являются по своей природе файлами последовательного доступа. Единственным исключением из этого правила является позиционирование (возврат) к уже прочитанному фрагменту текста при помощи функции fseek . Но для этого необходимо при первоначальном последовательном просмотре файла определить текущую позицию этого фрагмента в файле функций ftell, вызвав ее перед функцией чтения. Данный случай иллюстрирует программа постраничного просмотра текстового файла:


//------------------------------------------------------bk58-01.cpp


&#35include &#60stdio.h&#62
&#35include &#60conio.h&#62
FILE *fd;
char name[30];
int NP; // Количество страниц в файле


int n; // Номер текущей страницы


long POS[100]; // Массив указателей начала


int i; // страниц в файле


char str[80];
void main()
{
printf("Имя файла:"); // Открыть текстовый файл


gets(name);
if ((fd=fopen(name,"r"))==NULL) exit(1);
for (NP=0; NP&#60 100; NP++)
{ // Просмотр страниц файла


POS[NP]=ftell(fd); // Запомнить начало страницы


for (i=0; i&#60 20; i++) // Чтение строк страницы


if (fgets(str,80,fd)==NULL)
break; // Конец файла - выход из цикла


if (i &#60 20) break; // Неполная страница - выход


}
while(1)
{
clrscr();
gotoxy(1,23);
printf("Номер станицы:");
scanf("%d",&#38n);
if ((n &#60 NP) || (n &#60 0)) break;
fseek(fd,POS[n],SEEK_SET); // Указатель на страницу n


for (i=0; i&#60 20; i++) // Повторное чтение страницы


{ // и вывод на экран


if (fgets(str,80,fd)==NULL) break;
gotoxy(1,1+i);
puts(str);
}
}
}



Содержание раздела