Перемещение по файлу.

Изменение положения указателя осуществляется с помощью оператора:

Seek(f, i);

где f - переменная файлового типа, i - порядковый номер элемента файла, на который необходимо установить указатель (тип переменной - longint). Например, оператор установки указателя на начало файла имеет вид:

Seek(f,0);

Функция FileSize (файловая переменная) возвращает общее число элементов файла.

Функция FilePos(файловая переменная) возвращает номер элемента, на который установлен текущий указатель.

Например,

Seek(f, FileSize(f)-1); – устанавливает указатель на последнюю запись файла (последний элемент).

Seek(f, FileSize(f)); - устанавливает указатель за последний элемент файла.

Seek(f, FilePos(f)+1) пропуск элемента.

 

Функция Eof(файловая переменная) дает значение true, если достигнут конец файла, false – в противном случае.

 

Процедура Truncate используется для отсечения от файла элементов, начиная с текущей позиции указателя включительно.

Truncate (файловая переменная);

 

Команды:

{$I-} отключение автоматического контроля за правильностью открытия файла и возможность приостановить работу программы после открытия файла;

{$I+} включение автоматического контроля за правильностью открытия файла, при неправильном открытии файла происходит аварийное завершение программы.

IOResult – функция, дающая некоторое целое число, анализируя которое, можно оценить, удачно или неудачно прошла процедура открытия файла. Если функция равна 0, то файл открылся нормально.

Assign (f, ‘file.dat’);

{$i-}

Reset(f);

l := IOResult;

{$i+}

if l <> 0 then ReWrite (f);

Пример 1. Сформировать файл f, компоненты которого являются целыми числами. Переписать в файл h кратные 5, а в файл g не кратные 5 элементы.

Var

h,g,f: file of integer;

a,i: integer;

Begin

Assign(f,’fff.dan’);

ReWrite(f);

a := 1;

while a <> 0 do

begin

Write(‘Введите число, конец ввода – 0’);

if a <> 0 then

Write (f,a);

end;

Seek(f,0);

Assign(h,’hhh.dan’);

ReWrite(h);

Assign(g,’ggg.dan’);

ReWrite(g);

for i:=1 to filesize(f) do

Begin

Read(f,a);

if a mod 5 =0 then

Write(h,a)

Else

Write(g,a);

end;

Write(‘Файл f’);

Seek(f,0);

for i:= 1 to filesize(f) do

Begin

Read(f,a);

Write(a,’ ‘);

end;

WriteLn;

WriteLn(‘Файл н, кратные 5’);

Seek(h,0);

while not Eof(h) do

Begin

Read(h,a);

Write(‘a,’ ‘);

end;

WriteLn;

Seek(g,0);

WriteLn(‘Файл g, не кратные 5);

while not Eof(g) do

Begin

Read(g,a);

Write(a,’ ‘);

end;

WriteLn;

Close(f);

Close(g);

Close(h);

ReadLn;

End.

 

Пример 2. Написать программу формирования и вывода содержимого файла на экран в виде таблицы. Каждая запись файла имеет поле: номер зачетки, ФИО, стипендия. Предусмотреть возможность добавления записей в файл, если он существует и первоначального ввода, если файла нет. Режимы работы вывести на экран в виде меню:

Меню

1. Ввод

2. Вывод

3. Выход

Список студентов

Номер зачетки ФИО Стипендия
13 поз. 20 поз. 9 поз.

 

 

Ширина таблицы 46 позиций (13+20+9+4 позиции для разделителей).

uses Crt; { использование модуля Crt, доступ к

экрану в текстовом режиме }

Type

stud = record

nz: string[10];

fio: string[20];

stip: real;

End;

Var

f: file of stud;

a: stud; n, k : integer;

t:real;

Begin

Assign (f, ‘st.rez’);

{$i-}

Reset(f);

k := IOResult;

{$i+}

if k <> 0 then

ReWrite (f);

n:=0;

{Номер режима работы}

while n<=2 do

begin

{Очистка экрана}

ClrScr;

{x – позиция в строке, y – строка}

GotoXY (30, 10);

WriteLn (‘Меню’);

GotoXY (20, 14);

WriteLn (‘1. Ввод’);

GotoXY (20, 16);

WriteLn (‘2. Вывод’);

GotoXY (20, 18);

WriteLn (‘3. Выход’);

GotoXY (15, 20);

Write (‘Введите номер режима работы =>’);

ReadLn (n);

ClrScr;

case n of

1: begin

if k=0 then

Seek (f, FileSize(f));

a.nz:=’1’;

while a.nz<>’0’ do

Begin

Write(‘Введите номер зачетки или 0, если

конец ввода =>’);

ReadLn(a.nz);

if a.nz <> ‘0’ then

Begin

Write (‘ФИО=>’);

ReadLn (a.fio);

Write (‘Стипендия=>’);

ReadLn (a.stip);

Write (f,a);

End;

End;

Reset(f);

k:=0;

end;

2: begin

if k<>0 then

Begin

writeln (‘файл пуст’);

readln;

end;

if k =0 then

Begin

Seek (f, 0);

WriteLn (‘ Список студентов’);

WriteLn(‘_________________________ ____________________’);

WriteLn (‘| номер зачетки | фио |

стипендия |’);

WriteLn(‘_________________________

____________________’);

t:=0;

while not Eof (f) do

Begin

Read (f,a);

WriteLn (‘| ‘, a.nz:10, ‘ |’, a.fio:20, ‘| ’,

a.stip:6:2, ‘ |’);

t:=t+a.stip;

end;

WriteLn(‘_________________________

____________________’);

WriteLn(‘| итого |’,t:8:2,’ |’);

WriteLn(‘_________________________

____________________’);

ReadLn;

end;

end;

3: Close (f);

end; {Конец case}

end; {Конец while-меню}

ClrScr;

end.

 








Дата добавления: 2017-01-29; просмотров: 670;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.026 сек.