Скачать презентацию Файловые типы Файловый тип предоставляет средства для Скачать презентацию Файловые типы Файловый тип предоставляет средства для

lec05_03_Faylovye_tipy.ppt

  • Количество слайдов: 50

Файловые типы • Файловый тип предоставляет средства для хранения информации на внешних носителях и Файловые типы • Файловый тип предоставляет средства для хранения информации на внешних носителях и работы с ней. • Файловый тип - последовательность компонент одного (базового) типа. • Базовый тип может быть любым, кроме файлового. Объявление типа type идентификатор типа =file of базовый тип; • Типизированный файл - файл с указанным базовым типом. • Текстовый файл (стандартный тип!) -состоит из символьных строк произвольной длины. Идентификатор типа текстового файла: Text. File 1

Работа с файлами в программе выполняется через файловые переменные - представителя внешнего файла в Работа с файлами в программе выполняется через файловые переменные - представителя внешнего файла в программе. Объявление файловой переменной: var список переменных: файловый тип; Примеры. var f. Text : Text. File; f 1, f 2 : file of Integer; При работе с файлами используется понятие текущего указателя файла - указывает на определенную компоненту файла. • Нумерация компонент ведется с 0. • Текущая компонента - компонента, соответствующая текущему указателю. • Операции чтения и записи выполняются с текущими 2 компонентами.

Операции над файлам 1. Установочные и завершающие. 2. Ввод и вывод. 3. Перемещения по Операции над файлам 1. Установочные и завершающие. 2. Ввод и вывод. 3. Перемещения по файлу 4. Специальные. Все эти операции осуществляются с помощью стандартных процедур и функций для работы с файлами. 3

Установочные и завершающие операции (для любых файлов) В описаниях процедур и функций F - Установочные и завершающие операции (для любых файлов) В описаниях процедур и функций F - файловая переменная. • procedure Assign. File(F, S: String); Процедура связывает файловую переменную F с некоторым внешним файлом, имя которого записано в переменной или константе S. Процедура должна быть выполнена до открытия файла. 4

 • procedure Close. File(F); Процедура закрывает внешний файл, с которым связана файловая переменная • procedure Close. File(F); Процедура закрывает внешний файл, с которым связана файловая переменная F. procedure Reset(F); Процедура открывает уже существующий внешний файл, с которым связана файловая переменная F. Текущий указатель устанавливается на начало файла. Текстовый файл, открытый процедурой Reset, может использоваться только для чтения. Типизированный файл может использоваться и для чтения, и для записи. 5

 • procedure Rewrite(F); Процедура открывает новый внешний файл, имя которого задано процедурой Assign. • procedure Rewrite(F); Процедура открывает новый внешний файл, имя которого задано процедурой Assign. File. Если такой файл уже существовал, то вместо него будет создан новый. Текущий указатель устанавливается на начало файла. Текстовый файл, открытый процедурой Rewrite, может использоваться только для записи. Типизированный файл может использоваться и для чтения, и для записи. 6

Перемещения по файлу • function EOF(F): Boolean; Функция принимает значение True , если текущий Перемещения по файлу • function EOF(F): Boolean; Функция принимает значение True , если текущий указатель находится за последней компонентой файла (в конце файла), и значение False - в противном случае. Специальные операции (для любых файлов) • procedure Erase(F); Процедура уничтожает файл, с которым связана файловая переменная F. Процедура может быть выполнена только после закрытия файла. 7

 • procedure Rename(F; S: String); Процедура переименовывает файл, с которым связана файловая переменная • procedure Rename(F; S: String); Процедура переименовывает файл, с которым связана файловая переменная F, новое имя - S. Процедура может быть выполнена только после закрытия файла. Операции над текстовыми файлами Установочные и завершающие. • procedure Append(F); Процедура открывает уже существующий внешний файл, с которым связана файловая переменная F, для записи. 8 Текущий указатель устанавливается в конец файла.

