ЗАДАЧА №2
СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ. ФАЙЛЫ. РАБОТА С ТЕКСТОВЫМИ ФАЙЛАМИ
ТЕКСТОВЫЙ ФАЙЛ
- структурированный тип, представляющий собой набор строк переменной длины. В отличие от других типов файлов для текстовых возможен только последовательный доступ к элементам (т.е. путем просмотра последовательно всех записанных элементов).
2.1 ЭТАПЫ РАБОТЫ С ТЕКСТОВЫМИ ФАЙЛАМИ
-
Описание файловой переменной
-
Связь переменной с физическим файлом
-
Инициализация (открытие) файла
-
Ввод/вывод в файл
-
Закрытие файла
2.1.1Описание файловой переменной
Описание:
-
VAR <ИМЯ2>: TEXT;
ПРИМЕРЫ:
-
TYPE
FT=TEXT; {файловый тип данных- синоним TEXT}
VAR
A1,A2:TEXT; {описано три переменные текстового типа}
A0:FT;
В любой программе уже существуют две файловые переменные типа TEXT, которые не описываются в разделе описаний. По умолчанию они связаны с консолью (стандартными устройствами ввода/вывода):
-
INPUT
- связана с клавиатурой и предназначена для ввода данных;
-
OUTPUT
– связана с экраном и реализует стандартный вывод данных.
Можно перенаправить стандартный ввод/вывод, используя ASSIGN для этих переменных.
2.1.2 Связь переменной с физическим файлом
-
ASSIGN (<ПЕРЕМЕННАЯ>,<ФАЙЛ>)
- связывает файловую переменную <ПЕРЕМЕННАЯ> с файлом или логическим устройством, имя которого находится в строковой переменной или константе <ФАЙЛ>. Связь сохраняется до следующего оператора ASSIGN для данной переменной или до конца программной единицы, в которой определена указанная переменная.
Логические устройства
- аппаратные средства компьютера, потенциальные источники или приемники текстовой информации. Все логические устройства имеют собственные уникальные имена:
-
‘CON’ – КОНСОЛЬ: ( ввод – клавиатура; вывод – экран)
-
‘PRN’ – ПРИНТЕР
-
‘LPT1’=‘PRN’,’LPT2’,’LPT3’ – ИМЕНА ПРИНТЕРОВ
-
‘AUX’=‘COM1’,’COM2’ – ИМЕНА КОММУНИКАЦИОННЫХ КАНАЛОВ
-
‘NUL’ – ПУСТОЕ ЛОГИЧЕСКОЕ УСТРОЙСТВО, (используется как «заглушка» при отладке)
Логические устройства могут быть связаны только с текстовыми файловыми переменными.
ПРИМЕРЫ
-
ASSIGN(A2,’F1.TXT’);
ASSIGN(A1,’PRN’);
В данном случае переменная A2 связана с текстовым файлом, а A1 – с принтером.
2.1.3 Открытие файла
REWRITE(<ФП>)
- открытие файла на запись, причем указатель помещается в начало файла. Если файл существует, то его содержимое уничтожается. Если файл не существует, то он создается.
RESET(<ФП>)
-открытие файла только на чтение, причем указатель помещается в начало файла. Если файл не существует, генерируется ошибка ввода/вывода.
APPEND(<ФП>);
- открытие файла на дозапись, причем указатель помещается в конец файла (на признак конца файла). Если файл не существует, генерируется ошибка.ввода/вывода. Эта процедура используется только для текстовых файлов.
КОРРЕКТНОЕ ОТКРЫТИЕ ФАЙЛА
-
{$I-} {отключить контроль ошибок ввода/вывода – директива компилятора}
APPEND(A2); {открыть файл на дозапись}
{$I+} {включить контроль ошибок ввода/вывода – директива компилятора}
IF IORESULT<>0 THEN {проверить функцию ошибки}
… {действия в случае ошибки – отсутствия файла на диске}
ELSE
… {действия в случае успешного открытия файла}
2.1.4 Ввод/вывод в текстовый файл
После каждой операции ввода/вывода указатель файла всегда смещается на следующий компонент файла.
ЧТЕНИЕ
-
READ (<ФП>,<СП.ВВОДА>)
-
READ (<СП.ВВОДА>) (ввод из переменной input)
– ввод осуществляется до тех пор, пока не встретится признак конца строки или конца файла, поэтому таким образом нельзя считать последовательность строк;
-
READLN (<ФП>,<СП.ВВОДА>)
-
READLN(<СП.ВВОДА>) (ввод из переменной input)
– осуществляется
ввод <
<СП. ВВОДА> - список переменных любых базовых типов, кроме BOOLEAN.
ЗАПИСЬ
-
WRITE (<ФП>,<СП.ВЫВОДА>)
-
WRITE (<СП.ВЫВОДА>) (вывод в переменную output)
– вывод содержимого
<
-
WRITELN (<ФП>,<СП.ВЫВОДА>)
-
WRITELN (<СП.ВЫВОДА>) (вывод в переменную output)
– вывод содержимого
<
<СП. ВЫВОДА> - список переменных и/или констант любых базовых типов. В нем могут быть указаны форматы – через двоеточие – количество позиций для вывода (если требуется больше, то вывод не обрезается, а если меньше, то дополняется пробелами слева. А для вещественных может быть также указано количество полей для дробной части).