ТОР 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.
Не нашли, что искали? Воспользуйтесь поиском:
|