Разделы презентаций


Файлы

Содержание

Общие сведения о файлах и файловой системеФайлы языка ПаскальТекстовые файлыТипизированные файлыПримеры решения задач обработки файловСодержание

Слайды и текст этой презентации

Слайд 1Файлы
Тема 8.

Файлы Тема 8.

Слайд 2Общие сведения о файлах и файловой системе
Файлы языка Паскаль
Текстовые файлы
Типизированные

файлы
Примеры решения задач обработки файлов
Содержание

Общие сведения о файлах и файловой системеФайлы языка ПаскальТекстовые файлыТипизированные файлыПримеры решения задач обработки файловСодержание

Слайд 31. Общие сведения о файлах и файловой системе

1. Общие сведения о файлах и файловой системе

Слайд 4Файлом называют именованную последовательность элементов данных (компонент файла), расположенных, как

правило, во внешней памяти:
на дискетах,
винчестере,
CD или других устройствах

хранения информации,
также устройствах ввода-вывода.
В файле может храниться текст, программа, числовые данные, графическое изображение и т.д.

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

Определение

Файлом называют именованную последовательность элементов данных (компонент файла), расположенных, как правило, во внешней памяти: на дискетах,винчестере, CD

Слайд 5Файл – набор данных на диске, имеющий имя.
Имя файла:

255 символов, нельзя \ / : * ? ”

> |

персональное имя

расширение
(«фамилия»)

Файл – набор данных на диске, имеющий имя.Имя файла:   255 символов, нельзя \ / :

Слайд 6Для того чтобы операционная система (ОС) могла размещать файлы на

дисках, последние должны быть специальным образом размечены (форматированы). Разметка осуществляется

средствами используемой ОС.
Как правило, диски хранят большое количество файлов (количество их на жестких дисках обычно исчисляется тысячами). Для удобства и ускорения работы с таким количеством файлов применяется та или иная файловая система.
Для того чтобы операционная система (ОС) могла размещать файлы на дисках, последние должны быть специальным образом размечены

Слайд 7Файловая система
одноуровневая
vasya.txt 360 байт

12.03.2007 25
Примеры.doc

13 Кб 25.04.2007 230
Я.bmp 1,28 Мб 13.09.2006 1235


номер начального блока (кластера) на диске

размер

дата изменения

самый простой вариант

все файлы «в куче», сложно разбираться
ограниченный объем каталога (512 записей)

Файловая система – это порядок размещения файлов на диске.

Файловая системаодноуровневаяvasya.txt      360 байт  	12.03.2007      25	Примеры.doc

Слайд 8Файловая система
многоуровневая (дерево)
Диск C:
autoexec.bat
Документы
План.doc
Отчет.doc
Фото

Видео


Кузя.avi
Винни-Пух.wmv
2006
Я.jpg
Шарик.jpg
2007
Ку.jpg
Зя.jpg
Корневой каталог

– главный каталог диска.

Вложенная папка (подкаталог) – это папка, расположенная внутри другой папки.

Папка (каталог) – объединяет файлы и вложенные папки

файлы

файлы

Файлы в корневом каталоге

папка

Файловая системамногоуровневая (дерево)Диск C: autoexec.batДокументы  План.doc Отчет.docФото  Видео  Кузя.avi Винни-Пух.wmv2006 Я.jpg Шарик.jpg2007 Ку.jpg Зя.jpgКорневой

Слайд 9Файловая система
многоуровневая (дерево)
Рабочая папка (текущий каталог) – папка, с которой

в данный момент работает пользователь.

Файловая системамногоуровневая (дерево)Рабочая папка (текущий каталог) – папка, с которой в данный момент работает пользователь.

Слайд 10Адреса файлов
C:\Фото\2007\Ку.jpg



диск
папки
имя файла
\\SERVER\Видео\2007\Зя.avi

имя компьютера
C:\SERVER\Видео\2007\Зя.avi
A:\autoexec.bat
\\work3\Игры\Hover\hover.exe
D:\Windows\Temp\Справка.txt
E:\Реферат.doc
Сетевой адрес:
Примеры:
Полный адрес файла = путь +

имя файла


Путь к файлу – это перечисление папок (каталогов),

в которых он находится, сверху вниз (начиная с диска).
Адреса файловC:\Фото\2007\Ку.jpgдискпапкиимя файла\\SERVER\Видео\2007\Зя.aviимя компьютераC:\SERVER\Видео\2007\Зя.aviA:\autoexec.bat\\work3\Игры\Hover\hover.exeD:\Windows\Temp\Справка.txtE:\Реферат.docСетевой адрес:Примеры:Полный адрес файла = путь + имя файлаПуть к файлу  – это

Слайд 11Маски
Маска – это обозначение для группы файлов.
* – любое количество

любых символов
? – один любой символ
Примеры:
*.*
*.doc
все файлы
все файлы с расширением

.doc

a*.?

имя файла начинается с «a», расширение из 1 символа

*x*.??*

имя файла содержит «x», расширение не менее 2 символов

*z.a?

имя файла заканчивается на «z», расширение начинается «a», всего 2 символа

МаскиМаска – это обозначение для группы файлов.	* – любое количество любых символов	? – один любой символПримеры:*.**.docвсе файлывсе

Слайд 12Папки Windows
сетевые ресурсы
сетевой диск
флэш-диск
CD (DVD)

Папки Windowsсетевые ресурсысетевой дискфлэш-дискCD (DVD)

Слайд 13Логические диски в Windows
A:, B: дискеты




C: винчестер, загрузочный диск




D: …

Z: винчестер, CD, DVD, флэш-диск,

сетевой диск (X: \\SERVER\Игры)

дисковод



Логические диски в WindowsA:, B: дискетыC: винчестер, загрузочный дискD: … Z: винчестер, CD, DVD, флэш-диск,

Слайд 142. Файлы языка Паскаль

2. Файлы языка Паскаль

Слайд 15В Паскале файл определяется как последовательность компонентов, относящихся к одному

типу:
файл записей,
файл целых чисел,
файл строк
и т.

п.
Особенностью файлов по сравнению с другими структурными типами данных является то, что в любой момент доступен только один компонент.
Количество компонентов файла заранее не определяется.
Максимальный размер файла, размещенного во внешней памяти, ограничивается лишь техническими возможностями вычислительной системы.
В Паскале файл определяется как последовательность компонентов, относящихся к одному типу: файл записей, файл целых чисел, файл

Слайд 16Файлы полезны, если объем входных данных превосходит посильный при ручном

вводе. (Крайним является случай, когда входные или выходные данные заведомо

не могут поместиться в оперативной памяти.)
Файлы нужны, если приходится многократно вводить одну и ту же информацию, с минимальными изменениями или вовсе без изменений (например, при отладке программы).
Файлы необходимы, если нужно сохранять информацию о результатах работы программы, полученных при вводе различных входных данных (то есть: при поиске ошибок в программе).

Когда нужно использовать файлы