Перемещения по файлу • function EOLN(F): Boolean; Функция принимает значение True , если текущий Перемещения по файлу • function EOLN(F): Boolean; Функция принимает значение True , если текущий указатель установлен на признаке конца строки или в конце файла, и значение False - в противном случае. Функция используется при чтении из файла не строками, а отдельными символами или числами. • function Seek. EOF(F): Boolean; Функция пропускает пробелы, знаки табуляции и признаки конца строки и устанавливает текущий указатель или в конце файла, или на первом значимом символе. Функция принимает значение True , если текущий указатель установлен в конце файла, и значение False - 9 в противном случае.

 • function Seek. EOLN(F): Boolean; Функция пропускает пробелы и знаки табуляции и устанавливает • function Seek. EOLN(F): Boolean; Функция пропускает пробелы и знаки табуляции и устанавливает текущий указатель или в конце строки, или на первом значимом символе. Функция принимает значение True , если текущий указатель установлен в конце строки, и значение False - в противном случае. 10

Ввод и вывод. procedure Read(F; <список ввода>); <список ввода> - список переменных целого, вещественного, Ввод и вывод. procedure Read(F; <список ввода>); <список ввода> - список переменных целого, вещественного, символьного типа или String. Процедура читает значения переменных из файла, с которым связана F- файловая переменная. • procedure Read. Ln(F; <список ввода>); Процедура читает значения переменных из файла, с которым связана F- файловая переменная и выполняется переход к новой строке файла. Примечание. При вводе чисел разделителями могут быть один или несколько пробелов, знаки табуляции и признак конца строки. 11

 • procedure Write(F; <список вывода>); <список вывода> - список выражений целого, вещественного, символьного, • procedure Write(F; <список вывода>); <список вывода> - список выражений целого, вещественного, символьного, логического типа или String. Процедура выводит значения выражений в файл, с которым связана F- файловая переменная. • procedure Write. Ln(F; <список вывода>); Процедура выводит значения выражений в файл, с которым связана F- файловая переменная и выполняется запись в файл признака конца строки. 12

Обработка исключений При работе программы могут возникать различного рода ошибки, в этом случае программа Обработка исключений При работе программы могут возникать различного рода ошибки, в этом случае программа генерирует исключение и выполнение программы в данном блоке прекращается. Исключение- объект специального вида, характеризующею возникшую в программе исключительную ситуацию. Защита кода в блоках try … finally try {операторы способные привести к исключению } finally {операторы выполняемые в любом случае} 13 end;

Примеры работы с текстовыми файлами 1. Для открытия текстового файла «только для чтения» используются Примеры работы с текстовыми файлами 1. Для открытия текстового файла «только для чтения» используются следующая последовательность операторов: 2. var My. Text. File: Text. File; 3. begin 4. Assign. File(My. Text. File, 'My. Text. File. txt'); 5. Reset(My. Text. File); 6. try 7. {Работа с файлом} 8. finally 9. Close. File(My. Text. File) 10. end; 11. end; 14

2. Для создания нового файла используется следующая последовательность операторов: var My. Text. File: Text. 2. Для создания нового файла используется следующая последовательность операторов: var My. Text. File: Text. File; begin Assign. File(My. Text. File, 'My. Text. File. txt'); Rewrite(My. Text. File); try {Работа с файлом} finally Close. File(My. Text. File) end; 15

3. Для добавления данных в конец существующего файла используется следующая последовательность операторов: var My. 3. Для добавления данных в конец существующего файла используется следующая последовательность операторов: var My. Text. File: Text. File; begin Assign. File(My. Text. File, 'My. Text. File. txt'); Append(My. Text. File); try {Работа с файлом} finally Close. File(My. Text. File) end; 16

Пример 1: Необходимо создать файл и записать в него пять строк текста. var My. Пример 1: Необходимо создать файл и записать в него пять строк текста. var My. Text. File: Text. File; i: integer; begin Assign. File(My. Text. File, 'My. Text. File. txt'); Rewrite(My. Text. File); try for i: =1 to 5 do Writeln(My. Text. File, ' Это строка # ', i) finally Close. File(My. Text. File) end; 17

Пример 2: Необходимо считать строки из текстового файла в Listbox. var My. Text. File: Пример 2: Необходимо считать строки из текстового файла в Listbox. var My. Text. File: Text. File; s: string; begin Assign. File(My. Text. File, 'My. Text. File. txt'); Reset(My. Text. File); try While not Eof(My. Text. File) Do begin Readln(My. Text. File, s); List. Box 1. Items. Add(s) end; finally Close. File(My. Text. File) end; 18 end;

