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

Компонентами текстовых файлов являются строки. Длина строки – 0-255 символов. Каждая строка завершается маркером строки, а файл – маркером конца файла. Для описания файловых переменных текстового типа используется зарезервированное слово text.

Var instrl, instr2: text;

dokulnent: text;

Для работы с текстовыми файлами используются упомянутые выше функции и процедуры assign, rewrite, reset, close, read, readln, write, writeln, seekeof, однако имеются и специфические функции и процедуры:

Append (fv) – открыть текстовый файл и установить указатель на маркер конца файла.

Eoln (fv) – возвратить true, если указатель файла достиг маркера конца строки, в противном случае, возвратить значения false.

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

Seekeof(fv) – возвращает true, если указатель файла находится на маркере конца файла.

Организация текстового файла производится по схеме:

1) объявляется файловая переменная текстового типа;

2) присваивается файлу имя (assign);

3) открывается файл (rewrite);

4) подготавливается строка - компонента для записи в файл;

5) записывается строка - компонента в файл (writeln);

6) повторяются п. 4, 5 столько раз, сколько нужно;

7) закрывается файл.

Доступ к компонентам текстового файла:

1) присвоить файлу имя (assign);

2) открыть файл для чтения (reset);

3) прочитать компоненту-строку (readln);

4) обработать компоненту-строку (например вывести на экран);

5) повторить п. 3, 4 столько раз, сколько нужно.

6) закрыть файл (close);

Расширение текстового файла производится путем добавления в конец файла компонент-строк:

1) присвоить имя файлу (assign);

2) установить маркер на конец файла (append);

3) подготовить строку для записи;

4) записать строку (writeln);

5) повторить нужное количество раз п. 3, 4.

6) закрыть файл (close).

Замечание. При записи файлов прямого и последовательного доступа, созданных пользователем, содержимое компонент упаковывается, и поэтому посмотреть их в vc или nc по f3 или f4 нельзя, а текстовый файл не упаковывается, и его можно просмотреть.

 procedure sozdt;

Begin writeln('дайте имя создаваемому текстовому файлу');

 readln(filename);

assign(stro,filename); rewrite(stro);

while true do

Begin writeln('напишите содержимое строки');

readln(s); if s='zzz' then {'zzz' – признак окончания ввода }

Begin close(stro); exit; end;

writeln(stro,s); end;end;

procedure obrt;

Begin writeln('дайте имя обрабатываемого файла');

; readln(filename);

assign(stro,filename); reset(stro);

repeat readln(stro,s); writeln(s);

until seekeof(stro); close(stro); exit; end;

procedure rasht;

 Begin writeln('укажите имя корректируемого файла'); readln(filename);

assign(stro,filename); append(stro);

while true do

Begin writeln('введите строку'); readln(s);

if s='zzz' then Begin close(stro); exit; end;

writeln(stro,s); end; end;

Program Prim51;

Type dlina=string[60];

Var stro:text; s:dlina; reg:char; filename:string[12];

{$i c:\turbo\sozdt.pas}

{$i c:\turbo\obrt.pas}

{$i c:\turbo\rasht.pas}

Begin while true do

Begin writeln('укажите режим');

writeln('1: создание, 2: вывод на экран, 3: расширение, 4: выход');

readln(reg);

case reg of '1': sozdt;

'2': obrt;

'3': rasht;

'4': halt else writeln('повторите номер режима');

end;end;end.


11. Использование библиотеки CRT

Разработчики Турбо-Паскаля предусмотрели несколько подпрограмм, существенно увеличивающих возможности текстового ввода-вывода. Эти подпрограммы сосредоточены в библиотеке (модуле) CRT, входящей в комплект поставки Турбо-Паскаля. В модуль включены также процедуры sound, no sound, delay, позволяющие программировать звуковой генератор компьютера.

 

11.1. Программирование клавиатуры

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

Функция keypressed возвращает значение типа boolean, указывающее состояние буфера клавиатуры: false означает, что буфер пуст, а true – что в буфере есть хотя бы один символ, еще не прочитанный программой.

В реализуется так называемый асинхронный буферизованный ввод с клавиатуры. По мере нажатия на клавиши соответствующие коды помещаются в особый буфер, откуда они могут быть затем прочитаны программой. Стандартная длина буфера рассчитана на хранение до 16 кодов символов. Если программа достаточно долго не обращается к клавиатуре, а пользователь нажимает клавиши, буфер может оказаться переполненным. В этот момент раздается звуковой сигнал и «лишние» коды теряются. Чтение из буфера обеспечивается процедурами read/rеadln и функцией ReadKey. обращение к функции keypressed не задерживает исполнения программы: функция немедленно анализирует буфер и возвращает то или иное значение, не дожидаясь нажатия клавиши.

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

Uses CRT;

Var

с; char;

Begin

while Keypressed do

c:== ReadKey;

. . . . .

end.

