Файл – последовательность однотипных компонент (элементов) на внешнем носителе, имеющая имя.
Обмен данными между памятью и внешним устройством осуществляется при помощи файлов.
С файлами связано два понятия:
• физический файл
• логический файл.
Физический файл находится на внешнем устройстве и имеет имя.
Если файл находится на магнитном диске, то имя задается полной спецификацией файла:
{логическое имя МД:}{\путь к файлу по каталогам\}имя файла{.расширение}
Например: 'W:\info\paskal\p1.pas'
Если файл находится на другом внешнем устройстве, то имя файла задается логическим именем устройства:
‘CON’ – консоль (при вводе – клавиатура, при выводе – экран монитора)
‘LPn’, где n – 1,2, и т.д. – параллельный порт ввода-вывода
‘COMn’, где n – 1,2, и т.д. – последовательный порт ввода-вывода
‘LPT’ – принтер
‘NUL’ – фиктивное устройство.
Логический файл – это файловая переменная, связанная с типом файла при его описании. Файловую переменную можно задать любым идентификатором.
При работе с файлом сначала устанавливается соответствие между физическим и логическим именем файла (при помощи процедуры Assign), далее в программе используется только файловая переменная.
Например:
Var f:text; {текстовый файл описывается через файловую переменную f }
Begin assign(f, ‘w:\info\kl10\a.txt’); {устанавливается соответствие между файловой переменной f и физическим файлом с именем ‘w:\info\kl10\a.txt’}
Reset(f); {открытие файла для чтения}
{ обработка файла}
Close(f); {закрытие файла}
End.
Существуют стандартные файловые переменные: INPUT – для ввода с клавиатуры, OUTPUT – для вывода на экран монитора. Они могут быть переопределены пользователем, т.е. могут быть связаны с другими устройствами ввода-вывода.
В Паскале существует три типа файлов:
• текстовый
• типизированный
• бестиповый.
Текстовые файлы
Текстовый файл – это стандартный тип файла, у которого два типа компонент (элементов) – символ (char) и строка (string).
Описание текстового файла:
Var f:text;
Ch:char;
S:string;
где f – файловая переменная, ch, s – компоненты файла. Идентификаторы могут быть любые (по правилам написания идентификаторов).
Структура текстового файла - линейная:
#13 #10 #13 #10 #13 #10 #26
строка строка строка
где #13 и #10 – признак (маркер) конца строки, а #26 – признак (маркер) конца файла.
Так как строки в текстовом файле могут быть разной длины, то в конце каждой строки ставится признак (маркер) конца строки, а в конце файла ставится маркер конца файла.
Доступ к компонентам текстового файла только последовательный, т.е. компоненты файла читаются или записываются только последовательно друг за другом.
Текстовые файлы работают со всеми внешними устройствами.
Конспект по теме_ «Файлы в Паскале».doc
____________________________________________________________________________________
_
Файл – последовательность однотипных компонент (элементов) на внешнем носителе,
имеющая имя.
Файлы в Паскале
Обмен данными между памятью и внешним устройством осуществляется при помощи файлов.
ЭВМ
ОЗУ
Данные
и
программы
Внешнее устройство
Файлы
Данные
и
программы
С файлами связано два понятия:
физический файл
логический файл.
Физический файл находится на внешнем устройстве и имеет имя.
Если файл находится на магнитном диске, то имя задается полной спецификацией файла:
{логическое имя МД:}{\путь к файлу по каталогам\}имя файла{.расширение}
Например: 'W:\info\paskal\p1.pas'
Если файл находится на другом внешнем устройстве, то имя файла задается логическим именем
устройства:
‘CON’ – консоль (при вводе – клавиатура, при выводе – экран монитора)
‘LPn’, где n – 1,2, и т.д. – параллельный порт вводавывода
‘COMn’, где n – 1,2, и т.д. – последовательный порт вводавывода
‘LPT’ – принтер
‘NUL’ – фиктивное устройство.
Логический файл – это файловая переменная, связанная с типом файла при его описании.
Файловую переменную можно задать любым идентификатором.
При работе с файлом сначала устанавливается соответствие между физическим и логическим
именем файла (при помощи процедуры Assign), далее в программе используется только файловая
переменная.
Например:
Var f:text; {текстовый файл описывается через файловую переменную f }
Begin assign(f, ‘w:\info\kl10\a.txt’); {устанавливается соответствие между файловой переменной f
и физическим файлом с именем ‘w:\info\kl10\a.txt’}
1 ____________________________________________________________________________________
_
Reset(f); {открытие файла для чтения}
{ обработка файла}
Close(f); {закрытие файла}
End.
Существуют стандартные файловые переменные: INPUT – для ввода с клавиатуры, OUTPUT – для
вывода на экран монитора. Они могут быть переопределены пользователем, т.е. могут быть связаны
с другими устройствами вводавывода.
В Паскале существует три типа файлов:
текстовый
типизированный
бестиповый.
Текстовые файлы
Текстовый файл – это стандартный тип файла, у которого два типа компонент (элементов)
– символ (char) и строка (string).
Описание текстового файла:
Var f:text;
Ch:char;
S:string;
где f – файловая переменная, ch, s – компоненты файла. Идентификаторы могут быть любые (по
правилам написания идентификаторов).
Структура текстового файла линейная:
#13 #10
#13 #10
#13 #10 #26
строка строка строка
где #13 и #10 – признак (маркер) конца строки, а #26 – признак (маркер) конца файла.
Так как строки в текстовом файле могут быть разной длины, то в конце каждой строки ставится
признак (маркер) конца строки, а в конце файла ставится маркер конца файла.
Доступ к компонентам текстового файла только последовательный, т.е. компоненты файла
читаются или записываются только последовательно друг за другом.
Текстовые файлы работают со всеми внешними устройствами.
Процедуры и функции, определенные над текстовым файлом
1. Assign(var f:text; filename:string); – устанавливает соответствие между физическим и
логическим именами файла.
Наличие этой процедуры обязательно.
Примеры:
Assign(f, ‘w:\info\kl10\a.txt’);
2 ____________________________________________________________________________________
_
Assign(f,’PRN’);
Writeln(‘input filename’); {ввод физического имени файла через переменную filename}
Readln(filename);
Assign(f,filename);
2. Reset(var f:text); открытие файла для чтения.
Указатель файловой переменной устанавливается перед первой компонентой. Файл готов
для чтения. Если файла с таким именем нет, то выдается сообщение об ошибке.
Reset(f);
3. Rewrite(var f:text); открытие файла для записи.
Если такого файла нет, то создается метка файла и указатель файловой переменной
устанавливается перед первой компонентой. Если файл с таким именем есть, то указатель также
устанавливается перед первой компонентой. Содержимое файла при записи будет стерто. За этим
должен следить программист.
4. Append(var f:text); открытие текстового файла для дозаписи в конец.
Указатель файловой переменной устанавливается перед маркером конца файла.
Append(f);
Если файла с таким именем нет, то выдается сообщение об ошибке.
Eof(var f:text): boolean; определяется конец файла. Функция возвращает значение true,
Eoln(var f:text):boolean; определяет конец строки. Функция возвращает значение true,
Read(var f:text; ch:char); чтение компоненты типа char из файла.
Readln(var f:text); перевод на новую строку. Используется при чтении файла
5.
если встретился маркер конца файла (#26).
6.
если встретился маркер конца строки (#13,#10).
7.
8.
посимвольно. Например:
While not eof(f) do
Begin while not eoln(f) do
Read(f,ch);
Readln(f)
End;
9. Readln(var f:text; s:string); чтение компоненты типа string из файла и перевод на новую
строку.
While not eof(f) do Readln(f,s);
10. Write(var f:text; ch:char); запись компоненты типа char в файл. Write(f,ch);
11. Writeln(var f:text); устанавливается признак конца строки (#13, #10) и переход на новую
строку. Writeln(f);
12. Writeln(var f:text; s:string); запись компоненты типа string в файл, установка признака
конца строки и переход на новую строку. Writeln(f,s);
13. Close(var f:text); закрытие файла для чтения или записи. Устанавливается маркер конца
файла (#26). По окончании работы с файлом он должен быть обязательно закрыт, иначе к
нему не будет доступа. Close(f);
3 ____________________________________________________________________________________
_
14. Seekeof(var f:text):boolean; возвращает значение true, если перед маркером конца файла
(#26) стоят только пробелы или коды табуляции.
15. Seekeofln(var f:text):Boolean; возвращает значение true, если перед маркером конца строки
(#13, #10) стоят только пробелы или коды табуляции.
16. Rename(var f:text; newname:string); переименование файла. Применима лишь к закрытым
файлам.
17. Erase(var f:text); удаляет файл. Применима лишь к закрытым файлам.
Особенности текстового файла
1. Это стандартный тип файла.
2. Два типа копонент: символ (char) и строка (string).
3. Только последовательный доступ к компонентам файла.
4. Файл может быть открыт или для чтения (reset(f);) или для записи (rewrite(f);).
5. Возможна дозапись компонент только в конец файла (append(f);).
6. Текстовые файлы работают со всеми внешними устройствами.
1. Установить соответствие между физическим и логическим именами файлов при помощи
процедуры Assign(f,filename).
Алгоритм работы с файлом
2. Открыть файл для чтения (reset(f);) или для записи (rewrite(f);).
3. Чтение или запись компонент.
4. Закрыть файл (Close(f)).
Замечание: Одновременно могут быть открыты несколько файлов.
Примеры программ
1. Создание текстового файла на диске.
Program example_1;
Var f:text;
i, n: integer;
S: string;
Begin
Assign(f, ‘w:\info\pascal\file1.txt’); {устанавливаем связь файловой переменной
с физическим файлом на диске}
Rewrite(f); {открываем файл для записи}
Readln(n); {определим количество вводимых строк}
for i:=1 to n do
begin
readln(s); {вводим с клавиатуры строки}
writeln(f,s); {записываем последовательно строки в файл}
end;
close(f); {закрываем файл}
end.
2. Вывести содержимое текстового файла на экран монитора.
Program example_2;
4 ____________________________________________________________________________________
_
Var f:text;
S,filename:string;
Begin writeln(‘input filename’);
Readln(filename);
Assign(f,filename); {Связываем файловую переменную с файлом на диске}
Reset(f); {Открываем файл для чтения}
While not eof(f) do {Пока не достигнут конец файла}
Begin readln(f,s); {Считываем очередную строку}
Writeln(s); {Выводим строку на экран}
End;
Close(f); {Закрываем файл}
End.
3. В текстовом файле подсчитать и вывести на экран количество символов в каждой строке.
Program еxample_3;
Var f: Text;
x, k: Integer;
c:char;
Begin
Assign (f, 'w:\info\pascal\pr.txt');
{Связываем файловую переменную с файлом на диске}
Reset (f); {Открываем файл для чтения}
x:=0; {Обнуляем счетчик строк}
While Not Eof(f) Do {Пока не достигнут конец файла}
Begin
k:=0; {Обнуляем счетчик элементов строки}
inc(x); {Увеличиваем счетчик строк}
While Not Eoln(f) Do {Пока не достигнут конец строки}
Begin
Read(f, c) ; {Считываем очередной символ}
Write(c,' '); {Выводим его на экран}
Inc(k); {Увеличиваем счетчик символов}
End;
Writeln( ' В ',x, ' строке ', k, ' элементов') ;
Readln(f); {Переходим к следующей строке файла}
End;
Close(f); {Закрываем файл}
Readln;
End.
4. Переписать из входного файла в выходной только те строки, которые начинаются с буквы
«А» или «а».
Program еxample_4;
Var f1,f2:text;
i, n: integer;
5 ____________________________________________________________________________________
_
s, filename: string;
Begin writeln(‘input filename1’);
Readln(filename); {вводится имя входного файла}
Assign(f1,filename); {устанавливаем связь первой файловой
переменной с физическим файлом}
Reset(f1); {открываем первый файл для чтения}
writeln(‘input filename2’);
Readln(filename); {вводится имя выходного файла}
Assign(f2, filename); {устанавливаем связь второй файловой
переменной с физическим файлом}
Rewrite(f2); {открываем второй файл для записи}
{Дальше необходимо последовательно считывать строки из первого файла, проверять
выполнение условия и записывать нужные строки во второй файл. Для чтения из
текстового файла рекомендуется использовать цикл по условию «пока не конец
файла»}
While not eof(f1) do
Begin
Readln(f1,s); {считываем очередную строку из первого файла}
If (s[1]=’A’) or (s[1]=’a’) then
Writeln(f2,s); {записываем во второй файл строки,
удовлетворяющие условию}
End;
Close(f1); {заканчиваем работу с первым файлом}
Close(f2); {заканчиваем работу со вторым файлом}
End.
Домашнее задание
Написать и отладить следующие программы:
1. Подсчитать в текстовом файле количество строк.
2. Подсчитать в текстовом файле количество слов.
3. Найти в текстовом файле слово максимальной длины.
4. Создать новый текстовый файл из исходного, записывая в него только те строки, в
которых есть слово 'Procedure'.
Типизированные файлы
Типизированный файл – это файл произвольного типа, у которого тип компонент может
быть любым, кроме файлового.
Описание типизированного файла:
Type tf=file of <тип компонент>;
Var f:tf;
g:file of <тип компонент>;
6 ____________________________________________________________________________________
_
Например:
Type tf=file of real;
tm=array[1..50] of integer;
Var f:tf;
g:file of char;
fm: file of tm;
x:real;
c:char;
m:tm;
Структура т
ипизированного
файла линейная:
0 1 2 3 4 и т. д.
#26
Так как все компоненты одного типа, то между ними нет никаких маркеров. Ставится только
маркер конца файла (#26). Компоненты типизированного файла нумеруются с нуля.
Для типизированного файла реализовано два способа доступа к компонентам:
последовательный (компоненты файла читаются и записываются одна за другим
последовательно)
прямой (можно установить указатель перед любой компонентой и прочитать или записать
ее. Указатель устанавливается при помощи процедуры seek) .
Типизированные файлы работают только с магнитными носителями.
Процедуры и функции, определенные над типизированными файлами
Assign(var f:tf; filename:string); – устанавливает соответствие между физическим и
1.
логическим именами файла.
Наличие этой процедуры обязательно.
Примеры:
Assign(f, ‘w:\info\kl10\a.dat’); в качестве расширения у типизированного файла указывается ‘dat’.
Writeln(‘input filename’); {ввод физического имени файла через переменную filename}
Readln(filename);
Assign(f,filename);
2.
Указатель файловой переменной устанавливается перед первой компонентой. Файл готов
для чтения. Если файла с таким именем нет, то выдается сообщение об ошибке. Reset(f);
Reset(var f:tf); открытие файла для чтения.
Rewrite(var f:tf); открытие файла для записи.
3.
Если такого файла нет, то создается метка файла и указатель файловой переменной
устанавливается перед первой компонентой. Если файл с таким именем есть, то указатель также
7 Eof(var f:tf): boolean; определяется конец файла. Функция возвращает значение true, если
____________________________________________________________________________________
_
устанавливается перед первой компонентой. Содержимое файла при записи будет стерто. За этим
должен следить программист.
4.
встретился маркер конца файла (#26).
5.
Close(var f:tf); закрытие файла для чтения или записи. Устанавливается маркер конца
файла (#26). По окончании работы файл должен быть обязательно закрыт, иначе к нему не
будет доступа. Close(f);
6.
7.
Read(var f:tf; k:<тип компонента>); чтение компоненты из файла в переменную k.
Write(var f:tf; k:<тип компонента>); запись из переменной k в компоненту файла.
k
После чтения/записи компоненты, указатель перемещается к следующей компоненте.
FileSize(var F) : LongInt; возвращает количество компонент типизированного файла.
FilePos(var F) : LongInt; возвращает номер позиции указателя файловой переменной.
Seek(var F; N: LongInt); устанавливает указатель перед компонентой N.
8.
9.
10.
Например: seek(f,0); устанавливает указатель перед нулевой компонентой.
seek(f,5); устанавливает указатель перед пятой компонентой.
11.
Truncate(var F); удаляется часть файла, начиная с текущей позиции указателя и до его
конца.
Например: seek(f,15);
truncate(f); удаляются все компоненты, начиная с 15й и до конца файла.
Так как типизированные файлы работают только с магнитными носителями, то ввод и вывод
компонент файла осуществляется опосредованно через текстовый файл.
Особенности типизированного файла
1. Это произвольный тип файла.
2. Один тип компонент (любой, кроме файлового).
3. Доступ к компонентам файла прямой и последовательный.
4. Файл открывается процедурами reset и rewrite и для чтения и для записи.
5. Типизированный файл работает только с магнитными носителями.
1. Создание типизированного файла. (Типизированный файл нельзя создать при помощи
Примеры программ
текстового редактора.)
Var f:file of real;
k:real;
fname:string;
n,i:integer;
begin writeln(‘input fname’);
8 ____________________________________________________________________________________
_
readln(fname);
assign(f,fname);
rewrite(f);
writeln(‘input n’);
readln(n);
for i:=1 to n do
begin readln(k);
write(f,k);
end;
close(f);
end.
2. Подсчитать сумму всех компонент целочисленного типизированного файла.
(Последовательный доступ.)
Var f:file of integer;
fname:string;
k, sum:integer;
begin writeln(‘input fname’);
readln(fname);
assign(f,fname);
reset(f);
sum:=0;
while not eof(f) do
begin read(f,k);
sum:=sum+k;
end;
close(f);
writeln(‘sum=’,sum);
end.
3. В типизированном файле вещественного типа поменять местами первую и последнюю
компоненты. (Прямой доступ.)
Var f:file of real;
x,y:real;
fname:string;
begin writeln(‘input fname’);
readln(fname);
assign(f,fname);
reset(f);
read(f,x);
seek(f,filesize(f)1);
read(f,y);
seek(f,0);
write(f,y);
seek(f,filesize(f)1);
9 ____________________________________________________________________________________
_
write(f,x);
close(f);
end.
Домашнее задание
Написать и отладить следующие программы:
1. Дан файл f, состоящий из действительных чисел. Найти сумму наибольшего и
наименьшего из его компонент.
2. Дан целочисленный типизированный файл f. Все отрицательные элементы заменить нулями.
3. Дан типизированный файл символьного типа. В конец файла дописать символы ‘e’,’n’,’d’.
4. Дан целочисленный файл. Последний и центральный элементы поменять местами.
10
Файлы в Паскале
Файлы в Паскале
Файлы в Паскале
Файлы в Паскале
Файлы в Паскале
Файлы в Паскале
Файлы в Паскале
Файлы в Паскале
Файлы в Паскале
Файлы в Паскале
Материалы на данной страницы взяты из открытых истончиков либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.