Типы файлов, создание файлов в среде Турбо-Паскаль 7

Автор работы: Пользователь скрыл имя, 15 Августа 2013 в 00:51, курсовая работа

Краткое описание

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

Содержание

Введение………………………………………..……………………………. 2
Описание файлового типа………………………………………..………… 3
Физический и логический файлы……………………………………..…….4
Классификация файлов в Турбо Паскале…………………………………...4
Доступ к файлам………………………………………………………….…. 5
Инициация файла……………………………………………………….……6
Процедуры и функции для работы с файлами………………………..……7
Текстовые файлы……………………………………………………………13
Использование буфера ввода-вывода………………………………….…. 16
Типизированные файлы ………………………………………………..…..17
Нетипизированные файлы…………………………………………...……..19
Литература…………………………………………………………… …….21

Вложенные файлы: 1 файл

Контрольная работа по информатике. Файлы.doc

— 154.00 Кб (Скачать файл)

 Ряд полезных файловых  процедур и функций становится  доступным при использовании   библиотечного модуля DOS.TPU,  входящего в стандартную библиотеку TURBO.TPL. Эти процедуры и функции указаны ниже : Доступ к ним возможен только после объявления USES DOS в начале программы.

Функция DISKFREE (<диск>) : LONGINT. Возвращает объем в байтах свободного пространства на указанном диске. При обращении к функции выражение <диск> типа BYTE определяет номер диска: 0 — устройство по умолчанию, 1 - диск А, 2 - диск В и т.д. Функция возвращает значение -1, если указан номер несуществующего диска.

Функция DISKSIZE (<диск>) : LONGINT. Возвращает полный объем диска в байтах или - 1 , если указан номер несуществующего диска.

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

FINDFIRST (<маска>, <атрибуты>, <имя>)

Здесь <маска> - строковое выражение, содержащее маску файла;

<атрибуты> - выражение типа BYTE, содержащее уточнение к маске (атрибуты);

<имя> — переменная типа SEARCHREC, в которой будет возвращено имя файла.

При формировании маски  файла используются следующие символы-заменители ДОС:

*  означает, что на месте этого символа может стоять сколько угодно (в том числе ноль) разрешенных символов имени или расширения файла;

?  означает, что на  месте этого символа может  стоять один из разрешенных  символов.

Например:

*. *       выбирает  все файлы из каталога;

с*.*      выбирает все файлы с именами, начинающимися  на с (cl.pas,      cc 12345, c.dat и т.д.);

a?.dat   выбирает имена файлов типа aO.dat, az.dat и т.д. Маске может предшествовать путь. Например, команда

         с:\dir\subdir\*.pas

означает выбирать все файлы с расширением .PAS из каталога SUBDIR,  находящегося на диске С; каталог SUBDIR зарегистрирован в каталоге верхнего уровня DIR, который, в свою очередь, входит в корневой каталог.

Байт <атрибуты> содержит двоичные разряды (биты), уточняющие к каким именно файлам разрешен доступ при обращении к процедуре FINDFIRST . Вот как объявляются файловые атрибуты в модуле DOS.TPU:

 

const.

        ReadOnly = $01; (только чтение)

        Hidden = $02; (скрытый файл)

        SysFile = $04; (системный файл)

        VolumeID = $08; (идентификатор тома)

        Directory = $10; (имя подкаталога)

        Archive = $20; (архивный файл)

        AnyFile = $3F; (любой файл)

Комбинацией бит в  этом байте можно указывать самые  разные варианты, например $06 — выбирать все скрытые и/или системные файлы.

Результат работы процедуры FINDFIRST возвращается в переменной типа SEARCHREC. Этот тип в модуле DOS.TPU определяется следующим образом:

type

SearchRec = record

Fill : array [1..21] of byte;

Attr : byte;

Time : longint;

Size : longint;

Name : string [12]

 end;

Здесь Attr - атрибуты файла (см. выше);

Time — время создания или последнего обновления файла; воз вращается в упакованном формате; распаковать параметр можно процедурой UNPACKTIME (см. ниже );

Size — длина файла в байтах;

Name — имя и расширение файла.

Для распаковки параметра TIME используется процедура:

UNPACKTIME(Time: Longint; var T:DateTime).

 В модуле DOS.TPU объявлен следующий тип DateTime:

type

DateTime = record

        year : word; {год в формате 19ХХ}

        month: word; {месяц 1..12}

        day : word; {день 1..31}

        hour : word; {час 0..23}

        min : word; {минуты 0..59 }

        sec : word {секунды 0..59)

 end;