Работа с текстовыми файлами методами компонент Delphi. Допустимо применение специальных методов для работы с Работа с текстовыми файлами методами компонент Delphi. Допустимо применение специальных методов для работы с текстовыми файлами для типа TString: TList. Box. Items TCombo. Box. Items TMemo. Lines procedure Load. From. File(const File. Name: string); Процедура заполняет список TStrings из файла с внешним именем File. Name. Каждая строка файла добавляется отдельной строкой в список. Процедура Load. From. File использует метод Add для 19 добавления в список считанных строк.

procedure Save. To. File(const File. Name: string); Процедура записывает все строки из списка TStrings procedure Save. To. File(const File. Name: string); Процедура записывает все строки из списка TStrings в файл с внешним именем File. Name. Пример1. Запись списка в файл: List. Box 1. Items. Save. To. File(‘a: my 1. txt’); Пример2. Вывод из файла в список: List. Box 2. Items. Load. From. File(‘a: my 2. txt’); Стандартные диалоги для работы с файлами TOpen. Dialog, TSave. Dialog - диалоги для выбора файла в стандартном окне открытия/сохранения файлов 20

Основные свойства File. Name : String - имя файла, выбранного в окне диалога. Initial. Основные свойства File. Name : String - имя файла, выбранного в окне диалога. Initial. Dir : String - начальная папка, открытая в окне диалога. Default. Ext : String - расширение имени файла по умолчанию, добавляется к именам при сохранении файлов. Filter: String - строка, содержащая названия фильтров и сами фильтры для окон диалога. Создается через Filter Editor (достаточно выполнить двойной щелчок в графе Filter окна Object Inspector) 21

Пример. Можно задать набор фильтров: Filter. Name Filter текстовые *. txt все файлы *. Пример. Можно задать набор фильтров: Filter. Name Filter текстовые *. txt все файлы *. * Основной метод function Execute : Boolean; При вызове функции открывается окно диалога для выбора файла. Значение True возвращается, если после выбора файла пользователь щелкает кнопку Открыть (Сохранить). Значение False возвращается, если пользователь щелкает кнопку Отмена или нажимает клавишу ESC. 22

Примеры работы с файлами Пример 1. При нажатии кнопки открывается окно диалога. В нем Примеры работы с файлами Пример 1. При нажатии кнопки открывается окно диалога. В нем можно выбрать текстовый файл, который будет удален. Для решения задачи расположить в форме компоненты: TButton, TOpen. Dialog. Установить: Button 1 Caption Удаление файла. Open. Dialog 1 Filter: Filter. Name текстовые файлы Filter *. txt procedure TForm 1. Button 1 Click(Sender: TObject); var F: Text. File; {файловая переменная} 23

begin Open. Dialog 1. Title : = 'Удаление файла'; {Установили заголовок окна} if Open. begin Open. Dialog 1. Title : = 'Удаление файла'; {Установили заголовок окна} if Open. Dialog 1. Execute then begin Assign. File(F, Open. Dialog 1. File. Name); {файл из окна диалога} Reset(F); {открытие файла} ……. . . {обработка файла} Close. File(F); {закрытие файла} Erase(F); {удаление файла} end; 24

Пример 2. При нажатии кнопки TButton открывается окно диалога. В нем нужно выбрать файл, Пример 2. При нажатии кнопки TButton открывается окно диалога. В нем нужно выбрать файл, первая строка которого будет показана в компоненте TEdit. Для решения задачи расположить в форме компоненты: TButton, TEdit, TOpen. Dialog. Установить: Button 1 Caption Строка из файла Open. Dialog 1 Filter: Filter. Name текстовые файлы Filter *. txt procedure TForm 1. Button 1 Click(Sender: TObject); var F: Text. File; {файловая переменная} 25 S: String;

