Обработка файлов

advertisement
1
Файловый тип данных (структурированный).
Файлом – называется любой набор данных, хранимый на магнитном носителе или представленный
последовательностью однотипных элементов.
Свойства файлов в Pascal.
1). Все элементы в файлах имеют общее имя и каждый элемент свой порядковый номер(начиная с0).
2). Любой элемент файла становится доступный только после последовательного перебора
предыдущих элементов (так называемых файлы последующего доступа).
3). Количество элементов Файла заранее не фиксируются, и может изменяться в ходе выполнения
программы. Размер ограничен только количеством свободного места на магнитном носителе.
4).Записав содержимое файла один раз его можно использовать не однократно, а также в разных
программах.
Операции с файлами.
1). Чтение – вывод данных из файла в оперативную память.
2). Запись – вывод результатов из ОП в Файл.
!!! В данный момент времени файл может находиться только в одном состоянии (записи или чтение).
!!! Читать не существующий файл нельзя, записывать – можно. При это будет создан новый файл.
(контроль существующего файла)!!!
Чтение
ОП
Диск
(контроль места на диске)!!!
Запись
Этапы работы с файлами
1). Определение файловой переменной (fp) – логический идентификатор файла (зависит от типа
файла).
2). Установка связи с файловой переменной с файлом на диске.
3). Открытие файла (зависит от выполнения операций с файлами).
4). Обработка файла.
5). Закрытие файла.
Файловые типы
Типизированный файл
Текстовый файл
(состоит из элементов
одного типа)
(из текстовых строк
разной длины)
1
2
Не типизированный
файл
(из не
структурированных
потоков байт)
3
2
1. Var
Var
A:file of integer;
ФП:file of mun;
2. Var
ФП:text;
Var
B:text;
3. Var
Var
C:text
ФП:file;
Информация кодируется,
просмотреть через текстовый
файл нельзя.
Можно посмотреть через DOSовский редактор.
То же, как и типизированный
просмотреть нельзя.
Примечание: Этапы третий и четвертый выполняются ч файловой переменной (ФП) связаны с
файлами (имя или путь) на этапе 2.
Особенности считывания и записи из файла.
1.) Данные считываются и записываются по элементно в ячейку определяемую указателем (внутри
код элемента файла).
1
4
5
2
Номер элемента
Указатель
Значение элементов файла.
2.) При выполнении команд Reset и Rewrite текущий указатель поправлен на 1-ый элемент.
0
1
0
1
4
2
5
3
2
Reset
Rewrite
3.) после выполнения операций Write(x,y) значение в текущую указателя на файл, связанный с
файловой переменной помещается из переменной x.
z
1
2
4
1
Write(z;x) Do
Read (x)
x
1
2
6
1
После
После выполнения операции Write (z;x) текущий указатель автоматически переходит на следующий
элемент.
3
4).
z
1
2
4
1
Do Read (z,x)
После
x
! ТОЖЕ САМОЕ.
5). Пример:
Write (x,y)
Write (z,x) write (z,x,x1)
Команды работы с файлами.
Команда
Назначение
Assign (ФП, путь)
Устанавливает связь
между файловой
переменной и файлом
на диске
Открытие файла связь с
файловой переменной
для чтения
Открытие файла связь с
файловой переменной
для записи
Открытие файла для
добавления
Reset (ФП)
ReWrite(ФП)
Append (ФП)
Close (ФП)
Erase (ФП)
Вид файла
Все
Закрывает доступ к
Все
файлу на диске (этап 5)
Удаление файла с диска Все
Переименование файла
Все
IOResult (ФП)
Возвращает код
ошибки ввода(если 0 то
ошибки нет)
Все
EoF (ФП)
End of File
Возвращает логическое
значение о достижении
(true) или не
достижении (false)
конца файла
Возвращает логическое
значение о достижении
(true) или не
достижении (false)
конца строки
Считывает с диска
текущий элемент файла
Все
Read (ФП,переменная)
3-й этап
Текстовый
ReName (ФП, имя)
EoLn (ФП)
Обязательная (этап №2)
Все
Все
Примечание
Данные из файла
доступны только для
использования
Данные из файла
доступны для
изменения
Конец файла, данные
доступны только для
добавления
Файл с диска не
удаляется
Файл должен быть
закрыт
Файл должен быть
закрыт
Использование для
проверки
существования файла
на диске
Использование для
обработки всех
элементов (поочередно)
Текстовый
Текстовый
Типизированный
Типы данных должны
совпадать между
4
в ОП (переменная)
ReadLn
(ФП,переменная)
Write (ФП,
переменная)
WriteLn
File Size (ФП)
Смотри выше
Текстовый
Запись и ОП
Текстовый
(переменная) в текущий Типизированный
позицию файла
Текстовый
Возвращает количество Типизированный
элементов в файле
Устанавливает
указатель на заданный
индекс (номер
элемента)
Возвращает номер
текущего элемента
(индекс)
Seek (ФП, индекс)
File Pos (ФП)
Типизированный
файловой переменной и
переменной ОП
Смотри выше
Быстрый переход к
!!!
концу файла
Seek(ФП,file size
(ФП)+1)
Типизированный
6). После выполнения команды Append указатель устанавливается на новый последующий элемент.
До
После
0
1
0
1
1
2
1
2
2
4
2
4
3
1
3
1
4
7). Добавление нового элемента в типизированный файл:
1. Reset (z)
2. Seek (z, file size (z)+1)
3. Записать данные Write (z, x)
5
Задача . Вывести на экран Слова, хранившиеся на диске в текстовом файле по адресу:
S:\file.txt
Посчитать количество слов в файле
Примечание: через FarManager создайте файл S:\file.txt и запишите в него предложение
Программа Pascal умеет работать с файлами
Словесное описание
Блок-схема
Начало
1.
Связь файловой переменной f
с файлом S:\file.txt
2.
Открытие файла для чтения.
3.
До тех пор пока не кончился
файл (текущий элемент не
последний)
 считать из файла текущее
значение в t.
 выводится на экран t
 увеличить kol на 1
Связь f с S:\file.txt
Открытие f для чтения
Не конец
f
да
t
f
t
4.
Вывести kol на экран
5. Закрытие f
нет
Kol:=kol+1
Pascal
Program read_file_txt;
Var f: text;
kol:integer;
t: string;
Begin
Assign(f, ‘S:\file.txt’);
Reset(f);
Writeln(‘Слова из файла:’);
While not(eof(f)) do
Begin
Read(f,t);
WriteLn(t);
kol:=kol+1;
End;
WriteLn(‘в файле
’,kol,’слов’);
Close(f);
End.
kol
закрытие f
Конец
Задача . Вводить с клавиатуры слова (количество определяет пользователь).
Записать их в текстовый файл по адресу S:\file_2.txt
Примечание: после работы программы откройте через FarManager содержимое файла S:\file_2.txt
1 Спросить количество слов (kol)
Program Write_file_txt;
Начало
2 Связь файловой переменной с
Var f:text;
файлом S:\file_2.txt
t:string;
Kol
3 Открытие f для записи.
X,Kol:integer
4 До тех пор пока не кончились
Begin
Связь f с S:\file_2.txt
элементы:
Write(‘Количество слов);
 ввод пользователя с
Открыть f для записи
клавиатур числа (t)
ReadLn(Kol);
 запись t в файл f
Assign(f, ‘S:\file_2.txt’);
x:=1, Kol
5 Закрытие f
ReWrite(f);
t
For x:=1 to kol do
Begin
t
f
Write(‘слово:’);
ReadLn(t);
Закрыть f
Writeln(f,t);
End;
Конец
Close(f);
End.
6
Задача . Вводить с клавиатуры целые числа (количество определяет пользователь).
Записать их в типизированный файл по адресу S:\file.tip
1 Спросить количество целых
Program Write_file;
Начало
чисел (kol)
Var f-2:file of integer;
5 Связь файловой переменной с
Name:string;
Kol
файлом S:\file.tip
X,T,Kol:integer
6 Открытие f-2 для записи.
Begin
Связь
f-2
с
S:\file.tip
7 До тех пор пока не кончились
Write(‘Количество чисел’);
элементы:
Открыть f-2 для записи
 ввод пользователя с
ReadLn(Kol);
клавиатур числа (t)
Assign(f-2, ‘S:\file.tip’);
x:=1, Kol
 запись t в файл f-2
ReWrite(f-2);
5 Закрытие f-2.
t
For x:=1 to kol do
Begin
t
f-2
Write(‘Число’);
ReadLn(t);
Закрыть f-2
Write(f-2,t);
End;
Конец
Close(f-2);
End.
Задача . Вывести на экран все целые числа, хранившиеся на диске в типизированном файле по адресу:
S:\file.tip
Посчитать сумму элементов
Словесное описание
Блок-схема
Pascal
Program read_file, t;
Начало
Uses Crt;
Var f-1: file of integer;
name
Sum, t:integer;
6. Спросить у пользователя путь
Name: string;
Связь
f-1
с
name
к исходному файлу (name)
Begin
7. Связь файловой переменной f1 с файлом name
Writeln(‘Укажите путь к
Открытие f-1 для чтения
исходному файлу’);
8. Открытие файла для чтения.
Readln(name);
нет
Assign(f-1,name);
Не конец
9. До тех пор пока не кончился
f-1
Reset(f-1);
файл (текущий элемент не
последний)
Writeln(‘числа из файла:’);
да
 считать из файла текущее
While not(eof(f-1)) do
t
f-1
значение в t.
Begin
 выводится на экран t
Read(f-1,t);
t
 увеличить Sum на t
WriteLn(t);
Sum:=Sum+t;
Sum:=Sum+t
End;
10. Вывести Sum на экран
WriteLn(‘Сумма чисел в
файле’,Sum);
Sum
Close(f-1);
End.
11. Закрытие f-1
закрытие f-1
Конец
7
Задача 3. Проверить существует ли на диске file файл (любой тип) по заданному адресу.
Program Prox_file;
1. Спросить путь к файлу в name.
начало
2. Связь файловой переменной
Var f-3:(любой тип (текстовый,
f-3 с файлом name.
типизированный))
name
3. Отключить директива
Name:string;
компилятора контроль ввода
Связь f-3 с name
Begin
4. Открыть файл f-3 для чтения.
Отключить
Write(‘Имя файла???’);
5. Проверить код ошибки (то есть
контроль ввода
файла существует)
ReadLn(name);
 Если код = 0, то ошибки
открытие f-3 для чтения
Assign(f-3, name);
нет (т.е файл есть)
{$ i - }
 иначе, то ошибка ввода (то
Reset(f-3);
да
есть файла нет).
нет
Код
ошибки
IF
IOReSULT = 0 then
6) Включить директиву
=0
компилятора контроль ввода.
begin
WriteLn(‘Файл есть’);
Файла нет
Файл есть
Colse (f-3);
end
Else
Включить
WriteLn(‘Файла нет’);
контроль
{$ i +}
ввода
End.
конец
Решение задач с использованием файла.
Задача.
На основании заданного двумерного массива (с клавиатуры) сформировать одномерный массив по
количеству элементов в каждой строке, которая больше первого значения вещественного
типизированного файла (полный путь задает пользователь) одномерный массив сохранить в
типизированном файле (в личном каталоге имя задает пользователь) вывести на экран.
Входные:
Mas – двумерный массив вещественных чисел
N – (размерность) количество строк
M – количество столбцов
Path – полный путь типизированного исходного файла (символьная (string))
Name – имя типизированного файла с одномерным массивом
Выходные:
Od – одномерный массив (целый(byte)) размерностью n
Промежуточное:
X – номер текущей строки (byte)
Y – номер текущего столбца (byte)
f-1 – файловая переменная для файла по адресу путь (path)
poisr – число из файла для сравнения
S – количество найденных элементов в строке
Patc_new – полный путь к новому файлу
f-2 – файловая переменная для нового файла
Z – число из нового файла
8
1.Заполнить массив.
2. Найти число для
сравнения из файла:
А) спросить имя файла
Б) связь с файловой
переменной
В) открытие файла для
чтения с циклической
проверкой на существование
Г) считывание из файла
первого элемента poisk
Д) закрытие f-1
3) Формирование Od
4) Сохранить в
типизированный файл:
А) вывести имя нового
файла
Б) формирования полного
пути
В) связь файловой
переменной
f-2 с файлом на диске
path_new
Г) открытие f-2 для записи
без проверки на
существование
Д) запись элементов массива
Od в f-2 (поэлементно)
Е) закрыть f-2
5) вывод из f-2 {смотри задание
1}
А) открытие f-2 для чтения
Б) до тех пор, пока не
кончился файл считывать
элементы b = и вывод на
экран
Г) закрытие f-2
6) КОНЕЦ!!!
Program
Var mas:array[1..51..5] of Real
S,M,N,:byte;
Path,name:string;
Od:array[1...5] of Real
X,Y:integer;
f-2,f-1:file of Real;
path_new:string;
z:Real;
Begin Read(n);
Read(m);
For X:=1 to N do
For Y:=1 to m do
Read(Mas[X,Y]);
Read(Path);
Assign(f-1,Path);
Reset(f-1);
WriteLn(poisk);
Close(f-1);
For X:=1 to N do
Begin
For Y:=1 to M do
If mas[X,Y]>poisk
then
S:=S+1;
Od[X]:=S
End;
начало
N,M
X:=1,N
Y:=1,M
Mas X,Y
Path
Связь f-1 с path
Открытие f-1
Poisk
Закрыть f-1
X:=1,N
S:=0
Y:=1,M
Read(name);
Path_new:=’z:\…’+name;
Assign(f-2,path_new);
For X:=1 to N do
Write(OD[X])
Close(f-2);
Reset(f-2);
While not eof(f-2) do
Begin
Write(X);{запись}
Write(Z);{вывод}
Close(f-2);
End;
Mas
X,Y>poisk
S:=S+1
Od, X:=S
name
Path_new:=”z:\..”+name
Связь f-2 c Path_new
Связь f-2 для записи
X:=1,N
Od X
f-2
9
Закрыть f-2
Открыть f-2 для чтения
Не конец
f-2
Z
Z
Закрыть f-2
Конец
Download