Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Процедура записи в текстовый файл WRITELN

Поиск

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

Стандартное обращение к процедуре имеет вид:

writeln(<имя файловой переменной типа text>)

 

Пример записи в текстовый файл

program outfile;

var f:text;

begin

assign(f,'c:\tp\user\dandatt.pas');

rewrite(f);

write(f,'пример':3);

write(f,'вывода':10);

write(f,true:6);

write(f,false:1);

writeln(f);

write(f,-5:4);

write(f,-252:1);

write(f,32767);

write(f,-3.56);

writeln(f);

write(f,567.42:8);

writeln(f);

write(f,567.42:1:4);

close(f)

end.

В результате работы программы будет создан файл c:\tp\user\dandatt.pas. Содержимое этого файла приведено на рис. 24.4 (компоненты на рисунке располагаются слева направо, сверху вниз).

'П' 'р' 'и' 'м' 'е' 'р' ' ' ' ' ' ' ' ' 'в' 'ы' 'в' 'о' 'д' 'а' ' ' ' ' 'T' 'R' 'U' 'E'

 

'F' 'A' 'L' 'S' 'E' KC ' ' ' ' '-' '5' '-' '2' '5' '2' '3' '2' '7' '6' '7' '-'

 

'3' '.' '5' '6' '0' '0' '0' '0' '0' '0' '0' '0' 'E' '+' '0' '0' KC ' ' '5' '.' '7' 'E'

 

'+' '0' '2' KC '5' '6' '7' '.' '4' '2' '0' '0'

Рис. 24.4. – Содержимое файла

Процедура чтения из текстового файла READ

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

read(<илф типа text>, <объект ввода>)

, где объект ввода это имя простой переменной:

- любого из числовых типов;

- символьного типа char;

- любого из строковых типов string

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

Правила выполнения процедуры read

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

Вариант 1: второй параметр числового типа
(любого целого, либо любого вещественного)

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

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

3) Если при преобразовании встретился символ, который не может быть преобразован в численное значение, то возникает ошибка ввода-вывода.

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

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

Вариант 2: второй параметр литерного типа char

1) В буфер считывается одна позиция текстового файла. Если это не признак конец файла, то буфер связывается со следующей позицией текстового файла. Если до выполнения процедуры read был связан с признаком конец файла, то местоположение буфера не изменяется.

2) Прочитанный символ заносится в оперативную память под именем второго параметра.

Вариант 3: второй параметр любого строкового типа

1) В буфер файла считывается столько позиций из текстового файла, сколько определено в строковом типе для второго параметра, если ранее не встретился признак конца строки или признак конца файла.

2) Если встретился признак конец строки или конец файла, то буфер связывается с позицией признака. Если при чтении эти признаки не встретились, то новое положение буфера – первая непрочитанная позиция.

3) Информация из буфера заносится в оперативную память под именем второго параметра, при этом формируется динамическая длина прочитанной строки.

 

Процедура пропуска очередного признака конец строки READLN

После выполнения обращения к процедуре readln(<илф типа text>)
буфер связывается со следующей позицией за ближайшим справа признаком конец строки. Если этот признак не встретился, то буфер связывается с признаком конец строки.

Пример чтения из текстового файла

Пусть в текстовом файле c:\tp\user\inp.pas находится информация, приведенная на рис. 24.5.

'F' КС КС '5' ' ' '7' '.' '5' 'e' '-' '3' КС 'П' 'Р' 'И' 'М' 'Е' 'Р'

 

'Ч' 'Т' 'Е' 'Н' 'И' 'Я' ' ' 'И' 'З' ' ' 'Ф' 'А' 'Й' 'Л' КФ

Рис. 24.5. – Содержимое текстового файла

При выполнении программы:

program inptxt;

var f:text;

a:integer;

b:real;

c:char;

d:string[6];

e:string;

begin

assign(f,'c:\tp\user\inp.pas');

reset(f);

read(f,c);

read(f,a);

read(f,b);

readln(f);

read(f,d);

read(f,e);

close(f)

end.

сформируются значения переменных, приведенные на рис. 24.6.

A  
B 7.5e-3
C 'F'
D 'ПРИМЕР'
E 'ЧТЕНИЯ ИЗ ФАЙЛА'

Рис. 24.6. – Содержимое ОП

Функции проверки местонахождения буфера

function EOF(var <илф>:text):Boolean;

возвращает TRUE, если буфер связан с признаком конец файла, в противном случае –FALSE.

function EOLn(var <илф>:text):Boolean;

возвращает TRUE, если буфер связан признаком конец строки или с признаком конец файла, в противном случае –FALSE.

function SeekEOF(var <илф>:text):Boolean;

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

function SeekEOLn(var <илф>:text):Boolean;

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

Процедура записи содержимого буфера в файл

procedure flush(var <илф>:text);

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

Стандартные текстовые файлы INPUT, OUTPUT

В каждой программе автоматически используются два текстовых файла input и output. Логический файл input – стандартный файл для ввода информации. Для ПЭВМ ему соответствует физический файл, расположенный на клавиатуре. Логический файл output – стандартный файл для вывода информации. Для ПЭВМ ему соответствует физический файл, расположенный на экране дисплея.

В каждую программу компилятор добавляет следующие определения и действия:

a) в раздел описаний

type text=file of char;

var input, output: text;

б) в начало раздела операторов

assign(input, 'con');

reset(f);

 

assign(output, 'con');

rewrite(output);

в) в конец раздела операторов

close(input);

close(output);

г) во все обращения к стандартным процедурам ввода-вывола, в которых отсутствует первый параметр – имя логического файла, вставляется этот первый параметр, для процедур ввода это input, для процедур вывода – output.

Обработка компилятором обращений к процедурам чтения и записи

Необходимо помнить, что стандартные обращения к процедурам read и write имеют только два параметра, причем первый это всегда имя логического файла. Если в обращении отсутствует этот первый параметр, то автоматически подставляется либо имя input, либо – output. В свою очередь стандартные процедуры readln и writeln имеют только один параметр – имя логического файла типа text. Если этот параметр отсутствует, то соответственно подставляется input или output.

Любое обращение в программе к процедурам ввода-вывода приводится к стандартному виду по следующему правилу:

1) Обращение вида readln (<p1>,<p2>,<p3>,,<pn>)

где pi – имя i-ой переменной, заменяется компилятором следующим составным оператором

begin

read(input, <p1>;

read(input, <p2>);

read(input, <p3>);

...

read(input, <pn>);

readln(input)

end;

2) Обращение вида writeln (<v1>,<v2>,<v3>,,<vn>)

где vi – i-ый объект вывода, заменяется компилятором следующим составным оператором

begin

write(output, <v1>;

write(output, <v2>);

write(output, <v3>);

...

write(output, <vn>);

writeln(output)

end;

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



Поделиться:


Последнее изменение этой страницы: 2016-06-26; просмотров: 565; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.135.247.237 (0.006 с.)