У вас вопросы?
У нас ответы:) SamZan.net

модуль DOS WinDOS Файлы в Паскале Основные процедуры и функции для работы с файлами 1

Работа добавлена на сайт samzan.net: 2016-03-30

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 15.3.2025

Учебная практика 2.

Системный модуль DOS, WinDOS.

Файлы в Паскале

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

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

Assign(<файловая_переменная>, <имя_дискового_файла>)

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

Пример процедуры Assign в Паскале 

Assign (chf, 'G:\Home\ Student\ Lang\ Pascal\ primer.dat');

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

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

CON – консоль, т.е. клавиатура-дисплей;

PRN – принтер. Если к компьютеру подключено несколько принтеров, доступ к ним осуществляется по именам LPT1, LPT2, LPT3.

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

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

Close(<список файловых переменных>);

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

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

3.Подготовка к записи в файл Паскаля

Rewrite(<имя_ф_переменной>);

Процедура Rewrite(f) (где f – имя файловой переменной) устанавливает файл с именем f в начальное состояние режима записи, в результате чего указатель устанавливается на первую позицию файла. Если ранее в этот файл были записаны какие-либо элементы, то они становятся недоступными. Результат выполнения процедуры rewrite(f); выглядит следующим образом:

4.Запись в файл Паскаля

Write(<имя_ф_переменной>, <список записи>);

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

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

5.Подготовка файла к чтению Паскаля

Reset(<имя_ф_переменной>);

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

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

6.Чтение из файла в Паскале

Read(<имя_ф_переменной>,<список переменных>);

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

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

7.Функция определения достижения конца файла в Паскале

Eof(<имя_ф_переменной>);

Название этой функции является сложносокращенным словом от end of file. Значение этой функции имеет значение true, если конец файла уже достигнут, т.е. указатель стоит на позиции, следующей за последней компонентой файла. В противном случае значение функции – false.

8.Изменение имени файла в Паскале

Rename(<имя_ф_переменной>, <новое_имя_файла>);

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

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

9.Уничтожение файла в Паскале

Erase(<имя_ф_переменной>);

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

10.Уничтожение части файла от текущей позиции указателя до конца в Паскале

Truncate(<имя_ф_переменной>);

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

Append(<имя_ф_переменной>);

Типизированные файлы Паскаля. Длина любого компонента типизированного файла строго постоянна, т.к. тип компонент определяется при описании, а, следовательно, определяется объем памяти, отводимый под каждую компоненту. Это дает возможность организовать прямой доступ к каждой компоненте (т.е. доступ по порядковому номеру).

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

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

fileSize(<имя_ф_переменной>) – функция Паскаля, определяющая число компонентов в файле;

filePos(<имя_ф_переменной>) – функция Паскаля, значением которой является текущая позиция указателя;

seek(<имя_ф_переменной>,n) – процедура Паскаля, смещающая указатель на компоненту файла с номером n. Так, процедура seek(<имя_ф_переменной>,0) установит указатель в начало файла, а процедура seek(<имя_ф_переменной>, FileSize(<имя_ф_переменной>)) установит указатель на признак конца файла.

Текстовые файлы Паскаля. Текстовые файлы предназначены для хранения текстовой информации. Именно в таких файлах хранятся, например, исходные тексты программ. Компоненты текстовых файлов могут иметь переменную длину, что существенно влияет на характер работы с ними. Доступ к каждой строке текстового файла Паскаля возможен лишь последовательно, начиная с первой. К текстовым файлам применимы процедуры assign, reset, rewrite, read, write и функция eof. Процедуры и функции seek, filepos, filesize к ним не применяются. При создании текстового файла в конце каждой записи (строки) ставится специальный признак EOLN(end of line – конец строки). Для определения достижения конца строки существует одноименная логическая функция EOLN(<имя_ф_переменной>), которая принимает значение true, если конец строки достигнут.

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

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

Кроме процедур read и write при работе с текстовыми файлами используются их разновидности readln и writeln. Отличие заключается в том, что процедура writeln после записи заданного списка записывает в файл специальный маркер конца строки. Этот признак воспринимается как переход к новой строке. Процедура readln после считывания заданного списка ищет в файле следующий признак конца строки и подготавливается к чтению с начала следующей строки.

DOS

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

Более полное  описание операций DOS приведено в руководствах по DOS фирмы IBM.