Результат обращения  к процедуре FINDFIRST можно проконтролировать с помощью функции DOSERROR типа WORD, которая возвращает значения:

0 - нет ошибок;

2 - не найден каталог;

18 - каталог пуст (нет  указанных файлов).

Процедура FINDNEXT. Возвращает имя следующего файла в каталоге. Формат обращения:

FINDNEXT (< сл. файл >)

Здесь < сл. файл> - запись типа SEARCHREC (см. выше), в которой возвращается информация о файле.

Процедура GETFTIME. Возвращает время создания или последнего обновления файла. Формат обращения:

                 GETFTIME (<ф.п.>, <время>)

Здесь <время> - переменная типа LONGINT , в которой возвращается время в упакованном формате.

Процедура SETFTIME. Устанавливает новую дату создания или обновления файла. Формат обращения:

 SETFTIME (<ф.п.>, <время>)

Здесь <время> - время и дата в упакованном формате.

Упаковать запись типа DATETIME в переменную типа LONGINT можно процедурой

PACKTIME (var T:DateTime; var Time:LongInt).

(Описание типа DATETIME см. выше).

Процедура GETFATTR. Позволяет получить атрибуты файла. Формат обращения:

       GETFATTR (<ф.п.>, <атрибуты>)

Здесь <атрибуты> — переменная типа WORD, в младшем байте которой возвращаются устанавливаемые атрибуты файла.

Процедура SETFATTR. Позволяет установить атрибуты файла. Формат обращения:

      SETFATTR (<ф.п.>, <атрибуты>)

Функция FSEARCH: PATHSTR. Ищет файл в списке каталогов. Формат вызова:

      FSEARCH (<имя>, <сп. каталогов>)

Здесь <имя> - имя отыскиваемого файла (строковое выражение или переменная типа PATHSTR; имени может предшествовать путь);

<сп. катологов> - список  каталогов, в которых отыскивается  файл (строковое выражение или переменная типа STRING);  имена каталогов разделяются точкой с запятой.

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

Тип PATHSTR в модуле DOS.TPU объявлен следующим образом:

type

PathStr = String[79];

Следует учесть, что поиск  файла всегда начинается в текущем  каталог и только после этого  продолжается в тех, что перечислены в < сп. каталогов >. Если файл обнаружен, дальнейший поиск прекращается, даже если часть каталогов осталась не просмотренной . В частности, если файл зарегистрирован в текущем каталоге, он «заслонит» собой одноименные файлы в других каталогах.

Пусть, например, на диске  имеется файл \SUBDIR\MYFILE.PAS. Тогда в случае, если текущий каталог - корневой, обращение

FSEARCH ('MYFILE.PAS','\SUB; \SUBDIR')

вернет строку \SUBDIR\MYFILE.PAS,

а обращение

FSEARCH ('MYFILE.PAS','\SUB')

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

Процедура FSPLIT. «Расщепляет» имя файла, т.е. возвращает в качестве отдельных параметров путь к файлу, его имя и расширение. Формат обращения:

FSPLIT (<файл>, <путь>, <имя>, <расширение>)

Здесь  <файл> - строковое  выражение, содержащее спецификацию  файла (имя с расширением и, возможно, с предшествующим  путем);

           <путь>- переменная типа DIRSTR=STRING , в которой

возвращается путь к  файлу;

           <имя> - переменная типа NAMESTR=STRING , в которой

возвращается имя файла;

.        <расширение> - переменная типа EXTSTR = STRING , в которой возвращается расширение с предшествующей ему точкой.

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

Функция FEXPAND: PATHSTR. Дополняет файловое имя до полной спецификации, т.е. с указанием устройства и пути. Формат вызова:

FEXPAND (< файл >)

Здесь <файл> - строковое выражение или переменная типа PATHSTR.

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

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

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

Текстовый файл трактуется в Турбо Паскале как совокупность строк переменной длины. Доступ к каждой строке возможен лишь последовательно, начиная с первой. При создании текстового файла в конце каждой записи (строки) ставится специальный признак EOLN (End Of LiNe - конец строки), а в конце всего файла - признак EOF (End Of File — конец файла). Эти признаки можно протестировать одноименными логическими функциями (см. ниже). При формировании текстовых файлов используются следующие системные соглашения:

EOLN - последовательность кодов ASCII #13 (CR) и # 10(LF);

