Проверка связи с файлом Для того, чтобы проверить, установлена ли связь файла с файловой переменной, необходимо использовать специальную функцию 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 возвращает значение, равное нулю, в остальных случаях функция возвращает соответствующий код ошибки.
Стандартные файловые переменные: INPUT – для чтения данных с клавиатуры OUTPUT – для вывода данных на экран program my_file; Var F:text; S:string; begin assign(input,f2.txt'); {$I-}reset(input); {$I+} If Ioresult 0 then Begin write(нет файла); exit; while not eof do begin readln(st); Writeln(st); end; close(input); end. Пример переопределения стандартного ввода с клавиатуры на ввод из файла на диске. Файловую переменную в этом случае можно не записывать в операторах READ и WRITE
program my_file; 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. Пример1. Дан текстовый файл, содержащий целые числа. Найти количество чисел в файле.
program my_file4; uses crt; var i,j,k:integer; begin clrscr; assign(input,'d:\programs\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); readkey end. Пример 2 Дан текстовый файл, содержащий целые числа. Найти количество чисел в файле и в каждой строке.
program my_file5; uses crt; var p,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 Дан текстовый файл, содержащий целые числа. Найти максимальный элемент в файле и его номер в файле, а также максимальный элемент в каждой строке.
program tekct1; uses crt; var k,i:integer; st: string[20]; f,g:text; BEGIN clrscr; assign(f,'in1.txt'); assign(g,'out.txt'); {$I-} reset(f);rewrite(g);{$I+} if ioresult0 then begin writeln('no file'); exit 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[10]; f:text; BEGIN clrscr; assign(f,'ff.txt'); {$I-} reset(f);{$I+} if ioresult0 then begin writeln('no file'); exit 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. Дан текстовый файл. Напечатать номер строки с максимальным количеством символов.
program tekct2; uses crt; var k,i,p,max,s:integer; st,name: string[35]; f:text; BEGIN clrscr; write('input name of the file '); readln(name); assign(f,name); {$I-} reset(f); {$I+} if ioresult0 then begin writeln('no file'); exit end; i:=1; repeat readln(f,st); k:=1;s:=0; writeln(' ',i,' ',st); repeat if st[k]=' ' then s:=s+1; inc(k); until k>ord(st[0]) ; if s>max then begin max:=s; p:=i end; inc(i) until eof(f) ; writeln('p=',p); close(f); end. Дан текстовый файл, содержащий строки. Указать номер строки с максимальным количеством пробелов.
Пусть нам необходимо сформировать текстовый файл с помощью Паскаля, а затем переписать из данного файла во второй только те строки, которые начинаются с буквы «А» или «а». Пояснения: нам понадобятся две файловые переменные f1 и f2, поскольку оба файла текстовые, то тип переменных будет text. Задача разбивается на два этапа: первый – формирование первого файла; второй – чтение первого файла и формирование второго. Для завершенности решения задачи есть смысл добавить еще одну часть, которая в задаче явно не указана – вывод на экран содержимого второго файла.
Program primer; Var f1,f2:text; I,n: integer; S: string; Begin Assign(f1, 'file2.txt'); {устанавливаем связь первой файловой переменной с физическим файлом} Assign(f2, 'file3.txt'); {устанавливаем связь второй файловой переменной с физическим файлом} Reset(f1); {открываем первый файл для чтения} rewrite(f2); While not eof(f1) do Begin Readln(f1,s); {считываем очередную строку из первого файла} repeat n:=length(s); for i:=1 to n div 2 do If s[i] = s[n -i+1] then until eoln(f1); Writeln(s); {записываем во второй файл строки, удовлетворяющие условию} End; Close(f1); Close(f2); {заканчиваем работу с файлами} end.
f2,f:text; s,p,k,i,ms, mn:integer; begin clrscr; assign(f,'f3.txt'); assign(f2,'f4.txt'); reset(f); rewrite(f2); ms:=0;mn:=100; Repeat ms:=0;mn:=100; repeat read(f,i);write(i,' '); if i>ms then ms:=i; if i