WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     || 2 | 3 | 4 |
ГОСУДАРСТВЕННЫЙ КОМИТЕТ РОССИЙСКОЙ ФЕДЕРАЦИИ ПО ВЫСШЕМУ ОБРАЗОВАНИЮ ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЛГОРИТМИЧЕСКИЕ ЯЗЫКИ И ПРОГРАММИРОВАНИЕ Методические указания к лабораторным и индивидуальным работам ПЕНЗА 2000 УДК 681.3 Содержаться сведения, необходимые для выполнения лабораторных и индивидуальных работ по основам программирования на алгоритмическом языке Турбо Паскаль с использованием файлов и динамических структур данных; приводятся примеры создания программ, варианты заданий для выполнения лабораторных работ.

Методические указания разработаны на кафедре “Системы автоматизации проектирования” и предназначены для студентов специальности 220300.

Ил. 7, табл. 2, библиогр. 5 назв.

Составители : Л. И. Аксенова, Л. В. Игошина Рецензент: к.т.н., доцент кафедры ВМ и С ПТИ Бершадская Е.Г.

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

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

Для использования файлов в программе должна быть объявлена переменная файлового типа. В зависимости от способа объявления переменной файлового типа различают три вида файлов [2]:

- текстовые файлы (задаются с помощью типа TEXT);

- типизированные файлы (задаются описанием FILE OF...);

- не типизированные или безтиповые файлы (задаются типом FILE);

Переменная файлового типа или просто файловая переменная должна быть объявлена в разделе VAR одним из следующих трех способов:

<ИМЯ> : TEXT;

<ИМЯ> : FILE OF <ТИП>;

<ИМЯ> : FILE;

<ИМЯ> - имя файловой переменной (правильный идентификатор);

<ТИП> - любой тип ТР кроме файлов.

Например:

Type Spisok = Record { Описание типа структуры} Nom: byte;

FIO: string[30];

Adres: string;

End;

Var F1: File; { Описание безтипового файла} F2: Text; { Описание текстового файла} F: File of Spisok; { Описание типизированного файла} F_sim: File of char;{Описание файла, содержащего только символы} 1.2. Доступ к файлам Любой программе доступны два предварительно объявленных файла со стандартными файловыми переменными:

INPUT - для чтения данных с клавиатуры;

OUTPUT - для вывода на экран дисплея;

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

Связывание производится с помощью стандартной процедуры:

ASSIGN(<файловая переменная>,<имя файла или логическое устр-во>);

Файловую переменную называют также логическим именем файла.

Имя файла - это любое выражение строкового типа, которое строится по правилам определения имен в операционной системе MS-DOS [3].