Основное различие модулей Dos и WinDos состоит  в  том,  что процедуры и функции модуля Dos используют стандартные строки Паскаля, а процедуры и функции модуля WinDos - строки с  завершающим  нулем. Стандартная  строка  Паскаля - это байт длины,  за которым следует последовательность символов. Строка с завершающим нулем - это последовательность  ненулевых символов с завершающим символом NULL (#0).

Процедуры и функции модуля Dos.

Функция DiskFree

Возвращает количество свободных байтов указанного диска.

Объявление:

function DiskFree(Drive: Byte): Longint;

Замечания:

Переменная Drive – это диск для проверки, где A = 1, B = 2 и т.д. Если Drive = 0, то используется текущий диск.

Функция DiskFree может оказаться полезной для определения наличия свободного места на диске.

Функция DiskSize

Возвращает общий размер свободного места на диске, в байтах.

Объявление:

function DiskSize(Drive: Byte): Longint;

 Переменная Drive – это диск для проверки, где A = 1, B = 2 и т.д. Если Drive = 0, то используется текущий диск.

Функция DosExitCode

Возвращает код выхода из подпроцесса.

Объявление:

function DosExitCode: Word;

Функция DosVersion

 Возвращает версию DOS.

Объявление:

function DosVersion: Word;

Функция EnvCount

Возвращает количество строк, содержащихся в системном окружении.

Объявление:

function EnvCount: Integer;

 Функция EnvStr

 Возвращает указанную строку окружения.

Объявление:

function EnvStr(Index: Integer): string;

Замечания:

Переменная Index – это номер переменной окружения, например, первая переменная – это 1, вторая – 2 и т.д. Неправильный индекс возвращает пустую строку.

Функция EnvStr возвращает строку в форме (VarName=String). Если порядок переменных системного окружения неизвестен, то используют функцию GetEnvto для поиска переменной по имени.

Процедура Exec

Выполняет указанную программу с указанной командной строкой.

Объявление:

procedure Exec(Path, CmdLine: string);

Замечания:

Переменная Path – это диск, директория и имя программы для выполнения. Переменная CmdLine содержит аргументы командной строки.

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

Процедура Exec не выполняет программы, которые требуют Блок Управления Файлом - File Control Blocks (FCB).

Функция FExpand

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

Объявление:

function FExpand(Path: PathStr): PathStr;

Процедура FindFirst

Ищет указанный каталог для соответствующего файла.

Объявление:

procedure FindFirst(Path: PChar; Attr: Word; var F: TSearchRec);

Замечания:

Переменная Path – это диск и каталог, в котором будет выполняться поиск и имя файла для поиска. Шаблоны следующие, например, 'MYFILE??.*'.

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

Процедура FindFirst используется совмествно с процедурой FindNext. Используйте FindNext для размещения каких-либо дополнительных файлов, соответствующих критериям поиска. Все ошибки записываются в переменную DosError, которая определена в модуле DOS.

Процедура FindNext

Находит следующее вхождение, которое соответствует имени и атрибутам, указанным в предварительно вызванной процедуре FindFirst.

Объявление:

procedure FindNext(var F: TSearchRec);

Замечания:

Процедура FindNext используется совместно с процедурой FindFirst. Используйте FindNext для размещения каких-либо дополнительных файлов, соответствующих критериям поиска, предварительно определенных для процедуры FindFirst. Переменная F должна быть той же самой переменной, которая была использована для ввода в FindFirst. Все ошибки записываются в переменную DosError, которая определена в модуле DOS.

Функция FSearch

Поиск файла.

Объявление:

function FSearch(Path: PathStr; DirList: string): PathStr;

Замечания:

Переменная Path имеет тип PathStr, который определен в модуле DOS. Переменная DirList – это список директорий, разделенных точкой с запятой (;), которые будут включены в поиск.

Функция FSearch возвращает каталог и имя файла, если файл существует. Если файл, указанный в переменной Path, не найден в списке директорий, то возвращается пустая строка. Функция FSearch всегда начинает поиск с текущей директории, а затем проверяет директории, перечисленные в переменной DirList в том порядке, в котором они перечислены.

Процедура FSplit

Разделяет имя файла на три компонента.

Объявление:

procedure FSplit(Path: PathStr; var Dir: DirStr; var Name: NameStr; var Ext: ExtStr);

Замечания:

Используйте эту процедуру для разделения полного имени файла на три компонента: путь, имя файла и расширение файла. Переменная Path имеет тип PathStr, который определен в модуле DOS. Переменная Dir возвращает путь или часть переменной Path, которая содержит каталог (или каталоги). Переменная Name возвращает фактическое имя файла без расширения. Переменная Ext возвращает расширение файла, которому предшествует точка (.).

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

Процедура GetCBreak

Возвращает состояние проверки Ctrl-Break в DOS.

Объявление:

procedure GetCBreak(var Break: Boolean);

Замечания:

Возвращает TRUE, если Ctrl-Break включена, иначе возвращает FALSE.

С включенной проверкой Ctrl-Break c все вызовы ввода/вывода (консоль, принтер и коммуникации) являются проверяемыми. Чтобы выключить Ctrl-Break, используйте процедуру SetCBreak.

Процедура GetDate

Возвращает текущую дату, установленную в операционной системе.

Объявление:

procedure GetDate(var Year, Month, Day, DayOfWeek: Word);

Функция GetEnv

Возвращает значение указанной переменной окружения.

Объявление:

function GetEnv(VarName: string): string;

Замечания:

VarName – имя переменной для поиска. Если VarName не существует как переменная окружения, то возвращается пустая строка.

Функция GetEnv возвращает строку, назначенную для переменой окружения.

Процедура GetFAttr

Возвращает атрибуты файла.

Объявление:

procedure GetFAttr(var F; var Attr: Word);

Замечания:

F – это файловая переменная, а также типизированный, нетипизированный или текстовый файл, который не открыт. Переменная Attr содержит атрибуты файла.

Файл, связываемый с переменной F, должен быть закрыт. Переменная Attr должна сравниваться с одной из констант атрибутов, которые определены в модуле DOS, с помощью ЛОГИЧЕСКОГО И (AND).

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

Процедура GetFTime

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

Объявление:

procedure GetFTime(var F; var Time: Longint);

Замечания:

Файл, связанный с переменной F должен быть открыт. Время может быть распаковано с помощью процедуры UnPackTime. Ошибки записываются в переменную DosError, которая определена в модуле DOS.

Процедура GetIntVec

Возвращает адрес, записанный в указанном векторе прерывания.

Объявление:

procedure GetIntVec(IntNo: Byte; var Vector: Pointer);

procedure GetIntVec(IntNo: Byte; var Vector: FarPointer);

Замечания:

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

Процедура GetTime

Возвращает текущее время, установленное в операционной системе.

Объявление:

procedure GetTime(var Hour, Minute, Second, Sec100: Word);

Замечания:

Диапазоны возвращаемых значений следующие: Hour (Час) [0..23], Minute (Минута) [0..59], Second (Секунда) [0..59] и Sec100 (сотая доля секунды) [0..99].

Процедура GetVerify

Возвращает состояние проверочного флага в DOS.

Объявление:

procedure GetVerify(var State: Boolean);

Замечания:

State = TRUE, если проверочный флаг DOS включен, иначе FALSE.

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

Процедура Intr

Выполняет указанное программное прерывание.

Объявление:

procedure Intr(IntNo: Byte; var Regs: TRegisters);

Замечания:

Перед вызовом процедуры Intr, загрузите переменную Regs соответствующими параметрами, необходимыми для прерывания. Переменная Regs возвращает значения регистров после вызова прерывания. Вызовы, которые используют регистры ESP и SS не могут быть выполнены. Более подробную информацию о программных прерываниях ищите в руководствах на ваши BIOS и DOS.

Учтите, что все сегментные регистры (DS,ES,FS,GS) должны содержать допустимые значения сегментных дескрипторов или быть установлены в ноль перед вызовом процедуры Intr. Все прерывания, вызов которых требует анализа смещения, должны использовать 32-битное смещение.

Процедура Keep

Эта процедура является только составляющей частью и всегда выдает сообщение об ошибке во время выполнения.

Объявление:

procedure Keep(ExitCode: Word);

Процедура MsDos

 Выполняет вызов функции DOS.

Объявление:

procedure MsDos(var Regs: TRegisters);

Замечания:

Загрузите переменную Regs соответствующими параметрами перед вызовом MS-DOS. Переменная Regs возвращает значения регистров после вызова прерывания. Учтите, что тип TRegisters позволяет доступ к 32-битным регистрам. Вызовы DOS, которые используют регистры ESP и SS не могут быть выполнены. Для прерывания, отличного от $21, используйте процедуру Intr. Более подробную информацию о программных прерываниях DOS ищите в руководствах на вашу DOS.

Учтите, что все сегментные регистры (DS,ES,FS,GS) должны содержать допустимые значения сегментных дескрипторов или быть установлены в ноль для использования MS-DOS.

Процедура PackTime

Преобразует запись DateTime.

Объявление:

procedure PackTime(var T: DateTime; var Time: Longint);

Замечания:

Процедура PackTime может быть использована совместно с процедурой SetFTime. Для распаковки 4-х байтового пакета дата/время в запись DateTime используйте процедуру UnpackTime.

Процедура SetCBreak

Устанавливает состояние проверки Ctrl-Break.

Объявление:

procedure SetCBreak(Break: Boolean);

Замечания:

 С включенной проверкой Ctrl-Break, проверяются все вызовы операций ввода/вывода (консоль, принтер и коммуникации). Чтобы получить состояние Ctrl-Break, используйте процедуру GetCBreak.

Процедура SetDate

Устанавливает текущую дату в операционной системе.

Объявление:

procedure SetDate(Year, Month, Day: Word);

Замечания:

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

Процедура SetFAttr

Устанавливает атрибуты файла.

Объявление:

procedure SetFAttr(var F; Attr: Word);

Замечания:

Файл, связанный с переменной F должен быть закрыт. Переменная Attr должна быть сформирована с помощью операции ЛОГИЧЕСКОЕ ИЛИ (OR) между этой переменной и одной из констант файловых атрибутов. Эти константы определенны в модуле DOS.

Ошибки записываются в переменную DosError, определенную в модуле DOS. Более подробную информацию о файловых атрибутах ищите в руководствах на вашу DOS.

Процедура SetFTime

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

Объявление:

procedure SetFTime(var F; Time: Longint);

Замечания:  Файл, связанный с переменной F должен быть открыт. Упакованный формат дата/время может быть создан с помощью процедуры PackTime. Ошибки записываются в переменную DosError, определенную в модуле DOS. Более подробную информацию об упакованном формате дата/время ищите в руководствах на вашу DOS.

Процедура SetIntVecs

Устанавливает указанный вектор прерывания для указанного адреса.

Объявление:

procedure SetIntVec(IntNo: Byte; Vector: Pointer);

procedure SetIntVec(IntNo: Byte; Vector: FarPointer);

Замечания:

Прерывания могут происходить в защищенном или реальном режиме.

Процедура SetTime

Устанавливает текущее время в операционной системе.

Объявление:

procedure SetTime(Hour, Minute, Second, Sec100: Word);

Замечания:

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

Процедура SetVerify

Устанавливает состояние флага проверки в DOS.

Объявление:

procedure SetVerify(Verify: Boolean);

Процедура SwapVectors

 Процедура SwapVectors ничего не делает и предоставляется только для совместимости с Borland Pascal.

Объявление: procedure SwapVectors;

Процедура UnpackTime

Преобразует переменную типа Longint в запись.

Задание для самостоятельной работы.

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

  1.  При выборе команды 1 происходит создание файла с расширением txt и добавление в файл определенного количества строк.
  2.  При выборе команды 2 происходит удаление файла.
  3.  При выборе команды 3 на экран консоли происходит вывод содержимого из файла, а так же при необходимости происходит добавление информации в файл.
  4.  При выборе команды 4 на экран выводится дата и время создания файла.
  5.  При выборе команды 5 происходит вывод атрибутов файла.
  6.  При выборе команды 6 программа завершает свою работу.

2. Написать программу-таймер. В программе необходимо реализовать несколько режимов работы таймера.

  1.  При выборе команды 1 отображается режим таймера для отсчета до Нового года.
  2.  При выборе 1 – отображается полное количество месяцев, дней, часов, минут и секунд, оставшихся до Нового года.
  3.  При выборе 2 – отображается количество дней, оставшихся до Нового года.
  4.  При выборе 3 – отображается количество часов, оставшихся до Нового года.
  5.  При выборе 4 – отображается количество минут, оставшихся до Нового года.
  6.   При выборе 5 – отображается количество месяцев, оставшихся до Нового года.
  7.  При выборе 6 – отображается количество секунд, оставшихся до Нового года.

  1.  При выборе команды 2 отображается оставшееся время до окончания учебной практики. Учебная практика заканчивается 26 декабря в 13:15.
  2.  При выборе команды 3 отображается оставшееся до конца пары время. Программа должна автоматически определять, какая пара сейчас идет, и выводить оставшееся до звонка время. Если в момент запуска программы идет перемена, то программа должна вывести соответствующее сообщение. Если текущее время до 8:30, то программа выдает сообщение о том, что учебный день еще не начался. Если текущее время больше 13:15, то необходим вывод сообщения, что первая смена уже закончена.
  3.  При выборе команды 4 программа прекращает работу. Необходимо реализовать программу таким образом, что выход из программы может осуществляться только выбором команды 4.

Индивидуальное задание:

Добавить пятый пункт в главное меню. При выборе пункта 5 программа начинает отсчитывать время до Вашего дня рождения.  

3. Добавить к программе 1 навигацию посредством стрелок. Пункты меню должны выбираться перемещением стрелок. Подтверждение выбора осуществляется клавишей <Enter>




1.  2014 г
2. і. Навіть відпочинок та розваги стали залежними від них
3. Тема 1. Производство как основа экономического развития общества Производство служит основой благосостоя
4. На тему Социальная защита пожилых и старых людей.html
5. чистою буржуазною революцією
6. на тему- Проектирование шиноремонтного участка Соде
7. СанктПетербургский государственный экономический университет Кафедра менеджмента организации
8. 1. Инвестиции ~ это долгосроч вложен капитала с целью получен прибыли Инвестиця деятть ~ это деятть физ ю.html
9. Радянізація західноукраїнських земель (1939-1944 рр)
10. Расчет тепловой схемы котельной