Файлы полезны, если объем входных данных превосходит посильный при ручном вводе. (Крайним является случай, когда входные или

Слайд 17Разновидности файлов
Файлы
только текст без оформления, не содержат управляющих символов (с кодами

< 32)
ACSII (1 байт на символ)
UNICODE (2 байта на символ)
*.txt,

*.log,
*.htm, *.html

могут содержать любые символы кодовой таблицы

*.doc, *.exe,
*.bmp, *.jpg,
*.wav, *.mp3,
*.avi, *.mpg

Текстовые

Бинарные

Папки (каталоги)

возможно создавать, просматривать и редактировать "вручную" - в любом текстовом редакторе; при считывании данных не требуется заботиться об преобразовании

информация записывается по байтам и потому не доступна для просмотра или редактирования в удобных для человека текстовых редакторах; зато такие файлы более компактны, чем текстовые

Разновидности файловФайлытолько текст без оформления, не содержат управляющих символов (с кодами < 32)ACSII (1 байт на символ)UNICODE

Слайд 18Бинарные файлы бывают двух видов
типизированные,
нетипизированные.

К типизированным относятся файлы, содержащие

данные строго определенного типа. Обычно такие файлы представляются собой наборы

записей.
К нетипизированным относятся двоичные файлы, которые могут содержать любые совокупности байтов данных без привязки к какому-нибудь одному типу.

Разновидности файлов

Бинарные файлы бывают двух видовтипизированные, нетипизированные.К типизированным относятся файлы, содержащие данные строго определенного типа. Обычно такие файлы

Слайд 19Логические устройства используют для организации обмена информацией с основными устройствами

ввода-вывода, такими как дисплей, клавиатура и т.п.
Логические устройства имеют

стандартные имена, например:
CON – консоль: при выводе данных соответствует экрану, при вводе – клавиатуре;
PRN – принтер;
NUL – «пустое устройство», обычно заменяет устройство вывода отладочной информации после завершения отладки программы.

Логические устройства

Логические устройства используют для организации обмена информацией с основными устройствами ввода-вывода, такими как дисплей, клавиатура и т.п.

Слайд 20В отличие от дисковых файлов с логическими устройствами операции ввода-вывода

осуществляют только последовательно, так как
при выполнении операций вывода данные

передаются на устройство покомпонентно,
а при выполнении операций ввода – покомпонентно запрашиваются с него.

Логические устройства

В отличие от дисковых файлов с логическими устройствами операции ввода-вывода осуществляют только последовательно, так как при выполнении

Слайд 21Физически операции ввода-вывода с файлами выполняются с использованием специального буфера.
Так,

выводимые записи вначале помещаются в буфер, откуда переписываются в файл

по мере заполнения буфера, а вводимые читаются из буфера, куда они были предварительно помещены.

Использование буферов позволяет существенно повысить скорость выполнения операций ввода-вывода с файлом, так как на одну операцию ввода-вывода с дисководом, которая выполняется сравнительно медленно, обычно приходятся десятки операций чтения из буфера.

Организация файла

Физически операции ввода-вывода с файлами выполняются с использованием специального буфера.Так, выводимые записи вначале помещаются в буфер, откуда

Слайд 22Для дисковых файлов принципиально возможны
не только последовательный,
но и произвольный

доступ, при котором чтение информации осуществляется из указанного места.
Организация файла

Для дисковых файлов принципиально возможныне только последовательный, но и произвольный доступ, при котором чтение информации осуществляется из

Слайд 23Доступ к компоненту файла осуществляется через указатель файла.
При выполнении операции

чтения или записи указатель автоматически перемещается на следующий компонент:
Организация файла

Доступ к компоненту файла осуществляется через указатель файла.При выполнении операции чтения или записи указатель автоматически перемещается на

Слайд 24Для идентификации файлов используют файловые переменные.

Файловая переменная не может

быть задана константой.

В зависимости от способа представления информации различают

три типа файлов, соответственно различаются и способы описания файловых переменных

Описание файлов

Для идентификации файлов используют файловые переменные. Файловая переменная не может быть задана константой. В зависимости от способа

Слайд 25Файловая переменная типизированного файла описывается как:
Описание типизированных файлов
Туре

переменной> = file оf ;
где - любой

тип данных, кроме файлового.

Типизированные файлы используют, когда обрабатывают хранящуюся в файле последовательность компонентов одинаковой длины (чисел, записей и т.п.).

Файловая переменная типизированного файла описывается как:Описание типизированных файловТуре = 		file оf ;где - любой тип данных, кроме

Слайд 26Файловая переменная текстового файла описывается как:
Описание текстовых файлов
Туре

переменной> = text;
Текстовые файлы используют для работы с текстами, представленными

в виде строк переменной длины.
Файловая переменная текстового файла описывается как:Описание текстовых файловТуре = 		text;Текстовые файлы используют для работы с текстами, представленными

Слайд 27Файловая переменная нетипизированного файла описывается как:
Описание нетипизированных файлов
Туре

переменной> = file;
Нетипизированные файлы применяют для организации скоростного обмена между

внешней и оперативной памятью физическими записями указанной длины без преобразования и обработки.
Файловая переменная нетипизированного файла описывается как:Описание нетипизированных файловТуре = 		file;Нетипизированные файлы применяют для организации скоростного обмена между

Слайд 28Как и любая переменная языка Паскаль, файловая переменная может быть

описана в инструкции объявления переменных.
Например:
Описание файлов
Var F1: file of

real;
F2:file;
F3: text;

или с предварительным объявлением типа:

Туре FF = file of integer;
Var F1: FF;

Как и любая переменная языка Паскаль, файловая переменная может быть описана в инструкции объявления переменных. Например:Описание файловVar

Слайд 29При необходимости файловую переменную допускается передавать в подпрограмму через параметры.


Однако следует помнить, что с этой целью можно использовать только

параметры-переменные.
Например:

Описание файлов

Туре FF = file of integer;

Procedure Print (Var F1:FF);

При необходимости файловую переменную допускается передавать в подпрограмму через параметры. Однако следует помнить, что с этой целью

Слайд 30Работа с файлом включает:
инициализацию файловой переменной – установление связи файловой

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

ввода/вывода;
обработку компонентов файла – выполнение операций ввода-вывода;
закрытие файла (при повторном открытии файл закрывается автоматически).
Работа с файлом включает:инициализацию файловой переменной – установление связи файловой переменной с файлом;открытие файла – подготовку файла

Слайд 31Связь между физическим устройством (дисководом или внешним устройством) и файловой

переменной устанавливается специальной процедурой.
Процедура
Инициализация файловой переменной
инициализирует файловую переменную f,

связывая ее с файлом или логическим устройством, определенным строкой st.

Если файл находится в текущем каталоге, то достаточно указать имя файла и его расширение. В противном случае необходимо указать полное имя файла

Assign (Var f; st:string)

Связь между физическим устройством (дисководом или внешним устройством) и файловой переменной устанавливается специальной процедурой.Процедура Инициализация файловой переменнойинициализирует

Слайд 32Например:
Инициализация файловой переменной
Туре F = text;
Var f1, f2, f3: F;
...
Assign

(fl, 'T1.dat'); {связывание файловой переменной с файлом в

текущем каталоге}
Assign (f2, 'd:\iva\a.dat'): {связывание файловой переменной с файлом в указанном каталоге}
Assign(f3, 'CON'); {связывание файловой переменной с консолью}
Например:Инициализация файловой переменнойТуре F = text;Var f1, f2, f3: F;...Assign (fl, 'T1.dat'); 	  {связывание файловой 			переменной

Слайд 33Открытие файла предполагает указание направления передачи данных. В Паскале файл

можно открыть
для чтения
и для записи.

Текстовый файл можно открыть

также для добавления строк.

В типизированный файл, открытый для чтения, можно дописывать новые записи или писать в нем новые записи на место старых.

Открытие файла

Открытие файла предполагает указание направления передачи данных. В Паскале файл можно открыть для чтения и для записи.Текстовый

Слайд 34Процедура
Открытие файла
открывает файл, определенный файловой переменной f для чтения.
При

выполнении этой процедуры указатель файла устанавливается на первый компонент файла

(физически первый блок записей считывается в буфер).

Логическое устройство в этом случае готовится к выполнению операций ввода.

ReSet(Var f)

ПроцедураОткрытие файлаоткрывает файл, определенный файловой переменной f для чтения. При выполнении этой процедуры указатель файла устанавливается на

Слайд 35© С.В.Кухта, 2009
При открытии для чтения несуществующего файла регистрируется ошибка

выполнения, а функция lOResult типа Word возвращает значение, отличное от

0 (см. далее описание функции).
Отключив контроль операций ввода-вывода и используя функцию lOResult, можно организовать проверку наличия файла с указанным именем на диске:

Открытие файла

Var f: file of char;
Begin
Assign(f, 'a.dat'); {инициализация файловой переменной}
{$ I- } {отмена контроля ошибок ввода-вывода}
ReSet (f); {открытие файла для чтения}
{$ I+ } {включение контроля ошибок}
if IOResult <>0 then
WriteLn ('Файл не существует');
else WriteLn('Файл существует');

© С.В.Кухта, 2009При открытии для чтения несуществующего файла регистрируется ошибка выполнения, а функция lOResult типа Word возвращает

Слайд 36Процедура
Открытие файла
открывает файл, определенный файловой переменной f, для записи.
При

открытии для записи существующего файла старый файл уничтожается без предварительной

проверки и выдачи предупреждения пользователю.
Если файла с таким именем не существовало, то он создается и подготавливается к записи (физически – очищается буфер).

Логическое устройство при этом подготавливается к приему информации.

ReWrite(Var f)

ПроцедураОткрытие файлаоткрывает файл, определенный файловой переменной f, для записи. При открытии для записи существующего файла старый файл

Слайд 37Процедура
Открытие файла
открывает текстовый файл, определенный файловой переменной f, для добавления

строк.

При открытии для добавления строк указатель файла устанавливается на конец

файла, и, соответственно, все строки, выводимые в файл, дописываются к уже существующему файлу.

AppEnd(Var f: text)

ПроцедураОткрытие файлаоткрывает текстовый файл, определенный файловой переменной f, для добавления строк.При открытии для добавления строк указатель файла

Слайд 38Любой программе без объявления, инициализации файловой переменной и открытия доступны

два файла со стандартными файловыми переменными:
INPUT – чтение со стандартного

устройства ввода;
OUTPUT – вывод на стандартное устройство вывода.
Это текстовые файлы, используемые для выполнения элементарных операций ввода-вывода.
В операторах ввода-вывода файловые переменные этих файлов обычно не указывают. Остальные файлы становятся доступными только после связывания файловой переменной с файлом или логическим устройством и открытия файла.
Стандартным устройством ввода по умолчанию является клавиатура.
Стандартным устройством вывода – экран дисплея.

Открытие файла

Любой программе без объявления, инициализации файловой переменной и открытия доступны два файла со стандартными файловыми переменными:INPUT –

Слайд 39На базе этих операций выполняют более сложные операции:
создание файла –

занесение в файл требуемых записей;
модификация файла – изменение всех или

нескольких записей, добавление и удаление записей;
поиск нужной информации в файле.

Выполнение этих операций осуществляется по-своему для каждого типа файла (см. параграфы далее).

Обработка компонентов файла

На базе этих операций выполняют более сложные операции:создание файла – занесение в файл требуемых записей;модификация файла –

Слайд 40Закрытие файла, открытого для записи или чтения, осуществляется процедурой

Закрытие файла
Close(Var

f)
При этом вновь созданный файл регистрируется в каталоге.
!
Поскольку любое

обращение к диску осуществляется через буферную память, часть данных, выводимых в файл, может остаться в буфере. Процедура закрытия файла обеспечивает вывод оставшихся компонентов из буфера в файл.
Связь файловой переменной с файлом при закрытии сохраняется, и при повторном использовании этого же файла процедуру Assign применять еще раз не требуется.
Закрытие файла, открытого для записи или чтения, осуществляется процедуройЗакрытие файлаClose(Var f)При этом вновь созданный файл регистрируется в

Слайд 41Принцип сэндвича

I этап. открыть файл :
связать переменную f с файлом
открыть

файл (сделать его активным, приготовить к работе)

assign(f, 'qq.txt');
reset(f); {для чтения}
rewrite(f);

{для записи}

II этап: работа с файлом

Переменная типа «текстовый файл»: var f: text;

III этап: закрыть файл

close(f);


read ( f, n ); { ввести значение n }

write ( f, n ); { записать значение n }
writeln ( f, n );{c переходом на нов.строку }

Принцип сэндвичаI этап. открыть файл :связать переменную f с файломоткрыть файл (сделать его  активным, приготовить к

Слайд 42Работа с файлами
Особенности:
имя файла упоминается только в команде assign, обращение

к файлу идет через файловую переменную
файл, который открывается на чтение,

должен существовать
если файл, который открывается на запись, существует, старое содержимое уничтожается
данные записываются в файл в текстовом виде
при завершении программы все файлы закрываются автоматически
после закрытия файла переменную f можно использовать еще раз для работы с другим файлом
Работа с файламиОсобенности:имя файла упоминается только в команде assign, обращение к файлу идет через файловую переменнуюфайл, который

Слайд 43Для взаимодействия с файловой системой определены стандартные процедуры и функции,

которые применимы к файлам любых типов.
Стандартные процедуры и функции обслуживания

файлов
Для взаимодействия с файловой системой определены стандартные процедуры и функции, которые применимы к файлам любых типов.Стандартные процедуры

Слайд 44Процедура
Стандартные процедуры и функции обслуживания файлов
осуществляет переименование файла, определенного файловой

переменной f. Новое имя файла задается параметром name.

Если в

процессе работы программы требуется переименовать файл, открытый для чтения или записи, необходимо предварительно закрыть этот файл.

При совпадении нового имени файла с каким-либо уже существующим выдается сообщение об ошибке.

ReName(Var f; name: string)

ПроцедураСтандартные процедуры и функции обслуживания файловосуществляет переименование файла, определенного файловой переменной f. Новое имя файла задается параметром

Слайд 45Процедура
Стандартные процедуры и функции обслуживания файлов
осуществляет удаление созданного или находящегося

в процессе формирования файла.

Перед уничтожением файл должен быть закрыт,

так как разрешается удалять только закрытые файлы.

Erase(Var f)

ПроцедураСтандартные процедуры и функции обслуживания файловосуществляет удаление созданного или находящегося в процессе формирования файла. Перед уничтожением файл

Слайд 46Функция
Стандартные процедуры и функции обслуживания файлов
определяет конец файла.
Как было

отмечено выше, размер файла при его создании не фиксируется. Поэтому

в процессе работы требуется проверка достижения конца файла.
Функция принимает значение TRUE, если указатель стоит в конце файла (после последней записи). При этом, если производится чтение, то это означает, что файл исчерпан, а если идет запись, то новая запись дописывается в конец файла.
Функция принимает значение FALSE, если конец файла еще не достигнут.

EOF(Var f):boolean

ФункцияСтандартные процедуры и функции обслуживания файловопределяет конец файла. Как было отмечено выше, размер файла при его создании

Слайд 47Функция
Стандартные процедуры и функции обслуживания файлов
возвращает код правильности выполнения операций

ввода/вывода.
Если ошибок не зафиксировано, то функция возвращает 0.

Информация

об ошибках может быть получена и обработана в режиме компилятора {$ I-} – отключение контроля ошибок ввода/вывода.

IOResult(Var f): word

ФункцияСтандартные процедуры и функции обслуживания файловвозвращает код правильности выполнения операций ввода/вывода. Если ошибок не зафиксировано, то функция

Слайд 48Процедура
Стандартные процедуры и функции обслуживания файлов
обрезает файл, оставляя компоненты до

того, на который ссылается указатель файла (кроме текстовых файлов).
Truncate(Var f)

ПроцедураСтандартные процедуры и функции обслуживания файловобрезает файл, оставляя компоненты до того, на который ссылается указатель файла (кроме

Слайд 49Процедура
Стандартные процедуры и функции обслуживания файлов
изменяет текущий каталог: назначает текущим

каталог, указанный параметром path.
ChDir(path: string)

ПроцедураСтандартные процедуры и функции обслуживания файловизменяет текущий каталог: назначает текущим каталог, указанный параметром path.ChDir(path: string)

Слайд 50Процедура
Стандартные процедуры и функции обслуживания файлов
возвращает в переменную dir имя

текущего каталога на указанном устройстве, где устройство drive:
0 –

устройство по умолчанию;
1 – диск А;
2 – диск В и т.д.

GetDir(drive: word; Var dir: string)

ПроцедураСтандартные процедуры и функции обслуживания файловвозвращает в переменную dir имя текущего каталога на указанном устройстве, где устройство

Слайд 51Процедура
Стандартные процедуры и функции обслуживания файлов
создает новый каталог.
Строка dir

определяет путь и новое имя.
MkDir(dir: string)

ПроцедураСтандартные процедуры и функции обслуживания файловсоздает новый каталог. Строка dir определяет путь и новое имя.MkDir(dir: string)

Слайд 52Процедура
Стандартные процедуры и функции обслуживания файлов
удаляет каталог с именем, указанным

в переменной dir.
Каталог должен быть пустым.
RmDir(dir: string)

ПроцедураСтандартные процедуры и функции обслуживания файловудаляет каталог с именем, указанным в переменной dir.Каталог должен быть пустым.RmDir(dir: string)

Слайд 533. Текстовые файлы

3. Текстовые файлы

Слайд 54Текстовый файл - это файл, компонентами которого являются символьные строки

переменной длины, заканчивающиеся специальным маркером конца строки:
Структура текстового файла
Маркер конца

строки - это последовательность из двух специальных символов по таблице ASCII «#13, #10». Символ с кодом 13 интерпретируется в компьютере как команда установки курсора в начало строки, а символ с кодом 10 - как команда перехода на следующую строку. Такая комбинация кодов вводится при нажатии клавиши ENTER.
Текстовый файл - это файл, компонентами которого являются символьные строки переменной длины, заканчивающиеся специальным маркером конца строки:Структура

Слайд 55Текстовый файл можно открыть для записи, чтения и добавления записей

в конец.
Файл, открытый для записи, не может использоваться для

чтения и наоборот. При открытии файла для добавления система проверяет, не был ли файл открыт для чтения или записи, и если такое открытие имело место, то производится сначала закрытие файла, а затем уже открытие для добавления.
Текстовый файл можно открыть для записи, чтения и добавления записей в конец. Файл, открытый для записи, не

Слайд 56Текстовые файлы используют для хранения и обработки текстовой информации:
символов,


строк,
символьных массивов.
Логические и числовые данные при записи в

текстовые файлы должны преобразовываться в символьные строки.

Следует иметь в виду, что при необходимости текстовый файл может быть создан или прочитан любым текстовым редактором, в том числе и текстовым редактором.
Текстовые файлы используют для хранения и обработки текстовой информации: символов, строк, символьных массивов. Логические и числовые данные

Слайд 57Функция
Стандартные процедуры и функции обслуживания текстовых файлов
возвращает TRUE, если во

входном текстовом файле достигнут маркер конца строки.
При отсутствии файловой

переменной проверяется стандартный файл INPUT, который обычно связан с клавиатурой.

EOLn( Var f): boolean

ФункцияСтандартные процедуры и функции обслуживания текстовых файловвозвращает TRUE, если во входном текстовом файле достигнут маркер конца строки.

Слайд 58Процедура
Стандартные процедуры и функции обслуживания текстовых файлов
обеспечивает ввод символов, строк

и чисел.
Список ввода представляет собой последовательность из одной или

более переменных типа CHAR, STRING, а также любого целого и вещественного типа.
При отсутствии файловой переменной ввод осуществляется из стандартного файла INPUT.

Read( Var f: text; vl, v2,..., vn)

ПроцедураСтандартные процедуры и функции обслуживания текстовых файловобеспечивает ввод символов, строк и чисел. Список ввода представляет собой последовательность

Слайд 59Стандартные процедуры и функции обслуживания текстовых файлов
При вводе значений переменных

типа CHAR выполняется чтение одного символа из файла, считанное значение

присваивается очередной переменной из списка ввода. Символы вводятся подряд, а не через пробел, как числа.
Если перед выполнением чтения указатель файла
достиг конца очередной строки, то результатом чтения будет символ #13,
а если был достигнут конец файла, то – символ #26.
Стандартные процедуры и функции обслуживания текстовых файловПри вводе значений переменных типа CHAR выполняется чтение одного символа из

Слайд 60Стандартные процедуры и функции обслуживания текстовых файлов: Read
При вводе переменных

типа STRING количество считанных процедурой и помещенных в строку символов

равно максимальной длине строки, если раньше не встретились маркеры конца строки или конца файла, которые в строку не включаются.
Символы, выходящие за размер максимальной длины строки, отбрасываются.
Стандартные процедуры и функции обслуживания текстовых файлов: ReadПри вводе переменных типа STRING количество считанных процедурой и помещенных

Слайд 61При вводе числовых данных процедура Read пропускает все пробелы, знаки

табуляции и маркеры до первого значащего символа и читает строку

до пробела, знака табуляции или маркера.
Полученная подстрока преобразуется из символьного во внутреннее представление в соответствии с типом значения и присваивается следующей переменной из списка.
Если нарушен формат, то фиксируется ошибка ввода-вывода.
Если достигнут маркер конца файла, то переменной присваивается значение 0, причем никаких сообщений в этом случае не выдается.

Стандартные процедуры и функции обслуживания текстовых файлов: Read

При вводе числовых данных процедура Read пропускает все пробелы, знаки табуляции и маркеры до первого значащего символа

Слайд 62Ввод логических констант процедурами Read и ReadLn не предусмотрен.

Чтение с

клавиатуры осуществляется через буфер, который передается процедуре при нажатии клавиши

ENTER и имеет размер 127 байт, поэтому ввести с клавиатуры строку большего размера нельзя.

Стандартные процедуры и функции обслуживания текстовых файлов: Read

Ввод логических констант процедурами Read и ReadLn не предусмотрен.Чтение с клавиатуры осуществляется через буфер, который передается процедуре

Слайд 63Процедура
Стандартные процедуры и функции обслуживания текстовых файлов
также обеспечивает ввод символов,

строк и чисел.
Процедура использует те же правила ввода, что и

процедура Read, но после чтения последней переменной оставшаяся часть строки до маркера конца строки пропускается, так что следующее обращение к ReadLn или Read начнется с первого символа новой строки.
Процедура может быть вызвана без указания списка ввода, что приведет к пропуску всех символов текущей строки до маркера конца строки.

ReadLn( Var f; vl, v2,..., vn)

ПроцедураСтандартные процедуры и функции обслуживания текстовых файловтакже обеспечивает ввод символов, строк и чисел.Процедура использует те же правила

Слайд 64Процедуры Read и ReadLn могут использоваться без указания файловой переменной.

Тогда операция чтения осуществляется из стандартного файла INPUT.
Использование процедуры

ReadLn без параметров после процедуры Read приведет к очистке буфера ввода.
Применение этой же процедуры без предшествующей ей процедуры Read переводит программу в состояние ввода, т.е. выполнение программы приостанавливается до нажатия клавиши ENTER, что может использоваться для организации паузы на время просмотра содержимого экрана.

Стандартные процедуры и функции обслуживания текстовых файлов

Процедуры Read и ReadLn могут использоваться без указания файловой переменной. Тогда операция чтения осуществляется из стандартного файла

Слайд 65Последовательный доступ
при открытии файла курсор устанавливается в начало
чтение выполняется с

той позиции, где стоит курсор
после чтения курсор сдвигается на первый

непрочитанный символ

12 5 45 67 56●

конец файла
(end of file, EOF)


12 5 45 67 56●

assign ( f, 'qq.txt' );
reset ( f );

read ( f, x );












Последовательный доступпри открытии файла курсор устанавливается в началочтение выполняется с той позиции, где стоит курсорпосле чтения курсор

Слайд 66чтение до конца строки
как вернуться назад?
Последовательный доступ
close ( f );


reset ( f ); { начать с начала }
readln

( f, x );

12 5 45¤ 36 67¤ 56●

конец строки
(end of line, EOL)









чтение до конца строкикак вернуться назад?Последовательный доступclose ( f ); reset ( f ); { начать с

Слайд 67Процедура
Стандартные процедуры и функции обслуживания текстовых файлов
обеспечивает вывод данных в

текстовый файл или передачу их на логическое устройство.
Список вывода

– последовательность из одного или более выражений типа CHAR, STRING, BOOLEAN, а также целого или вещественного типов.
При выводе числовых значений последние преобразуются в символьное представление.
При отсутствии файловой переменной вывод осуществляется в стандартный файл OUTPUT, который обычно назначен на экран.

Write( Var f; vl, v2,..., vn)

ПроцедураСтандартные процедуры и функции обслуживания текстовых файловобеспечивает вывод данных в текстовый файл или передачу их на логическое

Слайд 68Любой параметр из списка вывода может иметь формат:
Стандартные процедуры и

функции обслуживания текстовых файлов
где и интерпретируются в соответствии

с правилами, описанными в параграфе «Ввод-вывод данных» Темы 2

<параметр> [: <целое1> [: < целое2> ]],

Любой параметр из списка вывода может иметь формат:Стандартные процедуры и функции обслуживания текстовых файловгде  и

Слайд 69Процедура
Стандартные процедуры и функции обслуживания текстовых файлов
обеспечивает вывод информации в

текстовый файл или ее передачу на логическое устройство вывода.
При отсутствии

файловой переменной вывод осуществляется в стандартный файл OUTPUT, который обычно связан с дисплеем.
Процедура полностью идентична процедуре Write, за исключением того, что выводимая строка символов завершается символами #13 и #10.
При вызове WriteLn допускается опускать список вывода, в этом случае в файл передается маркер конца строки (при выводе на экран это приведет к переводу курсора в начало следующей строки).

WriteLn( Var f; vl, v2,..., vn)

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

Слайд 70Функция
Стандартные процедуры и функции обслуживания текстовых файлов
пропускает все пробелы и

знаки табуляции до маркера конца строки или до первого значащего

символа и возвращает TRUE при обнаружении маркера.
Если файловая переменная не указана, то функция проверяет стандартный файл INPUT.

SeekEOLn( Var f ):boolean

ФункцияСтандартные процедуры и функции обслуживания текстовых файловпропускает все пробелы и знаки табуляции до маркера конца строки или

Слайд 71Функция
Стандартные процедуры и функции обслуживания текстовых файлов
пропускает все пробелы, знаки

табуляции и маркеры конца строки до маркера конца файла или

до первого значащего символа и возвращает TRUE при обнаружении маркера.
Если файловая переменная отсутствует, то функция проверяет стандартный файл INPUT.

SeekEOF( Var f ):boolean

ФункцияСтандартные процедуры и функции обслуживания текстовых файловпропускает все пробелы, знаки табуляции и маркеры конца строки до маркера

Слайд 72Разработать программу, которая формирует текстовый файл из 26 строк, содержащих

случайное количество соответствующих прописных букв латинского алфавита.
Например:
ААААА
ВВВВВ
С
DDDDDDDDDDDDDDDDDDDDD
ЕЕЕЕЕЕЕЕЕЕЕЕЕЕ
и т.д.
Пример 1


Разработать программу, которая формирует текстовый файл из 26 строк, содержащих случайное количество соответствующих прописных букв латинского алфавита.

Слайд 73Пример 1
Program FormTextFile;
Var f:text; {файловая переменная для текстового

файла}
а:char; n,i:integer;
fname,st:string[30];
Begin
WriteLn('Введите имя файла');
ReadLn(fname);
Assign(f,

fname); {инициализируем файловую переменную}
ReWrite(f); {открываем файл для записи}
Randomize; {инициализируем датчик случайных чисел}

Пример 1 Program FormTextFile;Var f:text;  {файловая переменная для текстового файла} а:char; n,i:integer; fname,st:string[30];Begin WriteLn('Введите имя файла');

Слайд 74Пример 1
for а:='А' to 'Z' do begin

{формируем строки}
n:=Random(30)+l;
st:='';
for i:=l to n do
st:=st+a:
WriteLn(f, st);

{записываем строку
в текстовый файл}
WriteLn(st); {для контроля - выводим ее на экран}
end;
Close(f); {закрываем файл}
End.
Пример 1  for а:='А' to 'Z' do begin  {формируем строки}	n:=Random(30)+l;	 st:=''; 	for i:=l to n

Слайд 75Поскольку компоненты текстового файла могут иметь различную длину, возможна только

последовательная их обработка (запись, чтение и поиск).
Любой вид модификации

файла, кроме добавления записей в конец, выполняется с перезаписью информации в другой файл.
Так, для того чтобы исключить некоторую запись, необходимо переписать все строки, кроме подлежащей исключению, в другой текстовый файл. При этом обычно старый файл удаляют, новый – переименовывают, присваивая ему имя исходного файла, и файловую переменную связывают с измененным файлом.
Поскольку компоненты текстового файла могут иметь различную длину, возможна только последовательная их обработка (запись, чтение и поиск).

Слайд 76Разработать программу, которая удаляет из текстового файла «пустые» строки:
строки,

не содержащие символов,
и строки, содержащие только пробелы и знаки

табуляции.

Поскольку в результате обработки часть строк текстового файла будет удалена, нам потребуется создать специальный файл, куда будут помещены непустые строки файла.

Пример 2

Разработать программу, которая удаляет из текстового файла «пустые» строки: строки, не содержащие символов, и строки, содержащие только

Слайд 77Пример 2
Program ex;
Var f1, f2:text; {файловые переменные текстовых файлов}
st,

name: string;
Begin
WriteLn('Введите имя файла:');
ReadLn(name);
Assign(f1, name);

{иниц-ем файловую переменную}
{$I-} {проверяем существование файла}
Reset(f1);
{$I+}
if IOResult=0 then begin
{если файл с заданным именем существует}
Assign(f2, 'temp.dat'); {иниц-ем новый файл}
Rewrite(f2); {открываем новый файл для записи}

Пример 2 Program ex;Var f1, f2:text; {файловые переменные текстовых файлов}	st, name: string;Begin WriteLn('Введите имя файла:');  ReadLn(name);

Слайд 78Пример 2
while not EOF(f1) do begin
{пока не достигнут конец

файла}
if SeekEOLn(f1) then ReadLn(f1, St) {если строка пустая, то

пропускаем ее}
else begin
ReadLn(f1, st); {читаем строку}
WriteLn(f2, st);{записываем ее в новый файл}
end;
end;
Close(f1); {закрываем старый файл}
Close(f2); {закрываем новый файл}
Erase(f1); {удаляем старый файл}
ReName(f2, name); {переименовываем новый файл}
end
else
WnteLn('Файл с таким именем не найден');
End.
Пример 2 	while not EOF(f1) do begin		{пока не достигнут конец файла}	 if SeekEOLn(f1) then ReadLn(f1, St) 			{если

Слайд 79
Пример 3
Задача: в файле input.txt записаны числа (в столбик), сколько

их – неизвестно. Записать в файл output.txt их сумму.
Алгоритм:
Открыть файл

input.txt для чтения.
S := 0;
Если чисел не осталось, перейти к шагу 7.
Прочитать очередное число в переменную x.
S := S + x;
Перейти к шагу 3.
Закрыть файл input.txt.
Открыть файл output.txt для записи.
Записать в файл значение S.
Закрыть файл output.txt.

цикл с условием «пока есть данные»

Пример 3Задача: в файле input.txt записаны числа (в столбик), сколько их – неизвестно. Записать в файл output.txt

Слайд 80Пример 3
program qq;
var s, x: integer;
f: text;
begin

assign(f, 'input.txt');
reset(f);
s := 0;





close(f);




end.

while not eof(f) do begin
readln(f, x);
s := s + x;
end;

f: text;

eof(f)

логическая функция, возвращает True, если достигнут конец файла

assign(f, 'output.txt');
rewrite(f);
writeln(f, 'Сумма чисел ', s);
close(f);

запись результата в файл output.txt

Пример 3program qq;var s, x: integer;  f: text; begin  assign(f, 'input.txt');  reset(f);  s

Слайд 81
Задания
В файле input.txt записаны числа, сколько их – неизвестно.
«4»:

Найти среднее арифметическое всех чисел и записать его в файл

output.txt.
«5»: Найти минимальное и максимальное числа и записать их в файл output.txt.
ЗаданияВ файле input.txt записаны числа, сколько их – неизвестно. «4»: Найти среднее арифметическое всех чисел и записать

Слайд 82Пример 4: обработка массивов
Задача: в файле input.txt записаны числа (в

столбик), сколько их – неизвестно, но не более 100. Переставить

их в порядке возрастания и записать в файл output.txt.
Проблемы:
для сортировки надо удерживать в памяти все числа сразу (массив);
сколько чисел – неизвестно.
Решение:
выделяем в памяти массив из 100 элементов;
записываем прочитанные числа в массив и считаем их в переменной N;
сортируем первые N элементов массива;
записываем их в файл.
Пример 4: обработка массивовЗадача: в файле input.txt записаны числа (в столбик), сколько их – неизвестно, но не

Слайд 83Пример 4: чтение данных в массив
var A: array[1..100] of integer;

f: text;
function ReadArray: integer;
var i: integer;
begin

assign(f, 'input.txt');
reset(f);
i := 0;




close(f);
ReadArray := i;
end;

Глобальные переменные:

Функция: ввод массива, возвращает число элементов

while (not eof(f)) and (i < 100) do begin
i := i + 1;
readln(f, A[i]);
end;

ReadArray := i;

цикл заканчивается, если достигнут конец файла или прочитали 100 чисел

Пример 4: чтение данных в массивvar A: array[1..100] of integer;  f: text; function ReadArray: integer; var

Слайд 84Пример 4
program qq;
var A: array[1..100] of integer;
f: text;

N, i: integer;
Begin
N := ReadArray;

{ сортировка первых N элементов }




end.

function ReadArray: integer;
...
end;

assign(f, 'output.txt');
rewrite(f);
for i:=1 to N do
writeln(f, A[i]);
close(f);

вывод отсортированного массива в файл

Пример 4program qq;var A: array[1..100] of integer;  f: text;    N, i: integer;Begin

Слайд 85
Задания
В файле input.txt записаны числа (в столбик), известно, что их

не более 100.
«4»: Отсортировать массив по убыванию последней цифры

и записать его в файл output.txt.
«5»: Отсортировать массив по возрастанию суммы цифр и записать его в файл output.txt.
ЗаданияВ файле input.txt записаны числа (в столбик), известно, что их не более 100. «4»: Отсортировать массив по

Слайд 86Пример 5: обработка текстовых данных
Задача: в файле input.txt записаны строки,

в которых есть слово-паразит «короче». Очистить текст от мусора и

записать в файл output.txt.
Файл input.txt :
Мама, короче, мыла, короче, раму.
Декан, короче, пропил, короче, бутан.
А роза, короче, упала на лапу, короче, Азора.
Каждый, короче, охотник желает, короче, знать, где ...
Результат - файл output.txt :
Мама мыла раму.
Декан пропил бутан.
А роза упала на лапу Азора.
Каждый охотник желает знать, где сидит фазан.
Пример 5: обработка текстовых данныхЗадача: в файле input.txt записаны строки, в которых есть слово-паразит «короче». Очистить текст

Слайд 87
Алгоритм:
Прочитать строку из файла (readln).
Удалить все сочетания ",

короче," (Pos, Delete).
Записать строку в другой файл.
Перейти к

шагу 1.
Обработка строки s:
Особенность:
надо одновременно держать открытыми два файла (один в режиме чтения, второй – в режиме записи).

пока не кончились данные

repeat
i := Pos(', короче,', s);
if i <> 0 then Delete(s, i, 9);
until i = 0;

искать «, короче,»

удалить 9 символов

Пример 5: обработка текстовых данных

Алгоритм: Прочитать строку из файла (readln). Удалить все сочетания

Слайд 88


Работа с двумя файлами одновременно
program qq;
var s: string;

i: integer;
fIn, fOut: text;
begin

assign(fIn, 'input.txt');
reset(fIn);
assign(fOut, 'output.txt');
rewrite(fOut);
{ обработать файл }
close(fIn);
close(fOut);
end.

fIn, fOut: text;

файловые переменные

открыть файл для чтения

открыть файл для записи

Работа с двумя файлами одновременноprogram qq; var s: string;   i: integer;   fIn, fOut:

Слайд 89Полный цикл обработки файла
while not eof(fIn) do begin

readln(fIn, s);
writeln(fOut, s);
end;

repeat
i := Pos(', короче,', s);
if i <> 0 then
Delete(s, i, 9);
until i = 0;

пока не достигнут конец файла

обработка строки

запись «очищенной» строки

Полный цикл обработки файла while not eof(fIn) do begin   readln(fIn, s);   writeln(fOut, s);

Слайд 90
Задания
В файле input.txt записаны строки, сколько их – неизвестно.
«4»:

Заменить все слова «короче» на «в общем» и записать результат

в файл output.txt.
«5»: Вывести в файл output.txt только те строки, в которых больше 5 слов (слова могут быть разделены несколькими пробелами).
ЗаданияВ файле input.txt записаны строки, сколько их – неизвестно. «4»: Заменить все слова «короче» на «в общем»

Слайд 914. Типизированные файлы

4. Типизированные файлы

Слайд 92
Организация типизированного файла
Типизированный файл – это файл, все компоненты которого

одного типа, заданного при объявлении файловой переменной.
Компоненты файла хранятся

на диске во внутреннем (двоичном) формате и нумеруются с 0.
Компонентами таких файлов могут быть как простые (integer, longint, real и т.д.) типы данных, так и структурированные типы данных (массивы, записи и др.)
Организация типизированного файлаТипизированный файл – это файл, все компоненты которого одного типа, заданного при объявлении файловой переменной.

Слайд 93
Организация типизированного файла
Если посмотреть такой файл любым текстовым редактором, то

можно распознать только символьную информацию, на месте же чисел в

файле будут располагаться пробелы или символы псевдографики.
Организация типизированного файлаЕсли посмотреть такой файл любым текстовым редактором, то можно распознать только символьную информацию, на месте

Слайд 94Процедура
Стандартные процедуры и функции обслуживания типизированных файлов
осуществляет чтение очередных компонентов

типизированного файла.
Список переменных ввода содержит одну или несколько переменных

того же типа, что и компоненты файла, разделенных запятыми.
Если файл исчерпан, обращение к процедуре вызывает ошибку ввода-вывода.

Read(Var f; с1, с2, ...,сn)

ПроцедураСтандартные процедуры и функции обслуживания типизированных файловосуществляет чтение очередных компонентов типизированного файла. Список переменных ввода содержит одну

Слайд 95Процедура
Стандартные процедуры и функции обслуживания типизированных файлов
осуществляет запись данных в

типизированный файл.
Список вывода содержит одно или более выражений того

же типа, что и компоненты файла, разделенных запятыми.

Write(Var f; с1, с2, ...,сn)

ПроцедураСтандартные процедуры и функции обслуживания типизированных файловосуществляет запись данных в типизированный файл. Список вывода содержит одно или

Слайд 96Процедура
Стандартные процедуры и функции обслуживания типизированных файлов
осуществляет установку указателя файла

(переход) на компонент файла с номером numcomp.
Seek(Var f; numcomp: word)
Например,
Seek(f,

9);

осуществляет переход к десятой записи в файле f.

ПроцедураСтандартные процедуры и функции обслуживания типизированных файловосуществляет установку указателя файла (переход) на компонент файла с номером numcomp.Seek(Var

Слайд 97Функция
Стандартные процедуры и функции обслуживания типизированных файлов
возвращает количество компонент файла,

указанного файловой переменной.
Может использоваться для установки на конец файла

совместно с Seek() или на последнюю запись файла соответственно:

FileSize(Var f): longint

Seek(f, FileSize(f));
Seek(f, FileSize(f)-1);

ФункцияСтандартные процедуры и функции обслуживания типизированных файловвозвращает количество компонент файла, указанного файловой переменной. Может использоваться для установки

Слайд 98Функция
Стандартные процедуры и функции обслуживания типизированных файлов
возвращает порядковый номер компонента,

который будет обрабатываться следующей операцией ввода-вывода.
FilePos(Var f): longint

ФункцияСтандартные процедуры и функции обслуживания типизированных файловвозвращает порядковый номер компонента, который будет обрабатываться следующей операцией ввода-вывода.FilePos(Var f):

Слайд 99После открытия файла для чтения или записи указатель файла стоит

в его начале и указывает на первый компонент, имеющий номер

0.
После каждого чтения или записи указатель сдвигается к следующему компоненту файла.
Поскольку длина каждой компоненты файла строго постоянна, помимо последовательного возможно осуществление прямого доступа к компонентам файла.
По той же причине, если требуется изменить компонент файла, то не обязательно переписывать компоненты в другой файл, а достаточно установить указатель файла на изменяемый компонент и записать новый компонент на место старого.
Удаление компонент обычно требует перезаписи файла.

Обработка типизированного файла

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

Слайд 100Добавление компонентов в конец файла выполняется в режиме чтения. Для

этого указатель файла устанавливается на его конец (как показано выше),

после чего все выводимые компоненты дописываются в конец файла.
Добавление компонентов в середину или начало файла может выполняться следующим образом:
определяем место, в которое должны быть добавлены элементы,
все последующие компоненты переписываем во временный файл,
вставляем новые компоненты
дописываем в файл компоненты, переписанные во временный файл.

Обработка типизированного файла

Добавление компонентов в конец файла выполняется в режиме чтения. Для этого указатель файла устанавливается на его конец

Слайд 101Разработать программу, создающую файл, компонентами которого являются символы, введенные с

клавиатуры. Затем эта программа должна
изменять символы, записанные в файл,


организовывать чтение символов из файла попеременно с начала и с конца (прямой доступ),
находить указанный символ в файле и удалять его из файла.

Пример 6

Разработать программу, создающую файл, компонентами которого являются символы, введенные с клавиатуры. Затем эта программа должна изменять символы,

Слайд 102Пример 6
Program ex;
Var f, f1: file of char; { две

файловые переменные}
ch, i: char;
j: longint;

name: strmg[8];
Begin
WriteLn('Введите имя файла:');
ReadLn(name);

{создание и открытие файла}
Assign(f, name + '.dat'); {связываем файл
с файловой переменной}
ReWrite(f); {открываем файл для записи (создаем)}
WriteLn('Вводите символы или CTRL-Z:');

Пример 6Program ex;Var f, f1: file of char; 	{ две файловые переменные}  ch, i: char;

Слайд 103Пример 6
{занесение записей в файл}
while not EOF do

{пока не введено CTRL-Z с клавиатуры}
begin
ReadLn(ch); {вводим символ с

клавиатуры}
Write(f, Ch); {записываем символ в файл}
end;
WriteLn;
{последовательное чтение записей из файла}
ReSet(f); {открываем файл для чтения}
while not EOF(f) do {пока не достигнут конец файла}
begin
Read(f, ch); {читаем символ из файла}
Write(ch, ' '); {выводим символ на экран}
end;
WriteLn;
Пример 6	{занесение записей в файл} while not EOF do  {пока не введено CTRL-Z с клавиатуры} begin	ReadLn(ch);

Слайд 104Пример 6
{изменение записей в файле}
ReSet(f); {открываем файл для чтения}

while not EOF(f) do {пока не достигнут конец файла}

begin
Read(f, i); {читаем символ из файла}
Write(i, ' '); {выводим символ на экран}
i:=chr(ord(i)+10); {изменяем символ}
WriteLn(i); {выводим на экран измененный символ}
Seek(f,FilePos(f)-1); {возвращаемся на 1 компонент}
Write(f, i); {перезаписываем символ}
end;
WriteLn;
Пример 6	{изменение записей в файле} ReSet(f); 	{открываем файл для чтения} while not EOF(f) do  {пока не

Слайд 105Пример 6
{попеременное чтение записей с начала и конца файла}
ReSet(f);

{открываем файл для чтения}
j:=0; {устанавливаем номер компонента равным 0}

while not EOF(f) do {пока не достигнут конец файла}
begin
Read(f, i); {читаем символ из начала файла}
Write(i); {выводим символ на экран}
Seek(f, FileSize(f) - FilePos(f));
{устанавливаем указатель для чтения из конца файла}
Read(f, i); {читаем символ из конца файла}
Write(i); {выводим символ на экран}
j:=j+l; {увеличиваем номер компонента}
Seek(f, j); {устанавливаем указатель
на следующий от начала компонент}
end;
WriteLn;
WriteLn (’Введите символ для удаления:’);
ReadLn(ch);
Пример 6	{попеременное чтение записей с начала и конца файла} ReSet(f); 	{открываем файл для чтения} j:=0; 		{устанавливаем номер

Слайд 106Пример 6
{подготовка к удалению записей: переименование исходного
файла и открытие

нового файла с тем же именем}
Close(f); {закрываем файл}
ReName(f,

name + '.bak'); {переименовываем файл}
ReSet(f); {открываем файл для чтения}
Assign(f1, name + '.dat'); {связываем новый файл с переменной}
ReWrite(f1); {открываем новый файл для записи}
{удаление записей - перепись остающихся записей в др. файл}
while not EOF(f) do begin
Read(f, i); {читаем символ из файла}
if i<>ch then Write(f1, i); {если символ
не подлежит удалению, то записываем его в новый файл}
end;
Erase(f); {удаляем старый файл, после закрытия в нем ничего не изменилось, поэтому повторно его можно не закрывать}
Пример 6	{подготовка к удалению записей: переименование исходного	 файла и открытие нового файла с тем же именем} Close(f);

Слайд 107Пример 6
{последовательное чтение записей из нового файла}
ReSet(f1); {открываем новый

файл для чтения}
while not EOF(f1) do begin
Read(f1, Ch); {читаем

из файла}
Write(ch, ' ');
end;
WriteLn;
End.
Пример 6	{последовательное чтение записей из нового файла} ReSet(f1); 	{открываем новый файл для чтения} while not EOF(f1) do

Слайд 108Разработать программу, которая создает файл, содержащий список фамилий и даты

рождения. Осуществить поиск в этом файле даты рождения по заданной

фамилии.

Пример 7

Разработать программу, которая создает файл, содержащий список фамилий и даты рождения. Осуществить поиск в этом файле даты

Слайд 109Пример 7
Program ex;
Type fam=record {тип запись «сведения о сотрудниках»}

ff: string[20]; {фамилия}
year: word; {год рождения}

month: 1..12; {месяц рождения}
day: 1..31 {день рождения}
end;
Var f: file of fam; {файловая переменная
«файл сотрудников»}
fb: fam;
n, i: integer; fff: string; key: boolean;
Begin
Assign(f, 'a.dat');
ReWrite(f); {открываем файл для записи}
WriteLn('Введите данные или CTRL-Z');

Пример 7Program ex; Type fam=record 	{тип запись «сведения о сотрудниках»}	  ff: string[20]; 	{фамилия}	  year: word;

Слайд 110Пример 7
while not EOF do begin {цикл, пока не

введено CTRL-Z}
ReadLn(fb.ff, fb.year, fb.month, fb.day); {вводим данные по полям,

фамилию вводим
в отдельной строке, т.к. ввод строки завершается
нажатием клавиши Enter}
Write(f, fb); {запись в файл как один компонент}
end;
Close(f); {закрываем файл}
WriteLn('Введите фамилию');
Readln(fff);
key:=false; {устанавливаем признак «запись не найдена»}
ReSet(f); {открываем файл для чтения}

Пример 7 while not EOF do begin 	{цикл, пока не введено CTRL-Z} 	ReadLn(fb.ff, fb.year, fb.month, fb.day); 			{вводим

Слайд 111Пример 7
while (not EOF(f)) and (not key) do begin
{пока

не обнаружен конец файла и не найдена запись}
Read(f, fb); {читаем

запись из файла}
if fb.ff=fff then begin {если фамилии совпадают, то выводим данные}
WriteLn('Дaтa:', fb.year,
fb.month:3, fb.day:3);
key:=true; {устанавливаем признак «запись найдена»}
end;
end;
if not key then {если признак не установлен}
WriteLn('Hem данных') ;
Close(f); {закрываем файл}
End.
Пример 7 while (not EOF(f)) and (not key) do begin		{пока не обнаружен конец файла и не найдена

Слайд 112Пример 8
program Audioln;
Type {Структура для хранения данных об одной дорожке}

Track = record
Name: string[50]; {Название дорожки}
Hours: 0..3; {Часы}
Minutes: 0..59;

{Минуты}
Seconds: 0..59; {Секунды}
end;

Разработать программу, которая выводит данные о компакт-дисках, содержащиеся в типизированном файле.

Пример 8program Audioln;Type 		{Структура для хранения данных об одной дорожке} Track = record	Name: string[50]; {Название дорожки}	Hours: 0..3;

Слайд 113Пример 8
{Структура для хранения информации о диске}
CD = record
Author:

string[20]; {Автор}
Title: string[50]; {Название}
Year: integer; {Год}
Kind: string[10]; {Жанр}
case Tracks: byte

of {Количество дорожек}
1: (Track1: Track); {Если дорожек больше одной, тогда информация хранится в виде массива}
[2..20]: (ATracks:array[1..20] of Track);
end;
Var c: char;
i, j: byte;
FName: string;
CDData: CD;
F: file of CD;
isError: boolean;
Пример 8		{Структура для хранения информации о диске} CD = record	Author: string[20]; 	{Автор}	Title: string[50]; 	{Название}	Year: integer; 		{Год}	Kind: string[10];

Слайд 114Пример 8
{Процедура ввода данных об одной дорожке}
procedure DataForTrack(var TrackData:

Track);
Var hh, mm, sa: string[2];
Timing: string[8];
begin
with TrackData

do begin
(Преобразовываем в строки значения часов, минут и секунд)
Str(Hours, hh);
Str (Minutes, mm);
Str(Seconds, ss) ;
{Формируем строку времени звучания)
if Hours = 0 then Timing := ''
else Timing := hh + ':';
Timing := Timing + mm + '"' + ss + Chr(39) ;
Writeln(num, '-', Name, ' (', Timing, ')');
end;
end;
Пример 8 	{Процедура ввода данных об одной дорожке}procedure DataForTrack(var TrackData: Track);Var hh, mm, sa: string[2];  Timing:

Слайд 115Пример 8
Begin
isError := True;
while isError do begin
WriteLn('Введите имя

файла с данными о музыкальных дисках:');
Readln (FName) ;
Assign(F, FName);
{$ I-}
Reset(F);
{$

I+}
isError := (IOResult > 0);
if isError then Writeln('Такого файла нет');
end;

Пример 8Begin isError := True; while isError do begin	WriteLn('Введите имя файла с данными о 				музыкальных дисках:');	Readln (FName)

Слайд 116Пример 8
repeat
Writeln('Файл содержит данные о ', FileSize(F),

' дисках: ');
Seek(F, 0); {Перемещаемся к первой записи}

for i:=0 to FileSize(F)-1 do begin
Read(F, CDData);
Writeln(i+1, ' - ', CDData.Author,
', ''', CDData.Title, '''')
{Отображаем список дисков по 20 на экране}
if (((i+1) mod 20)=0) and
(i<(FileSize(F)-1)) then begin
Writeln('Для промотра остальных дисков нажмите ');
Read(с);
end;
end;
Пример 8 repeat  Writeln('Файл содержит данные о ', 				FileSize(F), ' дисках: ');  Seek(F, 0); {Перемещаемся

Слайд 117Пример 8
Writeln('Введите порядковый номер диска для просмотра: ');

Readln(num);
Seek(F, num-1); {Перемещаемся к указанной записи}

Read(F, CDData);
Writeln('>>> ', CDData.Author, ', ''', CDData.Title, '''- ', CDData.Year, 'г. (', CDData.Kind, ') <<<');
{Выводим данные о дорожках}
if CDData.Tracks =1 then DataForTrack(CDData.Track1, 1)
else
for i:=1 to CDData.Tracks do
DataForTrack(CDData.ATracks[i], i);
Пример 8  Writeln('Введите порядковый номер диска для 				просмотра: ');  Readln(num);  Seek(F, num-1); {Перемещаемся к

Слайд 118Пример 8

Write('Ввести данные еще об одном диске (Да/Нет)?

');
Readln(с);
until с in ['N', 'n', 'Н', 'н'];
Close(F);
end.

Пример 8 	Write('Ввести данные еще об одном диске 			 (Да/Нет)? ');	Readln(с); until с in ['N', 'n', 'Н',

Слайд 119Следующая программа демонстрирует использование алгоритма бинарного поиска для последовательности, размещенной

не в массиве, а в файле прямого доступа (типизированном файле).



Разработать программу поиска заданных элементов в упорядоченном типизированном файле целых чисел.

Пример 9

Следующая программа демонстрирует использование алгоритма бинарного поиска для последовательности, размещенной не в массиве, а в файле прямого

Слайд 120Пример 9
Uses CRT;
Type Lf: file of integer
var f: Lf;

name: string;
{Поиск элемента х в упорядоченном файле целых

чисел f }
function searchf (var f: Lf; x: integer): boolean;
var nn, i1, i2, s, ax, bx, as: integer;
Begin
reset(f);
nn:=FileSize(f);
i1:=0; i2:=nn-1;
seek(f, i1); Read(f, ax);
seek(f, i2); Read(f, bx);
if (x>bx) or (x searchf :=false; Exit end;
if (x=bx) or (x=ax) then begin
searchf :=true; Exit end;
Пример 9Uses CRT;Type Lf: file of integervar f: Lf;   name: string; 	{Поиск элемента х в

Слайд 121Пример 9
while (i2-i1 > 1) do begin
s:=(i2-i1)div 2 +

i1;
seek(f, s); Read(f, as);
if as=x then begin
searchf

:=true; Exit end;
if as i1:=s; ax:=as end
else begin
i2:=s; bx:=as end;
end;
searchf :=false;
end; {Function searchf)
Пример 9 while (i2-i1 > 1) do begin	s:=(i2-i1)div 2 + i1;	seek(f, s);  Read(f, as);	if as=x then

Слайд 122Пример 9
{ Ввод искомых элементов и обращение к операции

поиска }
procedure elements;
var x, i, n: integer;
begin
Writeln('Введите

число искомых элементов :');
Read(n);
for i:=1 to n do begin
Writeln('Введите искомое значение:');
Read(x);
if searchf(f, x) then
WriteLn(' число есть')
else WriteLn(' числа нет');
end;
ReadLn
end; { procedure elements }
Пример 9 { Ввод искомых элементов и обращение к операции поиска }procedure elements; var x, i, n:

Слайд 123Пример 9
{ Головная программа }
Begin
WriteLn('Введите полное имя

файла:');
ReadLn(name);
assign(f, name);
{$I-} {проверяем существование

файла}
reset(f);
{$I+}
if IOResult = 0 then elements
else WriteLn('*** неверное имя файла');
ReadLn
End.
Пример 9 { Головная программа }Begin  WriteLn('Введите полное имя файла:');   ReadLn(name); assign(f, name);

Слайд 124Следует отметить, что любой текстовый файл может быть прочитан как

типизированный файл с компонентами типа CHAR. В этом случае необходимо

учитывать, что маркер конца строки текстового файла рассматривается в символьном представлении как последовательность из двух символов #13 и #10.

Разработать программу, которая открывает текстовый файл как типизированный с компонентом типа CHAR и читает его по символу.

Пример 10

Следует отметить, что любой текстовый файл может быть прочитан как типизированный файл с компонентами типа CHAR. В

Слайд 125Пример 10
Program chartextfile;
Type ff=file of char; {новый тип - символьный

файл}
Var f: ff; {файловая переменная типа файл символов}
a: char;

n, i: integer;
fname, st: string[30];
Begin
WriteLn('Bвeдитe имя файла'); ReadLn(fname);
Assign(f, fname);
ReSet(f); {открыть текстовый файл
как типизированный на чтение}

Пример 10Program chartextfile;Type ff=file of char; 	{новый тип - символьный файл}Var f: ff;		{файловая переменная типа файл символов}

Слайд 126Пример 10
while not EOF(f) do begin
St:='';
Read(f, a); {читаем символ}
while

(а#13) and not EOF(f) do begin
{до маркера конца строки или

конца файла}
st:=st+a; {добавляем считанный символ в строку}
Read(f, a); {читаем очередной символ}
end;
if not EOF(f) then
Read(f, a); {пропускаем символ #10}
WriteLn(st); {выводим сформированную строку}
end;
Close(f);
End.
Пример 10 while not EOF(f) do begin	St:='';	Read(f, a); 	{читаем символ}	while (а#13) and not EOF(f) do begin		{до маркера

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

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика