Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 1601

.pdf
Скачиваний:
5
Добавлен:
30.04.2022
Размер:
1.46 Mб
Скачать

Итак, за именем диска может указываться имя каталога, за именем каталога может следовать одно или несколько имен каталогов нижнего уровня. Каждому из них должна предшествовать обратная косая черта (\), т.е. весь путь к файлу отделяется от имени файла обратной косой чертой. Максимальная длинна имени вместе путем – 79 символов, например:

Var

Finp: text;

Flout: file of string;

Const

Name = ‗c: \dir\Sub dir\out. txt‘;

Begin

Assign (finp,‘123.dat);

Assign (fout, name);

End.

Инициация файла.

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

Таким образом, инициировать (открыть) файл означает

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

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

RESET (< ф.п.>);

Здесь < ф.п.> - файловая переменная, с вязанная ранее процедурой ASSIGN с уже существующим файлом или логическим устройством – приемником информации. При выполнении этой процедуры дисковый файл или логическое устройство подготавливается к чтению информации. В результате специальная переменная – указатель, связанная с этим файлом, будет указывать на начало файла, т.е. на самый первый компонент с порядковым номером 0 (см. рис.4.2.11.).

Рассмотрим фрагмент программы иллюстрирующей вышеизложенное:

Var

F: life of char; Begin

Assign (f,‘ my file. dat‘);

Reset (f);

end.

Рассмотрим другую стандартную процедуру REWRITE:

REWRITE (< ф.п.>)

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

Другая процедура:

APPEND (<ф.п.>);

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

Процедура APPEND применима только к текстовым файлам, т.е. их файловая переменная должна иметь тип TEXT. Кроме того данной процедурой нельзя инициировать запись в типизированный или не типизированный файл. Если текстовый ранее уже был открыт с помощью RESET или REWRITE, то использование APPEND приведет к закрытию этого файла и открытию его вновь, но уже для добавления файла.

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

Выше были рассмотрены процедуры инициации файлов. Рассмотрим дополнительные процедуры и функции.

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

CLORE (<ф.п.>);

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

RENAME (<ф.п.>, < новое имя>);

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

Процедура ERASE. Уничтожает файл. Формат обращения:

ERASE (<ф.п.>);

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

В Turbo Pascal существует еще множество дополнительных процедур и функций (FLUSH, EOF, GETDIR, MKDIR, RMDIR и т.д.), рассмотренных в соответствующей литературе.

Здесь же рассмотрим только процедуры READ, WRITE и функцию EOF.

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

READ (< ф.п.>, <сп. ввода>); или READ (< сп. ввода>); Здесь < сп. ввода> - список ввода: последовательность из одной или более переменных типа CHAR, STRING, а та же любого целого или вещественного типа. Рассмотрим пример: пусть имеется программа, в которой имеются следующее описание переменных:

Var

Salary: Real;

Name: String; Separator: Char; My Data: Text;

Здесь, последняя строка объявляет переменную My Data, относящуюся к типу TEXT. Тип TEXT – это стандартный тип для текстовых файлов.

Далее, если в программе будет:

Read ( My Data, Salary, Name);

то этот оператор будет считывать три элемента данных из файла My Data, отправляя первый из них в переменную Salary, второй - Separator и третью – в

Name.

При этом, Turbo Pascal «знает» откуда ему с помощью этого оператора считывать данные, т.к. самый первый параметр оператора Read представляет собой переменную типа TEXT и Turbo Pascal считывает данные из файла соответствующего этой переменой ( в противном случае данные считываются с клавиатуры).

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

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

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

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

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

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

Функция EOF. Логическая функция, тестирующая конец файла. Возрастает – TRUE? Если файловый указатель стоит в конце файла. При записи это означает, что очередной компонент будет добавлен в конце файла, при чтении – это файл исчерпан. Формат обращения:

EOF (<ф.п>): BOOLEAN;

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

Program Squ; Var

