Слайд 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Процедуры и функции для работы со строками
Слайд 5Процедуры преобразования
str(x,s) – преобразует числовое значение x в строковое s.
Для x
возможно задать формат, как в операторе write, задав длину поля и число знаков в дробной части x:n:m.
val(s,x,err) – преобразует строковое значение s в числовое x, если преобразование возможно err=0, иначе err равно номеру недопустимого символа.
Слайд 6Пример.
Задан массив строк.
В каждой строке фамилия, имя и отчество.
Создать массив содержащий
имена из исходного массива без повторений.
Метод решения: из строки исходного массива имя переписываем в переменную х, затем проверяем есть ли такое имя в результирующем массиве, если нет – записываем его в результирующий массив.
Слайд 7const 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; {Количество имён в результирующем массиве}
Слайд 8for 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.
Слайд 10ФАЙЛ – это именованный набор данных, хранящийся на внешней памяти.
В Паскале
три типа файлов: текстовые, типизированные и файлы без указания типа.
Текстовые файла задаются описателем – text.
Типизированные – file of <тип компонента>.
Файлы без указания типа – file.
Слайд 11
Пример.
var f1 : file of real; {файл из вещественных чисел}
f2 : text; {символьный файл}
f3 : file;
Слайд 12Процедуры и функции для работы с файлами
assign(,)
Эта процедура связывает
имя файловой переменной с именем конкретного файла.
assign(f, ’D:\gr.doc’);
Имя файла задаётся в виде строковой константы (в апострофах).
Слайд 13Инициализация файла
Инициализировать файл – указать направление передачи данных.
reset()
Эта процедура открывает
файл для чтения.
При выполнении этой процедуры файл подготавливается к чтению и указатель устанавливается в начало файла.
Слайд 14rewrite ()
Эта процедура открывает файл для записи.
При выполнении этой процедуры
файл подготавливается к записи и указатель устанавливается в начало файла.
Информация ранее находившаяся в файле стирается.
Слайд 15 append ()
Эта процедура применяется только для текстовых файлов, она
инициализирует добавление информации в конец уже существующего файла.
close(<файловая переменная>)
Закрывает файл, при этом связь между файловой переменной и файлом не теряется.
Слайд 16Функция
eof():boolean
Эта функция даёт результат логического типа:
true - если
достигнут конец файла.
Функция ioresult : word
Эта функция даёт в результате ноль, если последняя файловая операция закончилась успешно, и код ошибки, если операция не выполнилась.
Слайд 17Типизированные файлы
( file of )
Введём понятие «позиция доступа».
f
Слайд 18Процедуры
seek(f, )
Эта процедура устанавливает позицию доступа на указанную
компоненту.
filesize(f)
Эта функция возвращает размер файла в записях.
Запись в файл write(f,x)
f – файловая переменная,
x – переменная типа компонента файла.
Эта процедура записывает в файл содержимое переменной x.
f
x write(f,x)
f
x
f1
f2
x1
. . .
f1
f2
x1
x1
Слайд 20Чтение из файла
read(f,x)
f – файловая переменная,
x – переменная типа
компонента файла.
f1
f1
f1
f1
x1
x1
x1
f
f
x
x
read(f,x)
Слайд 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.
Слайд 28Type 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’ на ‘неуд’.
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.