Обработка символьной информации
Символьные переменные
Строки
ФАЙЛОВЫЕ ТИПЫ
Процедуры и функции для работы с файлами
Инициализация файла
Типизированные файлы ( file of <тип компонента> )
Процедуры
Текстовые файлы ( text )
Стандартные текстовые файлы
317.50K
Категория: ПрограммированиеПрограммирование

1. Обработка символьной информации. Символьные переменные

1. Обработка символьной информации

2. Символьные переменные

Символьный тип – порядковый, символы
упорядочены.
CHAR
var a:char;
Функция ord(‘а’) – возвращает код символа.
Символьная константа записывается как
соответствующий символ, заключённый в
апострофы.
Иначе можно задать символ написав знак # и за ним
код символа. Например, #90 – символ, код
которого 90 (это буква z ).

3. Строки

Описатель string или string[n],
где n - константа, определяющая длину
строки (n ≤ 255).
var a : string[12]; - строка из 12 символов
b : string;
- строка из 255 символов.
К символам строки можно обращаться как к
элементам массива b[10]:=‘Y’.
Нулевой байт ( b[0] ) содержит реальную
длину строки.

4.

Процедуры и функции для работы со
строками
Функция (процедура)
Примечание
length(s):byte
функция
даёт текущую длину строки
concat(s1, s2, … ,sn)
функция
слияние строк s1, s2, … ,sn
copy(s,n,L)
функция
возвращает подстроку строки s,
начиная с позиции n, длины L
delete(s,n,L)
процедура
удаляет из s подстроку длины L,
начиная с позиции n
insert(s,sn,n)
функция
вставляет в s подстроку sn,
начиная с позиции n
pos(subs,s)
функция
ищет вхождение подстроки subs
в строку s и возвращает номер
первого символа subs или 0,
если вхождения нет

5.

Процедуры преобразования
str(x,s) – преобразует числовое значение x в
строковое s.
Для x возможно задать формат, как в
операторе write, задав длину поля и число
знаков в дробной части x:n:m.
val(s,x,err) – преобразует строковое значение
s в числовое x, если преобразование
возможно err=0, иначе err равно номеру
недопустимого символа.

6.

Пример.
Задан массив строк.
В каждой строке фамилия, имя и отчество.
Создать массив содержащий имена из
исходного массива без повторений.
Метод решения: из строки исходного массива
имя переписываем в переменную х, затем
проверяем есть ли такое имя в
результирующем массиве, если нет –
записываем его в результирующий массив.

7.

const n=5;
var fio:array[1..n] of string[24];
im:array[1..n]of string[8];
x: string[8];
i,j,k:integer;
f:boolean;
begin
writeln('
___fio__ im __otch__');
for i:= 1 to n do
{ввод исходного массива}
begin
write('fio ',i,' - ');
readln(fio[i]);
end;
k:=0;
{Количество имён в
результирующем массиве}

8.

for i:=1 to n do
begin
f:=true; {флажок, если нет совпадений, он равен true }
x:=copy(fio[i],9,8); {копирование имени в переменную
x}
for j:=1 to k do
if x = im[j] then f:=false; {проверка совпадения имён}
if f then begin
k:= k + 1;
im[k]:=x; )
{запись имени в массив}
end;
end;
for i:=1 to k do
{вывод имён}
writeln(im[i]);
end.

9. ФАЙЛОВЫЕ ТИПЫ

10.

ФАЙЛ – это именованный набор данных,
хранящийся на внешней памяти.
В Паскале три типа файлов: текстовые,
типизированные и файлы без указания
типа.
Текстовые файла задаются описателем – text.
Типизированные – file of <тип компонента>.
Файлы без указания типа – file.

11.

Пример.
var f1 : file of real; {файл из вещественных чисел}
f2 : text;
{символьный файл}
f3 : file;

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

assign(<файловая переменная>,<имя файла>)
Эта процедура связывает имя файловой
переменной с именем конкретного файла.
assign(f, ’D:\gr.doc’);
Имя файла задаётся в виде строковой
константы (в апострофах).

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

Инициализировать файл – указать
направление передачи данных.
reset(<файловая переменная>)
Эта процедура открывает файл для чтения.
При выполнении этой процедуры файл
подготавливается к чтению и указатель
устанавливается в начало файла.

14.

rewrite (<файловая переменная>)
Эта процедура открывает файл для записи.
При выполнении этой процедуры файл
подготавливается к записи и указатель
устанавливается в начало файла.
Информация ранее находившаяся в файле
стирается.

15.

append (<файловая переменная>)
Эта процедура применяется только для
текстовых файлов, она инициализирует
добавление информации в конец уже
существующего файла.
close(<файловая переменная>)
Закрывает файл, при этом связь между
файловой переменной и файлом не
теряется.