При использовании процедуры ReadKey следует учесть, что в клавиатурный буфер помещаются так называемые расширенные коды нажатых клавиш. Если нажимается любая алфавитно-цифровая клавиша, расширенный код совпадает с ASCII-кодом соответствующего символа. Например, если нажимается клавиша с латинской буквой «а» (в нижнем регистре), функция ReadKey возвращает значение chr(97), а если – «а» (в верхнем регистре) – значение chr(65). При нажатии функциональных клавиш F1...F10 (клавиш управления курсором), клавиш Ins, Home, Del, End, PgUp, PgDn в буфер помещается двухбайтовая последовательность: сначала символ #0, а затем расширенный код клавиши. Таким образом, значение #0, возвращаемое функцией ReadKey, используется исключительно для того, чтобы указать программе на генерацию расширенного кода. Получив это значение, программа должна еще раз обратиться к функции, чтобы прочитать расширенный код клавиши.

Следующая простая программа позволит определить расширенный код любой клавиши. Для завершения работы программы нужно нажать клавишу esc.

Uses CRT;

Var с: char;

Begin

repeat

c:= ReadKey;

if c< >#0 then

writeln (ord(c))

else

writeln ('0', ord (ReadKey):8)

until c=#27 {27 – расширенный код клавиши esc}

end.

Если вы воспользуетесь этой программой, то обнаружите, что нажатие на некоторые клавиши игнорируется функцией ReadKey. Это прежде всего так называемые сдвиговые клавиши – Shift, Ctrl, Alt. Сдвиговые клавиши в MS-DOS обычно используются для переключения регистров клавиатуры и нажимаются в сочетании с другими клавишами. Именно таким способом, например, различается ввод прописных и строчных букв. Кроме того, функция игнорирует переключающие клавиши Caps Lock, Num Lock, Scroll Lock.

в таблице приведены расширенные коды клавиш, возвращаемые функцией ord(ReadKey).


Расширенные коды клавиш

Таблица

Код

Клавиша или комбинация клавиш

Код

Клавиша или комбинация клавиш

первый байт

второй байт

первый байт

второй байт

Алфавитно-цифровые клавиши
8 backspace (забой) 9 tab (табуляция)
13 enter 32 пробел
33 ! 34 «
35 # 36 $
37 % 38 &
39 " 40 (
41 ) 42 *
43 + 44 ,
45 46 .
47 / 48...57 0...9
58 : 59 ;
60 61 =
52 63 ?
64 @ 65...90 A...Z
91 [ 92 /
93 ] 94 ^
95

_

96 "
97...122 a...z 123 {
124 ?? 125 }
126 ~ 128...159 A...Я
160...175 а...п 224...239 р...я
Управляющие клавиши и их сочетания со сдвиговыми
0 3 Ctrl–2 0 15 Shift – Tab
0 16...25 Alt–Q...Alt–P (верхний ряд букв) 0 30...38 Alt–A...Alt–L (средний ряд букв)
0 44...50 Alt–Z...Alt–M (нижний ряд букв) 0

59...68

72

F1...F10

курсор вверх

0 71 Home 0 75 курсор влево
0 73 PgUp 0 79 End
0 77 курсор вправо 0 81 PgDn
0 80 курсор вниз 0 83 Del
окончание таблицы

код

клавиша или комбинация клавиш

код

клавиша или комбинация клавиш

первый байт

второй байт

первый байт

второй байт

0 82 Ins 0 94...103 Ctrl–F1...Ctrl–F10
0 84...93 Shift–F1... Shift–F10 0 114 Ctrl– PrtScr
0 104...113 Alt–F1...Alt–F10 0 116 Ctrl – курсор вправо
0 115 Ctrl – курсор влево 0 118 Ctrl – PgDn
0 117 Ctrl – End 0 120...131 alt–1...alt– = (верхний ряд клавиш)
0 119 Ctrl – Home
0 132 Ctrl – PgUp

 


Информация о работе «Основы программирования на языке Паскаль»
Раздел: Информатика, программирование
Количество знаков с пробелами: 168304
Количество таблиц: 7
Количество изображений: 26

Похожие работы

Скачать
274963
85
0

... ячейка, а имя переменной превращается в адрес ячейки. Появление этого адреса происходит в результате работы специального оператора языка (NEW), однако его значение в большинстве случаев не используется при программировании на алгоритмических языках типа Паскаль. Условимся считать, что адрес ячейки, которая будет хранить переменную А, есть А. Или, другими словами, А - это общее имя переменной и ...

Скачать
11632
0
1

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

Скачать
47594
1
0

... , тем не менее, использование программ с перекрытиями снимает это ограничение. Два библиотечных модуля TURBO3 и GRAPH3 введены для совместимости с ранней версией 3.0 системы Турбо Паскаль. 2 Объекты Базовым в объектно-ориентированном программировании является понятие объекта. Объект имеет определённые свойства. ...

Скачать
17572
2
0

... выбрать режим Quit <Alt>-<X>, после чего нажать либо <Enter>, либо комбинацию <Alt>-<X>. ФУНКЦИОНАЛЬНЫЕ КЛАВИШИ Функциональные клавиши используются для управления средой Турбо Паскаля. Они обозначаются F1, F2,..., F12 и располагаются в самом верхнем ряду клавиатуры. С каждой из этих клавиш связывается некоторая команда меню. Действие почти всех функциональных ...

0 комментариев


Наверх