begin if Open. Dialog 1. Execute then begin Assign. File(F, Open. Dialog 1. File. begin if Open. Dialog 1. Execute then begin Assign. File(F, Open. Dialog 1. File. Name); Reset(F); Readln(F, S); {чтение строки из файла} Edit 1. Text : = S; { размещение в Edit 1} Close. File(F); end; 26

Пример 3. При нажатии кнопки TButton открывается окно диалога. В нем нужно выбрать файл, Пример 3. При нажатии кнопки TButton открывается окно диалога. В нем нужно выбрать файл, все строки которого будут показаны в компоненте TList. Box. Для решения задачи расположить в форме компоненты: TButton, TList. Box, TOpen. Dialog. Установить: Button 1 Caption Загрузка файла procedure TForm 1. Button 1 Click(Sender: TObject); begin if Open. Dialog 1. Execute then List. Box 1. Items. Load. From. File(Open. Dialog 1. File. Name); {загрузка из файла} end; 27

Пример 4. При нажатии кнопки TButton открывается окно диалога. В нем нужно выбрать файл, Пример 4. При нажатии кнопки TButton открывается окно диалога. В нем нужно выбрать файл, все значимые строки которого будут показаны в компоненте TList. Box. Для решения задачи расположить в форме компоненты: TButton, TList. Box, TOpen. Dialog. Установить: Button 1 Caption Загрузка файла. procedure TForm 1. Button 1 Click(Sender: TObject); var F: Text. File; S: String; 28

begin if Open. Dialog 1. Execute then begin Assign. File(F, Open. Dialog 1. File. begin if Open. Dialog 1. Execute then begin Assign. File(F, Open. Dialog 1. File. Name); Reset(F); while not Seek. Eof(F) do begin Readln(F, S); {чтение строки из файла} List. Box 1. Items. Add(S); { размещение в List. Box 1} end; Close. File(F); end; 29

Пример 5. При нажатии кнопки TButton по очереди открываются окна диалога. В них нужно Пример 5. При нажатии кнопки TButton по очереди открываются окна диалога. В них нужно выбрать исходный файл и результирующий файл. В последний будет посимвольно переписан исходный файл. Для решения задачи расположить на форме компоненты: TButton, TOpen. Dialog, TSave. Dialog. Установить: Button 1 Caption Перезапись файла. procedure TForm 1. Button 1 Click(Sender: TObject); var F 1, F 2: Text. File; ch: Char; begin 30 if Open. Dialog 1. Execute then

 begin Assign. File(F 1, Open. Dialog 1. File. Name); Reset(F 1); {открыт файл begin Assign. File(F 1, Open. Dialog 1. File. Name); Reset(F 1); {открыт файл для чтения} if Save. Dialog 1. Execute then begin Assign. File(F 2, Save. Dialog 1. Filename); Rewrite(F 2); {открыт файл для записи} while not Eof(F 1) do begin Read(F 1, Ch); {считали символ} Write(F 2, Ch); {записали символ} end; Close. File(F 2); end; Close. File(F 1); end; 31

Типизированные файлы Файлы с компонентами определенного, базового типа. Примеры: type vector=array[1. . 20] of Типизированные файлы Файлы с компонентами определенного, базового типа. Примеры: type vector=array[1. . 20] of double; complex=record x, y: double; end; var fv: file of vector; fbyte: file of byte; fcmp: file of complex; 32

Операции над типизированными файлами Перемещения по файлу function File. Size(F): Long. Int; Функция возвращает Операции над типизированными файлами Перемещения по файлу function File. Size(F): Long. Int; Функция возвращает количество компонент файла (размер файла). function File. Pos(F): Long. Int; Функция возвращает значение текущего указателя файла (номер текущей компоненты). procedure Seek (F; N: Long. Int); Процедура устанавливает текущий указатель на компоненте с номером N. Пример: установка указателя на последней компоненте файла 33 Seek(F, File. Size(F) -1); {учитывается нумерация с 0}

Специальные операции Для типизированных файлов возможно удаление части файла с помощью стандартной процедуры: procedure Специальные операции Для типизированных файлов возможно удаление части файла с помощью стандартной процедуры: procedure Truncate(F); Процедура удаляет часть файла, с текущей компоненты и до конца. Пример: удаление последней компоненты файла Seek(F, File. Size(F) -1); Truncate(F); Ввод и вывод Для типизированных файлов эти операции осуществляются с помощью уже известных стандартных процедур, видоизмененных для работы с файлами. 34

procedure Read(F; <список ввода>); <список ввода> - список переменных базового типа. Процедура читает значения procedure Read(F; <список ввода>); <список ввода> - список переменных базового типа. Процедура читает значения переменных из файла, с которым связана F- файловая переменная. procedure Write(F; <список вывода>); <список вывода> - список выражений базового типа. Процедура выводит значения выражений в файл, с которым связана F- файловая переменная. Для выражений нельзя указывать формат вывода, допустимый при работе с текстовыми файлами. 35

function IOResult: Integer; Функция возвращает число 0, если последняя операция ввода/вывода завершилась успешно, другое function IOResult: Integer; Функция возвращает число 0, если последняя операция ввода/вывода завершилась успешно, другое число в противном случае. При использовании IOResult необходимо установить директиву игнорирования ошибок ввода/вывода (I/Ochecking) {$I-} а затем вновь ее переключить {$I+} Пример. procedure …………. ; var F: file of Byte; 36

begin if Open. Dialog 1. Execute then begin Assign. File(F, Open. Dialog 1. File. begin if Open. Dialog 1. Execute then begin Assign. File(F, Open. Dialog 1. File. Name); {$I-} Reset(F); {$I+} if IOResult = 0 then Message. Dlg(’Размер файла в байтах: ' + Int. To. Str(File. Size(F)), mt. Information, [mb. Ok], 0) else Message. Dlg(’Ошибка', mt. Warning, [mb. Ok], 0); end; 37 end;

Создание окон с сообщениями function Message. Dlg(Msg: String; AType: TMsg. Dlg. Type; AButtons: TMsg. Создание окон с сообщениями function Message. Dlg(Msg: String; AType: TMsg. Dlg. Type; AButtons: TMsg. Dlg. Buttons; Help. Ctx: Longint): Word; В окне сообщения печатается значение параметра Msg (строка текста). AType указывает предназначение окна. AButtons определяет набор кнопок в окне (функция вернет значение нажатой!). Help. Ctx используется для подключения справки (нажатие F 1 или кнопки Help), обычно для окон сообщений кнопка Help не используется и параметр равен 0. 38

Возможные значения типа TMsg. Dlg. Type: Mt. Warning окно предупреждения с восклицательным знаком. mt. Возможные значения типа TMsg. Dlg. Type: Mt. Warning окно предупреждения с восклицательным знаком. mt. Error окно сообщения об ошибке со знаком stop. mt. Information окно с символом "i". mt. Confirmation окно подтверждения с вопросом. Mt. Custom окно без рисунков. 39

Возможные значения типа TMsg. Dlg. Buttons: TMsg. Dlg. Buttons = set of TMsg. Dlg. Возможные значения типа TMsg. Dlg. Buttons: TMsg. Dlg. Buttons = set of TMsg. Dlg. Btn; TMsg. Dlg. Btn = (mb. Yes, mb. No, mb. OK, mb. Cancel, mb. Abort, mb. Retry, mb. Ignore, mb. All, mb. Help); Таким образом, для окна можно выбрать любое подмножество: [mb. OK] - окно с кнопкой OK. [mb. Yes, mb. No] - окно с кнопками Yes и No. Возможное возвращаемое функцией значение определяется тем, какая кнопка в окне была нажата. Примечание. В зависимости от ситуации можно использовать Message. Dlg и как функцию, и как процедуру. 40

Пример. Из текстового файла считать попарно вещественные числа и записать их в результирующий файл Пример. Из текстового файла считать попарно вещественные числа и записать их в результирующий файл комплексных чисел (с расширением dat). Для решения задачи расположить в форме компоненты: TButton, TOpen. Dialog, TSave. Dialog. Установить: Button 1 Caption Перезапись файла procedure TForm 1. Button 1 Click(Sender: TObject); type complex=record x, y: double; end; var Fcmp: file of complex; Ft: Text. File; C: Complex; 41

begin if Open. Dialog 1. Execute then begin Assign. File(Ft, Open. Dialog 1. File. begin if Open. Dialog 1. Execute then begin Assign. File(Ft, Open. Dialog 1. File. Name); Reset(Ft); {открыт файл для чтения} if Save. Dialog 1. Execute then begin Assign. File(Fcmp, Save. Dialog 1. Filename); Rewrite(Fcmp); {открыт файл для записи} while not Eof(Ft) do begin Read(Ft, C. x); {считали Re} 42

if not Eof(Ft) then Read(Ft, C. y) {считали Im} else C. y: =0; write(Fcmp, if not Eof(Ft) then Read(Ft, C. y) {считали Im} else C. y: =0; write(Fcmp, C); {записали компл. число} end; Close. File(Fcmp); end; Close. File(Ft); end; 43

Нетипизированные, или бестиповые файлы Бестиповые файлы применяются для быстрой работы с данными на физическом Нетипизированные, или бестиповые файлы Бестиповые файлы применяются для быстрой работы с данными на физическом уровне в соответствии с их внутренним форматом. Объявление файловой переменной: var f: file; Процедуры и функции для работы с бестиповыми файлами procedure Reset(F, Size); Процедура открывает уже существующий внешний файл, с которым связана файловая переменная F. Текущий указатель устанавливается на начало файла. Параметр Size определяет размер пересылаемого элемента информации в байтах (по умолчанию Size 44 =128)

procedure Rewrite(F, Size); Процедура открывает новый внешний файл, имя которого задано процедурой Аssign. File. procedure Rewrite(F, Size); Процедура открывает новый внешний файл, имя которого задано процедурой Аssign. File. Если такой файл уже существовал, то вместо него будет создан новый. Текущий указатель устанавливается на начало файла. Параметр Size определяет размер пересылаемого элемента информации в байтах (по умолчанию Size =128) Допускается применение процедур и функций, используемых для типизированных файлов: function File. Size(F): Long. Int; function File. Pos(F): Long. Int; procedure Seek (F; N: Long. Int); 45 procedure Truncate(F);

Ввод и вывод. Для организации ввода и вывода используются специальные процедуры: procedure Block. Read(F, Ввод и вывод. Для организации ввода и вывода используются специальные процедуры: procedure Block. Read(F, Buf, N, Result); Процедура читает из файла, с которым связана F- файловая переменная, N или менее (если достигнут конец файла) компонент и помещает их в переменную Buf. Необязательный параметр Result возвращает фактическое количество считанных компонент. Максимальный размер переносимой информации= N* Size 46

procedure Block. Write(F, Buf, N, Result); Процедура выводит в файл, с которым связана F- procedure Block. Write(F, Buf, N, Result); Процедура выводит в файл, с которым связана F- файловая переменная, N или менее (если заполнится диск) компонент из переменной Buf. Необязательный параметр Result возвращает фактическое количество записанных компонент. Максимальный размер переносимой информации= N* Size Пример - копирование бестипового файла. При открытии надо указать размер компоненты в байтах. Для считывания всего файла его размер должен быть кратен размеру компоненты. Этому требованию всегда удовлетворяет Size=1 47

Чтение идет сразу по несколько компонент. Наиболее удобный размер информации - 512 байт (размер Чтение идет сразу по несколько компонент. Наиболее удобный размер информации - 512 байт (размер физического сектора на диске). Следовательно, при Size=1, N=512. procedure …………. ; const Size=1; Buf. Size=512; var F 1, F 2: File; Read. Result, Write. Result: Word; Buf: array[1. . Buf. Size] of char; begin if Open. Dialog 1. Execute then begin Assign. File(F 1, Open. Dialog 1. File. Name); Reset(F 1, Size); if Save. Dialog 1. Execute then 48

 begin Assign. File(F 2, Save. Dialog 1. Filename); Rewrite(F 2, Size); repeat Block. begin Assign. File(F 2, Save. Dialog 1. Filename); Rewrite(F 2, Size); repeat Block. Read(F 1, Buf. Size, Read. Result); Block. Write(F 2, Buf, Read. Result, Write. Result); {сколько удалось считать из F 1, столько и записываем в F 2} until (Read. Result=0) or (Read. Result <> Write. Result); if Read. Result=0 then Message. Dlg(‘успешное заверщение’, mt. Information, [mb. OK], 0) else Message. Dlg(‘диск переполнен’, mt. Error, [mb. OK], 0); 49 Close. File(F 2);

 end; Close. File(F 1); end; 50 end; Close. File(F 1); end; 50