EOF - код # 26 стандарта ASCII.

Для доступа к записям  применяются процедуры READ, READLN, WRITE,  WRITELN. Они отличаются возможностью обращения к ним с переменным числом фактических параметров, в качестве которых могут использоваться символы, строки и числа. Первым параметром в любой из перечисленных процедур может стоять файловая переменная. В этом случае осуществляется обращение к дисковому файлу или логическому устройству, связанному с переменной процедурой ASSIGN. Если файловая переменная не указана, происходит обращение к стандартным файлам INPUT и OUTPUT.

Процедура READ. Обеспечивает ввод символов, строк и чисел. Формат обращения:

READ (<ф.п.>,<сп.ввода>) или READ (<сп.ввода>)

Здесь <сп.ввода> — список ввода: последовательность из одной или более переменных типа CHAR, STRING, а также любого целого или вещественного типа.

При вводе переменных типа CHAR выполняется чтение одного символа из файла и присваивание считанного значения переменной. Если перед выполнением чтения указатель файла достиг конца очередной строки, результатом чтения будет символ CR (ASCII код #13), а если достиг конца файла, то — символ EOF (код #26). При вводе с клавиатуры символ CR вводится при нажатии на клавишу Enter, а символ EOF — при одновременном нажатии клавиш CTRL и Z .

При вводе переменных типа STRING количество считанных процедурой и помещенных в строку символов равно максимальной длине строки, если только раньше не встретились символы CR или EOF. В этом случае  символы CR и EOF в строку не помещаются. Если количество символов во входном потоке данных больше максимальной длины строки, то «лишние»  символы до конца строки отбрасываются, а новое обращение к READ  возвращает пустую строку. Таким образом, процедура READ не в с стоянии прочесть последовательность строк: первая строка будет прочитана нормально, а все последующие окажутся пустыми. Для ввода последовательности строк нужно использовать процедуру READLN  (см. ниже).

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

При использовании процедуры READ применительно к стандартному файлу INPUT, т.е. при вводе с клавиатуры, символьные строки запоминаются в буфере, который передается процедуре только после нажатия на клавишу Enter. Это позволяет редактировать данные при их вводе. Для редактирования используются следующие клавиши:

• Backspace, CtrL — H, перевод курсора влево — стирают символ слева от курсора;

• перевод курсора вправо — восстанавливает символ за символом предыдущую строку ввода;

• CtrL – Z   Enter — завершает ввод по процедуре READ, оставшиеся «лишние» символьные параметры принимают значение CHR(26), строки возвращаются пустыми, а численные переменные остаются без изменения.

Максимальная длина  буфера ввода при работе с клавиатурой  составляет 127 символов. Ввод с клавиатуры по процедуре READ сопровождается эхо - повтором вводимых символов на экране ПК.

Процедура READ прекрасно приспособлена к вводу чисел. При обращении к ней за вводом очередного целого или вещественного числа процедура «перескакивает» маркеры конца строк, т.е. фактически весь файл, рассматривается ею как одна длинная строка, содержащая текстовое представление чисел. В сочетании с проверкой конца файла функцией EOF процедура READ позволяет организовать простой ввод массивов данных.

Процедура READLN. Обеспечивает ввод символов, строк и чисел. Эта процедура идентична процедуре READ за исключением того, что после считывания последней переменной оставшаяся часть строки до маркера EOLN  пропускается, поэтому следующее обращение к READLN или READ начинается с первого символа новой строки. Кроме того, эту процедуру можно вызвать без параметра <сп. ввода> (см. процедуру READ), что приведет к пропуску всех символов текущей строки вплоть до EOLN.

Если процедура используется для чтения с клавиатуры, нажатие  на клавишу Enter отобразится на экране как последовательность CR + LF, курсор будет помещен в начало следующей строки, в то время как в процедуре READ эхо - повтором клавиши Enter является символ CR и курсор помещается в начало текущей строки.

Процедура WRITE. Обеспечивает вывод информации в текстовый файл или передачу ее на логическое устройство. Формат обращения:

WRITE (<ф.п.>, <сп. вывода>) или WRITE (<сп. вывода>)

Здесь <сп. вывода> - список вывода: последовательность из одного или более выражений типа CHAR, STRING, BOOLEAN, а также любого целого или вещественного типа.

Использование буфера ввода-вывода.

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

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

Информация о работе Типы файлов, создание файлов в среде Турбо-Паскаль 7