1 Файловый тип данных (структурированный). Файлом – называется любой набор данных, хранимый на магнитном носителе или представленный последовательностью однотипных элементов. Свойства файлов в Pascal. 1). Все элементы в файлах имеют общее имя и каждый элемент свой порядковый номер(начиная с0). 2). Любой элемент файла становится доступный только после последовательного перебора предыдущих элементов (так называемых файлы последующего доступа). 3). Количество элементов Файла заранее не фиксируются, и может изменяться в ходе выполнения программы. Размер ограничен только количеством свободного места на магнитном носителе. 4).Записав содержимое файла один раз его можно использовать не однократно, а также в разных программах. Операции с файлами. 1). Чтение – вывод данных из файла в оперативную память. 2). Запись – вывод результатов из ОП в Файл. !!! В данный момент времени файл может находиться только в одном состоянии (записи или чтение). !!! Читать не существующий файл нельзя, записывать – можно. При это будет создан новый файл. (контроль существующего файла)!!! Чтение ОП Диск (контроль места на диске)!!! Запись Этапы работы с файлами 1). Определение файловой переменной (fp) – логический идентификатор файла (зависит от типа файла). 2). Установка связи с файловой переменной с файлом на диске. 3). Открытие файла (зависит от выполнения операций с файлами). 4). Обработка файла. 5). Закрытие файла. Файловые типы Типизированный файл Текстовый файл (состоит из элементов одного типа) (из текстовых строк разной длины) 1 2 Не типизированный файл (из не структурированных потоков байт) 3 2 1. Var Var A:file of integer; ФП:file of mun; 2. Var ФП:text; Var B:text; 3. Var Var C:text ФП:file; Информация кодируется, просмотреть через текстовый файл нельзя. Можно посмотреть через DOSовский редактор. То же, как и типизированный просмотреть нельзя. Примечание: Этапы третий и четвертый выполняются ч файловой переменной (ФП) связаны с файлами (имя или путь) на этапе 2. Особенности считывания и записи из файла. 1.) Данные считываются и записываются по элементно в ячейку определяемую указателем (внутри код элемента файла). 1 4 5 2 Номер элемента Указатель Значение элементов файла. 2.) При выполнении команд Reset и Rewrite текущий указатель поправлен на 1-ый элемент. 0 1 0 1 4 2 5 3 2 Reset Rewrite 3.) после выполнения операций Write(x,y) значение в текущую указателя на файл, связанный с файловой переменной помещается из переменной x. z 1 2 4 1 Write(z;x) Do Read (x) x 1 2 6 1 После После выполнения операции Write (z;x) текущий указатель автоматически переходит на следующий элемент. 3 4). z 1 2 4 1 Do Read (z,x) После x ! ТОЖЕ САМОЕ. 5). Пример: Write (x,y) Write (z,x) write (z,x,x1) Команды работы с файлами. Команда Назначение Assign (ФП, путь) Устанавливает связь между файловой переменной и файлом на диске Открытие файла связь с файловой переменной для чтения Открытие файла связь с файловой переменной для записи Открытие файла для добавления Reset (ФП) ReWrite(ФП) Append (ФП) Close (ФП) Erase (ФП) Вид файла Все Закрывает доступ к Все файлу на диске (этап 5) Удаление файла с диска Все Переименование файла Все IOResult (ФП) Возвращает код ошибки ввода(если 0 то ошибки нет) Все EoF (ФП) End of File Возвращает логическое значение о достижении (true) или не достижении (false) конца файла Возвращает логическое значение о достижении (true) или не достижении (false) конца строки Считывает с диска текущий элемент файла Все Read (ФП,переменная) 3-й этап Текстовый ReName (ФП, имя) EoLn (ФП) Обязательная (этап №2) Все Все Примечание Данные из файла доступны только для использования Данные из файла доступны для изменения Конец файла, данные доступны только для добавления Файл с диска не удаляется Файл должен быть закрыт Файл должен быть закрыт Использование для проверки существования файла на диске Использование для обработки всех элементов (поочередно) Текстовый Текстовый Типизированный Типы данных должны совпадать между 4 в ОП (переменная) ReadLn (ФП,переменная) Write (ФП, переменная) WriteLn File Size (ФП) Смотри выше Текстовый Запись и ОП Текстовый (переменная) в текущий Типизированный позицию файла Текстовый Возвращает количество Типизированный элементов в файле Устанавливает указатель на заданный индекс (номер элемента) Возвращает номер текущего элемента (индекс) Seek (ФП, индекс) File Pos (ФП) Типизированный файловой переменной и переменной ОП Смотри выше Быстрый переход к !!! концу файла Seek(ФП,file size (ФП)+1) Типизированный 6). После выполнения команды Append указатель устанавливается на новый последующий элемент. До После 0 1 0 1 1 2 1 2 2 4 2 4 3 1 3 1 4 7). Добавление нового элемента в типизированный файл: 1. Reset (z) 2. Seek (z, file size (z)+1) 3. Записать данные Write (z, x) 5 Задача . Вывести на экран Слова, хранившиеся на диске в текстовом файле по адресу: S:\file.txt Посчитать количество слов в файле Примечание: через FarManager создайте файл S:\file.txt и запишите в него предложение Программа Pascal умеет работать с файлами Словесное описание Блок-схема Начало 1. Связь файловой переменной f с файлом S:\file.txt 2. Открытие файла для чтения. 3. До тех пор пока не кончился файл (текущий элемент не последний) считать из файла текущее значение в t. выводится на экран t увеличить kol на 1 Связь f с S:\file.txt Открытие f для чтения Не конец f да t f t 4. Вывести kol на экран 5. Закрытие f нет Kol:=kol+1 Pascal Program read_file_txt; Var f: text; kol:integer; t: string; Begin Assign(f, ‘S:\file.txt’); Reset(f); Writeln(‘Слова из файла:’); While not(eof(f)) do Begin Read(f,t); WriteLn(t); kol:=kol+1; End; WriteLn(‘в файле ’,kol,’слов’); Close(f); End. kol закрытие f Конец Задача . Вводить с клавиатуры слова (количество определяет пользователь). Записать их в текстовый файл по адресу S:\file.tip. 1 Спросить количество целых Program Write_file; Начало чисел (kol) Var f-2:file of integer; 2 Связь файловой переменной с Name:string; Kol файлом S:\file.tip X,T,Kol:integer 3 Открытие f-2 для записи. Begin Связь f-2 с S:\file.tip 4 До тех пор пока не кончились Write(‘Количество чисел’); элементы: Открыть f-2 для записи ввод пользователя с ReadLn(Kol); клавиатур числа (t) Assign(f-2, ‘S:\file.tip’); x:=1, Kol запись t в файл f-2 ReWrite(f-2); 5 Закрытие f-2. t For x:=1 to kol do Begin t f-2 Write(‘Число’); ReadLn(t); Закрыть f-2 Write(f-2,t); End; Конец 6 Close(f-2); End. Задача . Вводить с клавиатуры целые числа (количество определяет пользователь). Записать их в типизированный файл по адресу S:\file.tip. 1 Спросить количество целых Program Write_file; Начало чисел (kol) Var f-2:file of integer; 5 Связь файловой переменной с Name:string; Kol файлом S:\file.tip X,T,Kol:integer 6 Открытие f-2 для записи. Begin Связь f-2 с S:\file.tip 7 До тех пор пока не кончились Write(‘Количество чисел’); элементы: Открыть f-2 для записи ввод пользователя с ReadLn(Kol); клавиатур числа (t) Assign(f-2, ‘S:\file.tip’); x:=1, Kol запись t в файл f-2 ReWrite(f-2); 5 Закрытие f-2. t For x:=1 to kol do Begin t f-2 Write(‘Число’); ReadLn(t); Закрыть f-2 Write(f-2,t); End; Конец Close(f-2); End. Задача . Вывести на экран все целые числа, хранившиеся на диске в типизированном файле по адресу: S:\file.tip Посчитать количество элементов и их сумму. Словесное описание Блок-схема Pascal Program read_file, t; Начало 7 name 6. 7. Спросить у пользователя путь к исходному файлу (name) Связь файловой переменной f1 с файлом name 8. Открытие файла для чтения. 9. До тех пор пока не кончился файл (текущий элемент не последний) считать из файла текущее значение в t. выводится на экран t увеличить Sum на t Связь f-1 с name Открытие f-1 для чтения Не конец f-1 да t f-1 t Sum:=Sum+t 10. Вывести Sum на экран Sum 11. Закрытие f-1 нет закрытие f-1 Uses Crt; Var f-1: file of integer; Sum, t:integer; Name: string; Begin Writeln(‘Укажите путь к исходному файлу’); Readln(name); Assign(f-1,name); Reset(f-1); Writeln(‘числа из файла:’); While not(eof(f-1)) do Begin Read(f-1,t); WriteLn(t); Sum:=Sum+t; End; WriteLn(‘Сумма чисел в файле’,Sum); Close(f-1); End. Конец Задача 3. Проверить существует ли на диске file файл (любой тип) по заданному адресу. Program Prox_file; 1. Спросить путь к файлу в name. начало 2. Связь файловой переменной Var f-3:(любой тип (текстовый, f-3 с файлом name. типизированный)) name 3. Отключить директива Name:string; компилятора контроль ввода Связь f-3 с name Begin 4. Открыть файл f-3 для чтения. Отключить 5. Проверить код ошибки (то есть Write(‘Имя файла???’); контроль ввода файла существует) ReadLn(name); Если код = 0, то ошибки открытие f-3 для чтения Assign(f-3, name); нет (т.е файл есть) {$ i - } иначе, то ошибка ввода (то Reset(f-3); да есть файла нет). нет Код ошибки IF IOReSULT = 0 then 6) Включить директиву =0 компилятора контроль ввода. begin WriteLn(‘Файл есть’); Файла нет Файл есть Colse (f-3); end Else Включить WriteLn(‘Файла нет’); контроль {$ i +} ввода End. конец Решение задач с использованием файла. 8 Задача. На основании заданного двумерного массива (с клавиатуры) сформировать одномерный массив по количеству элементов в каждой строке, которая больше первого значения вещественного типизированного файла (полный путь задает пользователь) одномерный массив сохранить в типизированном файле (в личном каталоге имя задает пользователь) вывести на экран. Входные: Mas – двумерный массив вещественных чисел N – (размерность) количество строк M – количество столбцов Path – полный путь типизированного исходного файла (символьная (string)) Name – имя типизированного файла с одномерным массивом Выходные: Od – одномерный массив (целый(byte)) размерностью n Промежуточное: X – номер текущей строки (byte) Y – номер текущего столбца (byte) f-1 – файловая переменная для файла по адресу путь (path) poisr – число из файла для сравнения S – количество найденных элементов в строке Patc_new – полный путь к новому файлу f-2 – файловая переменная для нового файла Z – число из нового файла 9 1.Заполнить массив. 2. Найти число для сравнения из файла: А) спросить имя файла Б) связь с файловой переменной В) открытие файла для чтения с циклической проверкой на существование Г) считывание из файла первого элемента poisk Д) закрытие f-1 3) Формирование Od 4) Сохранить в типизированный файл: А) вывести имя нового файла Б) формирования полного пути В) связь файловой переменной f-2 с файлом на диске path_new Г) открытие f-2 для записи без проверки на существование Д) запись элементов массива Od в f-2 (поэлементно) Е) закрыть f-2 5) вывод из f-2 {смотри задание 1} А) открытие f-2 для чтения Б) до тех пор, пока не кончился файл считывать элементы b = и вывод на экран Г) закрытие f-2 6) КОНЕЦ!!! Program Var mas:array[1..51..5] of Real S,M,N,:byte; Path,name:string; Od:array[1...5] of Real X,Y:integer; f-2,f-1:file of Real; path_new:string; z:Real; Begin Read(n); Read(m); For X:=1 to N do For Y:=1 to m do Read(Mas[X,Y]); Read(Path); Assign(f-1,Path); Reset(f-1); WriteLn(poisk); Close(f-1); For X:=1 to N do Begin For Y:=1 to M do If mas[X,Y]>poisk then S:=S+1; Od[X]:=S End; начало N,M X:=1,N Y:=1,M Mas X,Y Path Связь f-1 с path Открытие f-1 Poisk Закрыть f-1 X:=1,N S:=0 Y:=1,M Read(name); Path_new:=’z:\…’+name; Assign(f-2,path_new); For X:=1 to N do Write(OD[X]) Close(f-2); Reset(f-2); While not eof(f-2) do Begin Write(X);{запись} Write(Z);{вывод} Close(f-2); End; Mas X,Y>poisk S:=S+1 Od, X:=S name Path_new:=”z:\..”+name Связь f-2 c Path_new Связь f-2 для записи X:=1,N Od X f-2 10 Закрыть f-2 Открыть f-2 для чтения Не конец f-2 Z Z Закрыть f-2 Конец