Имя файла может содержать до 8 разрешенных символов (прописных и строчных букв латинского алфавита, арабских цифр или специальных символов: ! @ # $ % ^ & ( ) ~ - _ ).

За именем может следовать расширение, содержащее до трех разрешенных символов, которое отделяется от имени точкой. Если файл располагается не в одном каталоге с использующей его программой, то перед именем должен указываться путь к файлу. Различают полный путь к файлу, состоящий из имени диска и имен каталогов вышестоящих уровней, и относительный путь, состоящий из имен каталогов и символов “..”, обозначающих родительский каталог. Имена каталогов отделяются друг от друга символом “ \ ”. Имя диска - это один из символов A... Z после которого ставится двоеточие. Путь к файлу вместе с именем и расширением называют полным именем файла.

Например:

C:\MYDIR\K1\file.dan - полное имя файла, расположенного на диске С:, MYDIR\K1\ - имена каталога и подкаталога, составляющих путь к файлу, а file.dan - имя файла и расширение.

Максимальная длина полного имени файла - 79 символов.

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

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

RESET ( <файловая переменная>);

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



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

REWRITE ( <файловая переменная>);

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

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

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

CLOSE ( <файловая переменная>);

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

Для определения конца файла используется стандартная функция:

EOF ( <файловая переменная>) Эта функция возвращает значение типа BOOLEAN. Значение этой функции равно TRUE, если файловый указатель стоит в конце файла, т.е. встретился признак конца файла, и FALSE - в противном случае. При записи это означает, что очередной компонент будет добавлен в конец файла, а при чтении - что файл исчерпан.

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

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

Новое имя - строковое выражение (см. процедуру ASSIGN).

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

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

ERASE ( <файловая переменная>);

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

1.3. Лабораторная работа № Текстовые файлы Цель работы: Ознакомиться с процедурами ввода-вывода для текстовых файлов и особенностями работы с ними. Приобрести навыки разработки программ с использованием текстовых файлов.

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

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

EOF - код #26 из ASCII (American Standard Code for Information Interchange - американский стандартный код для обмена информацией).

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

READ и READLN - для чтения данных из файла;

WRITE и WRITELN - для записи данных в файл.

Процедура READ обеспечивает ввод символов, строк и чисел:

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

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

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

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

При вводе переменных типа STRING количество считанных процедурой и помещенных в строку символов равно максимальной длине строки, если только раньше не встретились символы CR или EOF. В этом случае сами символы CR и EOF в строку не помещаются. Если количество символов во входном потоке данных больше максимальной длины строки, лишние символы до конца строки отбрасываются.

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

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

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

Процедура WRITE обеспечивает вывод информации в файл:

WRITE (<файловая переменная>,<список вывода>);

Если файловая переменная отсутствует, то обращение происходит к стандартному файлу OUTPUT и данные обычно выводятся на экран дисплея.

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





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

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

При выводе логических выражений в зависимости от их значения выводятся строки FALSE или TRUE.

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

Процедура WRITELN идентична процедуре WRITE, но выводимая строка завершается кодами CR и LF и осуществляется переход к новой строке файла.

WRITELN (<файловая переменная>,<список вывода>);

Процедура WRITELN может использоваться без параметра “Список вывода”. В этом случае в файл передается маркер EOLN.

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

APPEND (<файловая переменная>;

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

FLUSH ( <файловая переменная>);

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

Размер буфера для текстового файла по умолчанию равен 127 байт.

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

SETTEXTBUF( <файловая переменная>,<переменная, задающая размер буфера>);

Обращение к процедуре SETTEXTBUF производится после процедуры ASSIGN до открытия файла.

Переменная, задающая размер буфера, должна быть предварительно описана в разделе VAR как массив данных типа Byte или Char, например:

VAR Buf: Array[1..1024] of Byte; {Для буфера отводится память до 1Кб.} F:TEXT;

...

ASSIN(F,’file.dan’);

SETTEXTBUF(F,Buf);

...

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

EOLN( <файловая переменная>) - возвращает значение TRUE, если во входном текстовом файле достигнут маркер конца строки.

SEEKEOLN( <файловая переменная>) - пропускает все пробелы и знаки табуляции до маркера конца строки EOLN или до первого значащего символа и возвращает значение TRUE, если маркер EOLN обнаружен.

SEEKEOF( <файловая переменная>) - пропускает все пробелы, знаки табуляции и маркеры конца строки до маркера конца файла EOF или до значащего символа и возвращает значение TRUE, если маркер обнаружен.

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

Пусть файл Matr.dan с заданной матрицей имеет вид:

5 2 4 6 2 8 4 6 3 0 9 6 5 3 1 8 4 3 ОПИСАНИЕ ПРОГРАММЫ USES CRT; { Подключение стандартного модуля ТР} Var F_in, F_out : Text; { Файловые переменные для связи с входным и выходным файлами} Matr : Array[1..50,1..40] of Integer; {Описание двумерного массива} Sum : Integer; { Переменная для хранения суммы элементов каждой строки матрицы} Str, Stl : Byte; { Число строк и столбцов матрицы} i, j : byte; { Рабочие переменные} Begin Assign(F_in, Matr.dan); { Связывание файловой переменной с именем файла на диске} Reset(F_in); { Открытие файла для чтения} Str := 0; Stl := 0; i := 0;

{ Ввод матрицы из файла в массив} While Not Eof (F_in) Do {Цикл до конца файла } begin inc(i); j := 0;

While Not Eoln(F_in) Do {Цикл до конца строки} begin inc(j);

Read (F_in, Matr[i,j]); {Чтение очередного элемента из файла, преобразование его и заполнение массива} end;

Readln (F_in); {Переход к следующей строке файла} Stl:=j; { Число столбцов} end; Str:=i; { Число строк} Writeln ( Число строк =, Str, Число столбцов =, Stl);

{Определение и вывод в файл значений сумм элементов в каждой строке матрицы} Assign (F_out, Sum.dan);

Rewrite (F_out); {Открытие файла для записи} For i := 1 To Str Do {Цикл по строкам массива } begin Sum := 0;

For j := 1 To Stl Do {Цикл по столбцам} Sum := Sum + Matr[i,j]; {Суммирование элементов строк } Write (F_out, Sum:6); {Запись значения суммы в файл } Writeln (В строке,i, сумма =, Sum); {Вывод значения суммы на экран} end;

Close (F_in); Close (F_out); {Закрытие файлов } End.

Pages:     || 2 | 3 | 4 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.