In File, out File: Text; {входной и выходной файл}

In File Name: String; {имя входного файла} Next Num: Real; {следующие число}

Begin

{Подготовка файлов для записи и считывания} Write (‗Введите имя файла‘);

Readln (In File Name); {ввести имя для IN File}

Assign (In File, In File Name);

Reset (In File); {открытие In File для считывания}

Assign (Out File,‘ Squares.Txt‘);

Rewrite (Out File); {открытие Out File для записи} {Запись в выходной файл «шапки»

будущей таблицы}

Writeln (Out File,‘N‘:10, ‗корень‘:15, ‗квадрат‘:15);

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

While not EOF (In File) do Begin

Readln (In File, Next Num); {Следующие число}

Writeln (Out File, Next Num: 10:2 Sqrt (Next Num):15:2, Sqr (Next Num):15:2);

End;

{закрытие файла} Cloze (In File);

Cloze (Out File);

Writeln (‗Таблица корней и квадратов‘

‗Выведены в файл Squares.txt.‘);

end.

Работа программы (после запуска) начинается со считывания в переменную In File Name, принадлежащую типу String, полного имени файла с входной информацией. После выхода из цикла, файлы закрываются и имя выходного файла (Squares.txt) выводится на экран, чтобы пользователь программы знал, где искать результаты работы программы. Обычно, имея дело с текстовым файлами, программисты используют расширения .TXT(что соответствует TEXT) и .DAT(что соответствует Data). Пробный запуск программы, результаты которого:

<Введите имя файла >Numbers.txt

Таблица корней и квадратов выведена в файл

Squares.txt

Показывает, что программа выводит на экран две строки.

Первая из них представляет собой приглашение, в ответ на которое пользователю следует с клавиатуры ввести внешнее имя файла, содержащего входную информацию(Numbers.txt). А вторая строка выводит имя выходного файла(Squares.txt), которое задает второй оператор Assign в программе.

После открытия файлов, программа записывает в выходной файл заголовок будущей таблицы. Зачем начинается выполнение цикла while, в котором оператор Readl считывает каждое число из файла с входной информацией, а оператор Writeln записывает в следующую строку выходного файла три результата (число, квадратный корень и квадрат). Хотя число (значащих) символов в выводимой строке может варьироваться программа всегда записывает в эту строчку 40 символов, включая символ <eoln> (т.е. если символ меньше в строку добавляется нужное число пробелов).

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

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

В таблице 4.2.3. показан пример файла с входными данными (левый столбец) и пример выходного файла (три столбца справа).

 

Файл Numbers.txt

Файл Squares.txt

 

 

 

 

 

 

 

 

N

квадратичный корень

 

 

квадрат<eoln>

 

 

 

 

100<eoln>

100.00

10.00

 

 

10000<eoln>

 

 

 

 

4.00<eoln><eof>

4.00

2.00

 

 

16.00<eoln><eof>

 

 

 

 

 

 

 

 

ЗАКЛЮЧЕНИЕ.

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

―Электрофикация и автоматизация сельского хозяйства‖ и может быть полезна студентам других специальностей, различных форм обучения. Основной целью пособия является научить студента самостоятельно составлять элементарные программы на алгоритмическом языке Turbo Pascal с последующей их реализацией на персональном компьютере.

В то же время в данном учебном пособии не приведены основы программирования на других

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

Отсутствует в пособии структура, арифметические и логические основы работы ЭВМ, а также системное программное обеспечение. Кроме того, не представлены средства графического представления информации, материал по работе с различными редакторами(Word, Exсel, Edit) и т.д.

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

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

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

БИБЛИОГРАФИЧЕСКИЙ СПИСОК.

1.Фаронов В.В. Турбо – Паскаль 7.0 начальный курс – М.: ―Нолидж‖, 1997

2.Фаронов В.В. Основы Турбо – Паскаля. – М.: ―МВТУ – ФЕСТОДИДАКТИК‖, 1993.