16.

Функция
eof(<файловая переменная>):boolean
Эта функция даёт результат логического типа:
true - если достигнут конец файла.
Функция ioresult : word
Эта функция даёт в результате ноль, если
последняя файловая операция закончилась
успешно, и код ошибки, если операция не
выполнилась.

17. Типизированные файлы ( file of <тип компонента> )

Типизированные файлы
( file of <тип компонента> )
Введём понятие «позиция доступа».
f
...
позиция
доступа

18. Процедуры

seek(f, <№ компонента файла> )
Эта процедура устанавливает позицию
доступа на указанную компоненту.
filesize(f)
Эта функция возвращает размер файла в
записях.

19.

Запись в файл write(f,x)
f – файловая переменная,
x – переменная типа компонента файла.
Эта процедура записывает в файл
содержимое переменной x.
f
x
f
x
f1
...
f2
write(f,x)
x1
f1
x1
f2
x1
...

20.

Чтение из файла
read(f,x)
f – файловая переменная,
x – переменная типа компонента файла.
f
f1
f1
x1
...
x
read(f,x)
f
f1
x
x1
f1
x1
...

21. Текстовые файлы ( text )

В таких файлах хранятся коды символов.
Существует особый символ – конец строки.
Этим символом содержимое файла
разбивается на строки.
Функция writeln(f) записывает в файл символ
конца строки.
Функция readln(f) – при чтении из файла
осуществляет переход на новую строку.

22. Стандартные текстовые файлы

В Паскале определены два стандартных
текстовых файла: input и output.
input - для ввода данных с клавиатуры.
output - для вывода данных на экран.
Для ввода и вывода в эти файлы в
процедурах read и write не требуется
указывать файловую переменную.

23.

Чтение из стандартного файла
read(a,b,c); readln;
readln(a,b,c);

24.

Запись в стандартный файл
write(a,b,c);
write(‘a=‘, a,’ b=‘, b,’ c=‘, c);
write(a,b,c); writeln;
writeln(a,b,c);

25.

Элементы списка вывода
Для целых значений можно указать длину
поля, в которое будет помещаться
выводимое число.
write(‘n=‘, n:5);
n=₋ ₋ ₋ 25

26.

Для вещественных значений можно указать
длину поля, в которое будет помещаться
выводимое число и количество позиций,
отводимых под дробную часть значения в
рамках выделенного поля.
write(‘a=‘, a:5:1, ’ b=‘, b:7:2);
a= ₋23.6₋ ₋ b=₋ ₋-1.40
Производится округление до указанного
числа десятичных разрядов.
Если значение не помещается в указанное
поле, размер поля автоматически
увеличивается.

27.

Пример.
Задан типизированный файл, содержащий
результаты сессии (фамилии студентов и
оценки по трём экзаменам).
Необходимо создать текстовый файл, в
который записать фамилии студентов,
сдавших все экзамены на отлично.
Имя исходного файла должно вводиться с
клавиатуры.
Результаты записать в файл d:\otl.

28.

Type St=record fio:string[15];
m,h,c:integer;
end;
Var f1:file of st; {типизированный файл}
f2:text;
{текстовый файл}
x:st;
a:string[9]; {переменная для ввода имени файла}
begin
writeln(‘ имя файла - ‘);
readln( a );
{ввод имени исходного файла}
assign( f1, a );
reset( f1 );
{открытие файла для чтения}
assign( f2, ‘d:\otl’ );
rewrite( f2 );
{открытие файла для записи}

29.

while not eof( f1 ) do {цикл для обработки
записей файла f1 }
begin
read( f1, x );
if ( x.m = 5 ) and ( x. h = 5 ) and ( x.c =5 ) then
writeln( f2, x.fio ); {запись в файл f2 }
end;
close( f1 );
close( f2 );
end.

30.

Пример.
В файле хранится экзаменационная
ведомость.
Провести коррекцию файла, содержащего
экзаменационную ведомость: заменить
оценку ‘2’ на ‘неуд’.

31.

type st= record
fio:string[15]; {фамилия студента}
bal:string[5];
{оценка}
end;
var f : file of st;
{файл из записей}
x : st;
k,i: integer;
begin
assign(f,'I:\wwww');
reset(f);
k:=filesize(f);
{определение длины файла}

32.

for i:= 0 to k-1 do
{цикл для чтения файла}
begin
seek(f,i);
{подготовка чтения i-ой записи}
read(f,x);
if x.bal='2' then
begin
x.bal:='not'; {коррекция оценки}
seek(f,i);
{возврат в файле к
корректируемой записи}
write(f,x);
{запись в файл
скорректированной записи}
end;
end;
close(f);
end.
English     Русский Правила