Материал: Мансуров. Основы программирования в среде Lazarus. 2010

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

3.6 Файлы

____________________________________________________________________

readkey;

exit;

end;

begin

AssignFile(name,'Name.txt');

AssignFile(kol,'Kol.txt');

// файлы открываются для чтения

Reset(name);

Reset(kol);

end;

ClrScr;

GoToXY(6, 1);

write(UTF8ToConsole('Сведения о реализации компьютеров'));

GoToXY(14, 2);

write(UTF8ToConsole('за январь 2010 г.'));

GoToXY(1, 3);

write('------------------------------------------------

');

GoToXY(1, 4);

write(UTF8ToConsole(' Фамилия Количество Выручка Премия'));

GoToXY(1, 5);

write('------------------------------------------------

');

cost:= 1000;

// стоимость компьютера

prem:= 25;

// размер премии

sumc:= 0;

// Общее количество компьютеров

sumv:= 0;

// Общая сумма выручки

sump:= 0;

// Общая сумма премии

k:= 0;

// Отслеживает текущую строку на экране

while not Eof(name) do

236

Глава 3 Более сложные элементы языка

____________________________________________________________________

begin

Readln(name, fam);

Readln(kol, comp);

sum:=comp*cost; // сумма выручки для одного менеджера

sum1:=comp*prem; // сумма премиальных для одного менеджера sumc:=sumc+comp; // всего продано компьютеров sumv:=sumv+sum; // выручка от продажи всех компьютеров sump:=sump+sum1; // общая сумма премиальных

writeln;

writeln(fam); GoToXY(24, k + 6); write(comp); GoToXY(32, k + 6); write(sum); GoToXY(40, k + 6); write(sum1);

k:= k + 1; end;

GoToXY(1, k + 6); write('------------------------------------------------'); GoToXY(17, k + 7); write(UTF8ToConsole('Итого:')); GoToXY(24, k + 7);

write(sumc); GoToXY(32, k + 7); write( sumv); GoToXY(40, k + 7); write(sump); GoToXY(1, k + 9);

237

3.6 Файлы

____________________________________________________________________

writeln(UTF8ToConsole('Нажмите любую клавишу'));

CloseFile(name);

CloseFile(kol);

readkey;

end.

Почему мы разделили эти программы на две самостоятельные? Чтобы от-

делить процесс ввода от непосредственно обработки. Так часто делают на прак-

тике. Ведь вводом данных может заниматься, например, оператор. Причем дан-

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

3.6.3.3. Процедуры для работы с типизированными файлами

Процедура Read(f, v)- считывает в переменную v

очередной элемент

файла. Тип переменной v должен

соответствовать файловой переменной f.

Процедура Write(f, v)-

записывает переменную

v в файл. f- фай-

ловая переменная, v- переменная того, же типа, что и элемент файла f.

Для типизированных файлов применение процедур Writeln и Readln

запрещены.

Типизированные файлы в отличие от текстовых являются файлами прямо-

го доступа, т.е. позволяют обратиться "сразу" к нужному элементу по его номе-

ру. Таким образом, в типизированных файлах все его элементы имеют свой но-

мер. Нумерация элементов файла начинается с 0.

Для перемещения по типизированному файлу применяется процедура

Seek. Формат вызова процедуры:

Seek(f, n);

Где f – файловая переменная, n – номер элемента в файле. Процедура

Seek просто устанавливает указатель на элемент с номером n.

238

Глава 3 Более сложные элементы языка

____________________________________________________________________

Функция FilePos(f) возвращает текущую позицию указателя, т.е. но-

мер того элемента на который установлен указатель.

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

Напишем программу предыдущего раздела с использованием типизиро-

ванных файлов. В том примере мы создали два файла, каждый элемент которых состоял только из одного поля.

Файл Name

Файл Kol

 

 

 

 

 

Иванов

 

2

 

 

 

 

 

Петров

 

10

 

 

 

 

 

………

 

 

 

 

 

 

 

Сидоров

 

15

 

 

 

 

 

Яковлев

 

0

 

 

 

 

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

лей, имеющих разные типы. Создадим один файл с именем "File_manager.dat",

имеющий следующую структуру записи:

 

 

name

comp

 

 

 

 

 

Иванов

 

2

 

 

 

 

 

Петров

 

10

 

 

 

 

 

………

 

 

 

 

 

 

 

Сидоров

 

15

 

 

 

 

 

Яковлев

 

0

 

 

 

 

Для этого сначала создадим тип данных запись следующей структуры:

type

manager = record

239

3.6 Файлы

____________________________________________________________________

name: string[18];

comp: integer;

end;

Программа создания и ввода данных в типизированный файл будет выгля-

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

program create_files; {$mode objfpc}{$H+} uses

CRT, FileUtil, SysUtils; type

manager= record name: string[18]; comp: integer;

end; var

company: manager;

fmanager: File of manager; // Файловая переменная k: integer;

n: integer; begin

AssignFile(fmanager,'File_manager.dat');

{Проверка существования файлов. Если файлы

существуют, то они открываются для дозаписи.

Если нет, то создаются новые пустые файлы}

if not FileExists('File_manager.dat') then

Rewrite(fmanager)

else

240

Смотрите также:

11 Горм +
113
14
1433
1511
1632
199
204
2N4264RE
3773