Основы программирования (947332), страница 33
Текст из файла (страница 33)
Однако следует помнить, что с этой цельюможно использовать только параметры-переменные, например:Туре FF ^file of integer;Procedure Print (Var F1:FF);...1926. Файловая система, ФащыРабота с файлом включает:• инициализацию файловой переменной - установление связи файловойпеременной с файлом;• открытие файла - подготовку файла для выполнения операций ввода/вывода;• обработку компонентов ф а ш а - выполнение операций ввода-вывода;• закрытие файла (при повторном открытии файл закрывается автоматически).Инициализация файловой переменной. Связь между физическим устройством (дисководом или внешним устройством) и файловой переменнойустанавливается специальной процедурой.Процедура Assign (Var f; sUstring) - инициализирует файловую переменную f, связывая ее с файлом или логическим устройством, определеннымстрокой St.Если файл находится в текущем каталоге, то достаточно указать имяфайла и его расширение.
В противном случае необходимо указать полноеимя файла, например:Туре FI1 = text;Var flfifi:FIl;Assign (fl, Tl.dat'); {связывание файловой переменной с файломв текущем каталоге}Assign (f2, 'd:\iva\a.dat'): {связывание файловой переменной с файломв указанном каталоге}Assign(f3, VON'); {связывание файловой переменной с консолью}Открытие файла. Открытие файла предполагает указание направленияпередачи данных. В Borland Pascal файл можно открыть для чтения и для записи. Текстовый файл можно открыть также для добавления строк.
В типизированный файл, открытый для чтения, можно дописывать новые записиили писать в нем новые записи на место старых.1. Процедура ReSet(VarJ) - открывает файл, определенный файловойпеременной f для чтения. При выполнении этой процедуры указатель файлаустанавливается на первый компонент файла (физически первый блок записей считывается в буфер). Логическое устройство в этом случае готовится квыполнению операций ввода.При открытии для чтения несуществующего файла регистрируетсяошибка выполнения, а функция lOResult типа Word возвращает значение, отличное от О (см. далее описание функции). Отключив контроль операцийввода-вывода и используя функцию lOResult, можно организовать проверкуналичия файла с указанным именем на диске:193Часть 1.
Основы алгоритмизации и процедурное программированиеVar f: file of char;BeginAssign(f, *a. dat * ) ; {инициализация файловой переменной}{$ I'} {отмена контроля ошибок ввода-вывода}ReSet (f); {открытие файла для чтения}{$ /+/ {включение контроля ошибок}iflOResult оО then WriteLn ('Файл не существует *);else WriteLn('0awi существует *);...2. Процедура ReWrite(VarJ) - открывает файл, определенный файловойпеременной f, для записи.
При открытии для записи существующего файластарый файл уничтоэюается без предварительной проверки и выдачи предупреэюдения пользователю. Если файла с таким именем не существовало, тоон создается и подготавливается к записи (физически ~ очищается буфер).Логическое устройство при этом подготавливается к приему информации.3.
Процедура AppEnd(Var fiiext) - открывает текстовый файл, определенный файловой переменной f, для добавления строк.При открытии для добавления строк указатель файла устанавливаетсяна конец файла, и, соответственно, все строки, выводимые в файл, дописываются к уже существующему файлу.Любой программе без объявления, инициализации файловой переменной и открытия доступны два файла со стандартными файловыми переменными:INPUT - чтение со стандартного устройства ввода;OUTPUT - вывод на стандартное устройство вывода.Это текстовые файлы, используемые для выполнения элементарныхопераций ввода-вывода. В операторах ввода-вывода файловые переменныеэтих файлов обычно не указывают (см.
параграф 2.6). Остальные файлы становятся доступными только после связывания файловой переменной с файлом или логическим устройством и открытия файла.Стандартным устройством ввода MS DOS по умолчанию является клавиатура. Стандартным устройством вывода - экран дисплея.Примечание. При необходимости эти устройства можно переназначить средствами операционной системы.
Так, для организации ввода данных из файла вместо ввода с клавиатурынеобходимо запустить программу из командной строки MS DOS, указав после имени программы символ «<» и имя файла, а для организации вывода в файл вместо вывода на экран - символ «>» и имя файла. Можно перенаправить только ввод или только вывод или и то и другоесразу.Например:A:\>example.exe <a.dat >a.res - ввод из файла a.dat, а вывод в файл a.rez.194б.
Файловая система. ФайлыТакое переназначение будет выполнено, если в программе не используется модуль crt(см. парафаф 8.1), который организует операции ввода-вывода напрямую, непосредственновзаимодействуя с устройством.Обработка компонентов файла. Основные операции над компонентами - это операции записи и чтения. На базе этих операций выполняют болеесложные операции:• создание файла - занесение в файл требуемых записей;• модификация файла - изменение всех или нескольких записей, добавление и удаление записей;• поиск нужной информации в файле.Выполнение этих операций осуществляется по-своему для каждого типа файла (см.
параграфы 6.3 - 6.5).Закрытие файла. Закрытие файла, открытого для записи или чтения,осуществляется процедуройClose(VarJ).При этом вновь созданный файл регистрируется в каталоге. Посколькулюбое обращение к диску осуществляется через буферную память, частьданных, выводимых в файл, может остаться в буфере. Процедура закрытияфайла обеспечивает вывод оставшихся компонентов из буфера в файл. Связьфайловой переменной с файлом при закрытии сохраняется, и при повторномиспользовании этого же файла процедуру Assign применять еще раз не требуется.Стандартные процедуры и функции обслуживания файлов. Для взаимодействия с файловой системой MS DOS в Borland Pascal определеныстандартные процедуры и функции, которые применимы к файлам любыхтипов.1.
Процедура ReName(Varf; name:string) - осуществляет переименование файла, определенного файловой переменной f. Новое имя файла задается параметром name. Если в процессе работы программы требуется переименовать файл, открытый для чтения или записи, необходимо предварительнозакрыть этот файл. При совпадении нового имени файла с каким-либо ужесуществующим выдается сообщение об ошибке.2.
Процедура Erase(Var J) - осуществляет удаление созданного или находящегося в процессе формирования файла. Перед уничтожением файлдолжен быть закрыт, так как разрешается удалять только закрытые файлы.3. Функция EOF(Var J):boolean - определяет конец файла. Как было отмечено выше, размер файла при его создании не фиксируется. Поэтому впроцессе работы требуется проверка достижения конца файла. Функция принимает значение TRUE, если указатель стоит в конце файла (после последней записи).
При этом, если производится чтение, то это означает, что файлисчерпан, а если идет запись, то новая запись дописывается в конец файла.Функция принимает значение FALSE, если конец файла еще не достигнут.195Часть 1. Основы алгоритмизации и процедурноепрограммированиеПримечание, Функция EOF по-разному работает с дисковыми файлами и логическимиустройствами. Для логического устройства невозможно предвидеть, каким будет результатчтения очередного символа. Поэтому при работе с логическим устройством функция EOFвозвращает TRUE, если последним символом был маркер конца файла, а при чтении с диска если следующим считываемым символом будет маркер конца файла.
Физически это выражается в том, что при выполнении функции EOF запрашивается ввод информации с клавиатуры.В качестве маркера конца файла используется символ ASCII с кодом 26 (#26). При работе с клавиатурой этот код формируется при вводе комбинации CTRL-Z. Считается, что признак конца файла физически присутствует в файле, однако, как правило, такой символ в конце дискового файла отсутствует, и конец файла в системе определяется другим способом.4.
Функция IOResult(Var J): word - возвращает код правильности выполнения операций ввода/вывода. Если ошибок не зафиксировано, то функция возвращает 0. Информация об ошибках может быть получена и обработана в режиме компилятора {$!-}- отключение контроля ошибок ввода/вывода.5.
Процедура Truncate(Var/) - обрезает файл, оставляя компоненты дотого, на который ссылается указатель файла (кроме текстовых файлов).6. Процедура ChDir(path:string) - изменяет текущий каталог: назначаеттекущим каталог, указанный параметром path.7. Процедура GetDir(drive:word: Var dir:string) - возвращает имя текущего каталога на указанном устройстве, где устройство drive: О - устройство по умолчанию; 1 - диск А; 2 - диск В и т.д.8.