Файловая переменная
Файл – совокупность данных, записанная во внешней памяти под определенным именем.
Любой файл имеет три характерные особенности:
уникальное имя, что дает возможность программе работать одновременно с несколькими файлами;
он содержит компоненты одного типа, кроме файлового;
длина вновь создаваемого файла никак не оговаривается при его объявлении и ограничивается только ёмкостью устройств внешней памяти.
Файл в Турбо - Паскалепредставляет собой последовательность
элементов одного типа.
В отличие от массива длина файла (кол - во элементов) не задается, место элемента не задается индексом и каждый элемент становится доступным после перебора всех предыдущих элементов (последовательный доступ).
Файлы и файловые переменные
Для доступа к файлу описывается специальная файловая переменная, которая считается представителем файлов в паскаль-программе.
Входной файл (например,
vhod.pas)
Выходной файл
(например, vihod.pas)
Программа
Описание файлового типа
Файлы
Type <имя_типа>=<тип_компонентов>;
Var <имя_файловой_переменной> : file of <имя_типа>;
Текстовый файл
можно рассматривать как последовательность символов, разбитую на строки длиной от 0 до 256 символов
Var F : text;
Типизированные файлы
файлы определенного типа. Чаще всего это файлы, состоящие из записей. Они используются для создания различных баз данных
Type FileRec=record
… end;
Var F:file of FileRec;
Нетипизированные файлы
не имеют строго определенного типа, рассматривается в Паскале как совокупность символов или байтов.
Var F : file;
Связь файла с файловой переменной
ASSIGN(<файловая переменная>,<имя файла>);
Const
name=‘c:\dir\subdir\out.txt’;
Var f:text;
Begin … assign(f,name);
Инициация файлаИнициировать файл - указать для него
направление передачи данных.Файл можно инициировать для
чтения, записи, дозаписи.
Инициация файла для чтения -RESET(<файл. пер.>);Инициация файла для записи -WRITE(<файл. пер.>,<сп. вывода>);REWRITE(<файл. пер>);Инициация файла для дозаписи -
APPEND(<файл. пер.>); - только текстовый файл!
Проверка связи с файломДля того, чтобы проверить, установлена ли связь файла с файловой переменной, необходимо использовать специальную функцию IOResult.
Пример:
Var f :text;
St:String;
BEGIN Write(‘Введите имя файла: ’);
Readln(St); Assign(f,St);
{$I-} {Отключить контроль ввода-вывода}
Reset(f); {Открыть файл}
{$I+} {Включить контроль ввода-вывода }
If IOResult = 0 then begin
Writeln(‘Файл существует и нормально открыт’);
Close(f); end
Else Writeln(‘Файла с именем’+St+’ на диске нет’);
END.
После корректного выполнения операции ввода-вывода функция IOResult возвращает значение, равное нулю, в остальных случаях функция возвращает соответствующий код ошибки.
Закрытие файла процедура Close(<имя_файловой переменной>);
Текстовый файлТекст делится на строки. При определении длины строки необходимо учитывать формат листа или размер монитора;
Текст может содержать много строк;
Каждая строка заканчивается символами: #13 –возврат каретки, #10 – перевод строки.
Процедуры и функции для текстовых файлов
Создание текстового файла
Задача. Дан текстовый файл f. Используя файловую переменную, записать содержимое этого файла в другой файл.
Решение: program tekct; uses crt; var i:integer; st: string[20]; g,f:text;
BEGIN clrscr;
assign(f,‘d:\k11a_2007\in1.txt'); assign(g,'d:\k11a_2007\out.txt');
{$I-} reset(f); rewrite (g){$I+}
if ioresult<>0 then begin
writeln('no file'); halt end;
i:=1;
repeat readln(f,st);
writeln(i,' ',st); writeln(g,st); inc(i) until eof(f); close(f); close(g);
End.
Задача. Дан текст. Напечатать номер строки с максимальным
количеством символов.program tekct1; uses crt; var k,i,p,max:integer; st: string[20]; f:text; label 1; BEGIN clrscr;assign(f,'d:\classes\class11x\in1.txt');
{$I-} reset(f);{$I+}
if ioresult<>0 then begin
writeln('no file'); goto 1 end;
i:=1; p:=0;
repeat readln(f,st);
writeln(i,' ',st); k:=ord(st[0]);
if k>max then begin max:=k;
p:=i end; inc(i) until eof(f) ;
writeln('p=',p); close(f);
1:; end.
Стандартные файлы ввода/вывода
В программах на языке Турбо Паскаль можно
использовать стандартные обозначения файла ввода
input и файла вывода output .
Файловая переменная input связана с клавиатурой, а
файловая переменная output – с экраном дисплея.
Эти файлы всегда считаются открытыми.
{$I-} reset(f); {$I+}
if ioresult<>0 then begin
writeln('no file'); goto 1 end;
i:=1; p:=0;max:=0;
repeat readln(f,st);
writeln(i,' ',st); k:=ord(st[0]);
if k>max then begin max:=k;
p:=i end; inc(i) until eof(f) ;
writeln('p=',p); close(f);
1: end.
Текстовые файлы, содержащие числа
Особенностью работы с текстовыми файлами является то, что параметры, значения которых вводятся и выводятся с помощью процедур READ или WRITE, могут быть не только типа CHAR или STRING, но и других простых типов:
целых, вещественных типов при вводе;
целых, вещественных и логических типов при выводе.
Эти процедуры могут также работать и с ASCII-строками.
Имеется две стандартные файловые переменные для текстовых файлов, которые автоматически открываются при запуске программы и автоматически закрываются после работы:
INPUT – по умолчанию связанная с клавиатурой;
OUTPUT - по умолчанию связанная с экраном дисплея.
ПРИМЕРЫ1. Считать файл и найти сумму цифр, встречающихся в нём.
Чтобы определить численное значение элемента текстового файла, т.е. значение цифры, можно воспользоваться тем, что символы являются упорядоченным типом. Коды ASCII-цифр следует читать один за другим, и значение любой цифры может быть получено как
k:=ORD( c ) - ORD(‘0’);
Стандартные файловые переменные:
INPUT – для чтения данных с клавиатуры
OUTPUT – для вывода данных на экран
program my_file;VarF:text;Ch:char:begin assign(input,'d:\programs\in.pas');{$I-}reset(input); {$I+}If Ioresult <>0 thenBegin write(‘нет файла’); exit;while not eof do beginread(ch);Write(ch);end; close(input); end.
Пример переопределения стандартного ввода с клавиатуры на ввод из файла на диске. Файловую переменную в этом случае можно не записывать в операторах READ и WRITE
program prim1;uses crt;Var I,k:integer;begin clrscr;assign(input,'d:\programs\in.pas');reset(input);k:=0;while not eof do beginread(i);inc(k); end; close(input); write('k=',k); readkey end.
Пример1.
Дан текстовый файл, содержащий целые числа.
Найти количество чисел в файле.
program prim2;uses crt;Var i,j,k:integer;begin clrscr;assign(input,'d:\classes\in.pas');
reset(input); k:=0;repeatj:=0;
repeatinc(k);inc(j);read(i);write(i,' ');until eoln;
writeln('j=',j)until eof; close(input); write('k=',k); readkey end.
Пример 2
Дан текстовый файл, содержащий целые числа.
Найти количество чисел в файле и в каждой строке.
Program prim3;uses crt;Var p,k,i,mf,ms:integer;begin clrscr;assign(input,'ff1.txt'); reset(input);mf:=-32768;k:=0;repeatms:=-32768; repeat read(i);write(i,' '); inc(k); if i>ms then ms:=i; if i>mf then begin mf:=i;p:=k end until eoln;writeln('ms=',ms);until eof; close(input); write('mf=',mf,'p=',p); readkey end.
Пример 3
Дан текстовый файл, содержащий целые числа.
Найти максимальный элемент в файле и его номер в файле, а также максимальный элемент в каждой строке.
Задача
Top Related