
Lektsia_po_programmirovaniyu_-_10.pptx
- Количество слайдов: 23
Организация работы с файлами Лекция 11
Основные определения В Паскале понятие файла употребляется в двух смыслах: • как поименованная информация на внешнем устройстве (внешний файл); • как переменная файлового типа в Паскальпрограмме (внутренний файл).
Основные определения Все элементы файла считаются пронумерованными, начальный элемент имеет нулевой номер. 0 1 2 … F 1 F 3 … F 2 текущий указатель F 1, F 2, F 3… - элементы файла МК - маркер конца МК
Основные определения Любой файл имеет три характерных особенности: у него есть имя, что дает возможность программе работать одновременно с несколькими файлами. он содержит компоненты одного типа. длина вновь создаваемого файла никак не оговаривается при его объявлении и ограничивается только емкостью устройств внешней памяти.
Основные определения Файловый тип переменной — это структурированный тип, представляющий собой совокупность однотипных элементов, количество которых заранее (до исполнения программы) не определено Задание переменной файлового типа: <имя> = FILE OF <тип>; <имя> = TEXT; Например: <имя> = FILE; type product = record; name: string; code: word; cost: comp end; text 80 = file of string [80]; var f 1: file of char; f 2: text; f 3: file; f 4: text 80; f 5: file of product;
Основные определения Файлы По типу типизированные По методу доступа Последовательного доступа текстовые Прямого доступа нетипизированные
Алгоритм, рекомендуемый при работе с файлами. установить соответствие между файлом и файловой переменной; 2. открыть файл с определенной целью (чтение, запись); 3. работа с файлом; 4. закрытие файла. 1.
Процедуры и функции для всех типов файлов ASSIGN(F, NAME); Связь файловой переменной F с внешним файлом NAME. Данную процедуру нельзя использовать для уже открытого файла. CLOSE(F); Закрытие открытого файла. ERASE(F); Процедура, удаляющая неоткрытый внешний файл любого типа, задаваемый переменной F. Удаление осуществляется только для реально существующего файла. RENAME(F, NEWNAME); Переименование внешнего файла. Осуществляется только для уже реально существующего файла. RESET(F); Инициализирует открытие уже существующего файла, с которым связна файловая переменная F, и указатель текущего компонента файла настраивается на начало файла. REWRITE(F); Инициализирует открытие пустой файл, и ему присваивает имя, заданное процедурой ASSIGN. EOF(F); IOResult Конец файла if Io. Result<>0 then begin число, соответствующее коду Возвращает целое writeln ('Не могу открыть файл '); последней ошибки ввода - вывода. {$I-}reset (f); {$I+}
Операции чтения и записи
Текстовые файлы var TF 1, TF 2: Text; Текстовые файлы представляют собой последовательность строк, а строки - последовательность символов. Строки имеют переменную длину, каждая строка завершается признаком конца строки. APPEND(F); Открытие файла для добавления в конец информации FLUSH(F); Отображает буфер выходного файла. READ(F, <список>); Чтение из файла READLN(F, <список>); Чтение строки из файла SETTEXTBUF(F, BUF, Назначение буфера ввода-вывода. Buf. Size); WRITE(F, <список>); WRITELN(F, <список>); EOLN(F); SEEKEOF(F); SEEKEOLN(f); Запись в файл Запись строки в файл Конец строки файла. Пропускает в конце строки символы пробела и табуляции.
Файлы INPUT, OUTPUT Работа с этими файлами имеет особенности: -имена этих файлов в списках ввода - вывода не указываются; -применение процедур Reset, Rewrite и Close к стандартным файлам ввода - вывода запрещено; -для работы с файлами INPUT, OUTPUT введена разновидность функции EOLn без параметров.
Считать данные из первого файла, и записать их во второй файл, удвоив каждый элемент через пробел. Var f 1, f 2: text; x: char; st: string; begin write(‘Введите имя файла: ’); readln(st); assign(f 1, st); reset(f 1); assign(f 2, ’result. txt’); rewrite(f 2); while not eof (f 1) do begin read(f 1, x); write(f 2, x + ‘ ‘ + x ); end; close(f 1); close(f 2); end.
Просмотр любого текстового файла на экране. По заполнении экрана до 24 строк программа делает паузу. var f: text; s: string; count: integer; begin repeat write ('Имя файла или 0 для выхода: '); readln (s); if s='0' then halt; assign (f, s); {$I-}reset (f); {$I+} if Io. Result<>0 then begin writeln ('Не могу открыть файл ', s); write ('Нажмите Enter для продолжения'); readln; continue; end; count: =1; while not eof(f) do begin readln (f, s); writeln (s); count: =count+1; if count=24 then begin count: =1; write('Нажмите Enter для продолжения'); readln; end; write ('Нажмите Enter для нового ввода'); readln; close (f); until false; end.
Пример работы с числовыми данными Assign(f 1, 'File 1. dan’); Re. Write(f 1); Assign(f 2, 'File 1. dan'); Writeln(f 1, 'Значения "X", "Y"' ); Reset(f 2); { начать запись } Readln(f 2); { пропустить первую строч For i: = 1 to N do begin read(f 2, a[i], b[i]); X: = 0. 5*i; If i mod 5 = 0 then readln(f 2) Y: = Ln(X); { считать символ #13 } write(f 1, X: 6: 2, Y: 10: 4); end; If i mod 5 = 0 then writeln(f 1) Close(f 2); { записать символ #13 } end; Close(f 1);
Пример программы для считывания строковых и числовых данных из файла и записи их в другой файл var c: char; j, i: word; s: array[1. . 10] of string[12]; a: array[1. . 10, 1. . 6] of word; f 1, f 2: text; BEGIN assign(f 1, 'F 1. txt'); reset(f 1); assign(f 2, 'F 2. txt'); rewrite(f 2); for i: = 1 to 10 do begin read(f 1, s[i]); for j: = 1 to 6 do read(f 1, a[i, j]); readln(f 1) {конца строки } end; Файл одержит информацию вида Леонтьев 5 4 4 5 4 3 Ивлев 4 5 3 4 и т. д. for c: = 'А' to 'Я' do for i: = 1 to 10 do if s[i, 1] = c then begin write(f 2, s[i]); for j: = 1 to 6 do write(f 2, a[i, j]: 2); writeln(F 2) {маркер конца строки } end; close(f 1); close(f 2); END.
Типизированный файл - это файл с объявленным типом его компонент. type FIO= String[20]; SPISOK=File of FIO; var STUD, PREP: SPISOK; fsimv: File of Char; fr: File of Real;
Представление информации в файле type Person = record Name: String[10]; Gender: Char; Age: Byte; end; Person. File: file of Person; 1 элемент 2 элемент 1 2 3 4 5 6 7 8 9 10 11 12 13 1 2 3 4 5 6 7 8 9 10 #6 И в а н о в #0 #0 M #20 #8 C и д о р о в а #0 9 Person. File: Text; 1 2 3 4 5 6 7 8 10 11 12 13 1 строка И в а н о в #32 M #32 2 0 #13 n строка C и д о р о в #10 а Ж #32 1 9 #32 14 #26 15 16 17
Создать файл записей и выдать записи на экран в обратном порядке. const N=10; FName=’person. rec’; type Person=record Name: String[10]; Gender: Char; Age: Byte; end; var F: file of Person; P: Person; i: Long. Int; begin Assign(F, FName); Reset(F); for i: =1 to N do begin Write('Введите ФИО, пол и возраст: '); Read. Ln(P. Name, P. Gender, P. Age); Write(F, P); end; Close(F); Reset(F); for i: =1 to N dobegin Seek(F, File. Size(F)-i); Read(F, P); Write. Ln(P. Name, ' ', P. Gender, ’ ‘. P. Age); end; Close(F); end.
Бестиповые файлы позволяют записывать на диск произвольные участки памяти ЭВМ и считывать их с диска в память. var f: File; Reset(var f: File; Buf. Size: Word ); Rewrite(var f: File; Buf. Size: Word ); Block. Read( var f: File; var X; Count: Word; var Quant. Block: Word ); Block. Write( var f: File; var X; Count: Word; var Quant. Block: Word );
Программа выполняет ввод вещественных чисел из текстового файла и запись их в бестиповой файл блоками по четыре числа. var buf : array[1. . 4] of real; f_in : text; f_out: file; i, k : integer; name_in, name_out : string; begin {$I-} writeln(‘ Имя входного файла'); readln(name_in); assign(f_in, name_in); reset(f_in); if IOResult <>0 then begin writeln('Файл ', name_in, ' не найден'); exit end; writeln(‘Имя выходного файла'); readln(name_out); assign(f_out, name_out); rewrite(f_out, sizeof(real) * 4); {$I+} i : = 0; while not eof(f_in) do begin inc(i); read(f_in, buf[i]); if i = 4 then begin blockwrite(f_out, buf, 1); i : = 0; end; if i <> 0 then begin for k : = i + 1 to 4 do buf[k] : = 0; blockwrite(f_out, buf, 1); end; close(f_in); close(f_out); end.
Операции прямого доступа к файлу File. Size( var f ): Longint возвращает количество блоков в открытом файле f. File. Pos( var f ): Longint возвращает текущую позицию в файле f. Seek ( var f; N: Longint) обеспечивает назначение текущей позиции в файле (позиционирование). Truncate( var f ) устанавливает в текущей позиции признак конца файла и удаляет (стирает) все последующие блоки.
Работа с параметрами командной строки • fpc. exe vasya. pas • my /s /a Существует две стандартных функции для работы с параметрами: 1. Paramcount -- вернет общее число параметров командной строки; 2. Paramstr(i) -- вернет строку, содержащую параметр номер i
Var i : Integer; begin Write. Ln ("Program: ", Param. Str (0)); Write. Ln ("Param. Count = ", Param. Count); Write. Ln ("Parameters"); Write. Ln ("-----"); for i : = 1 to Param. Count do begin Write. Ln (Param. Str (i)); end; Write ("Press Enter. . . "); Read. Ln; end. var fil: text; name: string; begin if Paramcount<>1 then begin writeln ('Запускайте так: ', 'FILEVIEW имя_файла'); halt; end; assign (fil, Paramstr(1)); reset (fil); while not eof(fil) do begin readln (fil, name); writeln (name); end; end.
Lektsia_po_programmirovaniyu_-_10.pptx