250 likes | 404 Views
Файловая переменная. Файл – совокупность данных, записанная во внешней памяти под определенным именем. Любой файл имеет три характерные особенности: уникальное имя , что дает возможность программе работать одновременно с несколькими файлами;
E N D
Файл– совокупность данных, записанная во внешней памяти под определенным именем. • Любой файл имеет три характерные особенности: • уникальное имя, что дает возможность программе работать одновременно с несколькими файлами; • он содержит компоненты одного типа, кроме файлового; • длинавновь создаваемого файла никак не оговаривается при его объявлении и ограничивается только ёмкостью устройств внешней памяти.
Файл в Турбо - Паскале представляетсобой последовательность элементоводноготипа. В отличие от массивадлина файла (кол - во элементов) не задается, место элемента не задается индексом и каждый элемент становится доступным после перебора всех предыдущих элементов (последовательный доступ).
Файлы и файловые переменные Входной файл (например, 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; Var F:text; Ch:char: begin assign(input,'d:\programs\in.pas'); {$I-}reset(input); {$I+} If Ioresult <>0 then Begin write(‘нет файла’); exit; while not eof do begin read(ch); Write(ch); end; close(input); end. Пример переопределения стандартного ввода с клавиатуры на ввод из файла на диске. Файловую переменную в этом случае можно не записывать в операторах READ и WRITE
Пример1. Дан текстовый файл, содержащий целые числа. Найти количество чисел в файле. program prim1; uses crt; Var I,k:integer; begin clrscr; assign(input,'d:\programs\in.pas'); reset(input); k:=0; while not eof do begin read(i); inc(k);end; close(input); write('k=',k); readkey end.
program prim2; uses crt; Vari,j,k:integer; begin clrscr; assign(input,'d:\classes\in.pas'); reset(input);k:=0; repeat j:=0; repeat inc(k);inc(j); read(i);write(i,' '); until eoln; writeln('j=',j) until eof; close(input); write('k=',k); readkeyend. Пример 2 Дан текстовый файл, содержащий целые числа. Найти количество чисел в файле и в каждой строке.
Program prim3; uses crt; Varp,k,i,mf,ms:integer; begin clrscr; assign(input,'ff1.txt'); reset(input); mf:=-32768;k:=0; repeat ms:=-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 Дан текстовый файл, содержащий целые числа. Найти максимальный элемент в файле и его номер в файле, а также максимальный элемент в каждой строке.