Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






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




 

Program FileZap;

{Формирование файла студентов}

Const MAX_DL=15; {Максимальная длина фамилии}

KOL_OC=3; {Количество оценок}

Type Tzap=Record

fam:String[MAX_DL]; {Фамилия}

OC:Array[1..KOL_OC] Of 0..5; {Оценки}

End;

Tfile=File Of Tzap;

 

Function FileExist(Const nameF:String):Boolean;

{Функция проверки существования файла.

Входное данное: nameF - физическое имя файла.

Выходное данное: FileExist - логическое значение.}

Var F:File; {Любой вид файла}

Begin Assign(F,nameF);

{$I-} {Отключение контроля чтения-записи}

Reset(F); {Открытие файла для чтения}

{$I+} {Включение контроля чтения-записи}

If IOResult=0 {Файл существует?}

Then Begin FileExist:=TRUE; Close(F); {Закрытие файла}

End

Else FileExist:=FALSE;

End; {FileExist}

 

Procedure SozdFZ(Const nameF:String);

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

Входное данное: nameF - физическое имя файла.}

Var z:Tzap; j:Byte; otv:Char; FZ:Tfile;

Begin If FileExist(nameF) {Файл существует?}

Then Begin WriteLn('Файл ',nameF,' существует!');

Exit; {Выход из процедуры}

End;

Assign(FZ,nameF);

Rewrite(FZ); {Открытие файла для записи}

WriteLn('Вводите данные:');

Repeat Write('Фамилия? '); ReadLn(z.fam);

Write('Оценки? '); For j:=1 To KOL_OC

Do Read(z.OC[j]); ReadLn;

Write(FZ,z); {Запись элемента в файл}

Write('Продолжить ввод? '); ReadLn(otv);

Until Not (otv In ['Д','д','Y','y']);

Close(FZ); {Закрытие файла}

End; { SozdFZ }

 

Procedure ProsmFZ(Const nameF:String);

{Процедура просмотра файла из записей.

Входное данное: nameF - физическое имя файла.}

Var z:Tzap; j:Byte; FZ:Tfile;

Begin If Not FileExist(nameF) {Файл не существует?}

Then Begin WriteLn('Файл ',nameF,' не существует!');

Exit;

End;

Assign(FZ,nameF);

Reset(FZ); {Открытие файла для чтения}

If Eof(FZ) {Конец файла?}

Then Begin WriteLn('Файл ',nameF,' пуст!');

Exit;

End;

WriteLn('Содержимое файла: ',nameF);

While Not(Eof(FZ)) {Пока не конец файла}

Do Begin Read(FZ,z); {Чтение элемента из файла}

Write(z.fam,' ':MAX_DL-Length(z.fam)+1);

For j:=1 To KOL_OC

Do Write(z.OC[j]:3); WriteLn

End;

Close(FZ); {Закрытие файла}

End; {ProsmFZ}

 

Procedure SortFZ(Const nameF:String);

{Процедура сортировки файла абитуриентов по убыванию

суммарного балла методом обмена с флагом перестановки.

Входное данное: nameF - физическое имя файла.}

 

Function SumB(z:Tzap):Byte;

{Функция определения суммарного балла.

Входное данное: z - текущая запись.

Выходное данное: SumB - суммарный балл.}

Var s,j:Byte;

Begin s:=0;

For j:=1 To KOL_OC

Do s:=s+z.OC[j];

SumB:=s

End; {SumB}

 

Var z1,z2:Tzap; i:Word; flag:Boolean; FZ:Tfile;

nkz:Word; {Номер конечной записи}

Begin

If Not FileExist(nameF) {Файл не существует?}

Then Begin WriteLn('Файл ',nameF,' не существует!');

Exit;

End;

Assign(FZ,nameF);

Reset(FZ); {Открытие файла для чтения}

nkz:=FileSize(FZ)-1; {Начальная длина файла}

flag:=TRUE; {Начальная установка флага}

While (nkz>0) and flag {Пока файл не упорядочен}

Do Begin

flag:=FALSE; {Нет перестановки}

For i:=0 To nkz-1 {Перебор записей файла}

Do Begin

Seek(FZ,i);

Read(FZ,z1,z2);{Чтение двух элементов файла}

If SumB(z1)<SumB(z2)

Then Begin {Обмен соседних элементов файла}

Seek(FZ,FilePos(FZ)-2);

Write(FZ,z2,z1);{Запись элементов в файл}

flag:=TRUE; {Есть перестановка}

End;

End; { For }

nkz:=nkz-1;

End; {While}

Close(FZ) {Закрытие файла}

End; {SortFZ}

 

Procedure UsechFZ(Const nameF:String;kz:Word);

{Процедура усечения файла.

Входные данные: nameF - физическое имя файла,

kz - количество записей в файле.}

Var FZ:Tfile;

Begin

If Not FileExist(nameF) {Файл не существует?}

Then WriteLn(' UsechFZ: Файла ',nameF,' нет!')

Else Begin

Assign(FZ,nameF);

Reset(FZ); {Открытие файла для чтения}

If kz<FileSize(FZ) {Усечение возможно?}

Then Begin Seek(FZ,kz); {Установка маркера}

Truncate(FZ); {Усечение файла}

Close(FZ); {Закрытие файла}

End;

End;

End; {UsechFZ}

 

{Основная программа}

Var nameFZ {Имя файла}

kStud:Word; {Количество студентов}

r:0..4; {Режим работы программы} {$R+}

Begin

WriteLn{‘Введите имя файла:’}

ReadLn(nameFZ);

Repeat

WriteLn('Задайте режим работы программы!');

WriteLn('1 - создание, 2 - сортировка,');

Write('3 - просмотр, 4 - усечение, 0 - выход: ');

ReadLn(r);

Case r Of

1: SozdFZ(nameFZ); {Создание файла}

2: SortFZ(nameFZ); {Сортировка файла}

3: ProsmFZ(nameFZ); {Просмотр файла}

4: Begin Write('Количество студентов? ');

ReadLn(kStud);

UsechFZ(nameFZ,kStud); {Усечение файла}

End;

End; {Case}

WriteLn;

Until r=0;

End.

 

 


 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных