Файловый тип данных (структурированный).

Файлом – называется любой набор данных, хранимый на магнитном носителе или представленный последовательностью однотипных элементов.

Свойства файлов в Pascal.

1). Все элементы в файлах имеют общее имя и каждый элемент свой порядковый номер(начиная с0).

2). Любой элемент файла становится доступный только после последовательного перебора предыдущих элементов (так называемых файлы последующего доступа).

3). Количество элементов Файла заранее не фиксируются, и может изменяться в ходе выполнения программы. Размер ограничен только количеством свободного места на магнитном носителе.

4).Записав содержимое файла один раз его можно использовать не однократно, а также в разных программах.

Операции с файлами.

1). Чтение – вывод данных из файла в оперативную память.

2). Запись – вывод результатов из ОП в Файл.

!!! В данный момент времени файл может находиться только в одном состоянии (записи или чтение).

!!! Читать не существующий файл нельзя, записывать – можно. При это будет создан новый файл.

Чтение (контроль существующего файла)!!! Запись (контроль места на диске)!!!

Этапы работы с файлами

1). Определение файловой переменной (fp) – логический идентификатор файла (зависит от типа файла).

2). Установка связи с файловой переменной с файлом на диске.

3). Открытие файла (зависит от выполнения операций с файлами).

4). Обработка файла.

5). Закрытие файла.

Файловые типы

 


Типизированный файл

Текстовый файл

Не типизированный файл

(состоит из элементов одного типа)

(из текстовых строк разной длины)

(из не структурированных потоков байт)

Овал: 1Овал: 3Овал: 2

1.  Var

ФП:file of mun;

Var

A:file of integer;

2.  Var

ФП:text;

Var

B:text;

3.  Var

ФП:file;

Var

C:text

Информация кодируется, просмотреть через текстовый файл нельзя.

Можно посмотреть через DOS-овский редактор.

То же, как и типизированный просмотреть нельзя.

Примечание: Этапы третий и четвертый выполняются ч файловой переменной (ФП) связаны с файлами (имя или путь) на этапе 2.

НЕ нашли? Не то? Что вы ищете?

Особенности считывания и записи из файла.

1.)  Данные считываются и записываются по элементно в ячейку определяемую указателем (внутри код элемента файла).

 


1

4

5

2

Номер элемента

Указатель

Значение элементов файла.

2.)  При выполнении команд Reset и Rewrite текущий указатель поправлен на 1-ый элемент.

0

1

2

3

1

4

5

2

Reset

0

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) текущий указатель автоматически переходит на следующий элемент.

4).

z

1

2

4

1

Do Read (z, x)

После ! ТОЖЕ САМОЕ.

5). Пример:

Write (x, y)

Write (z, x) write (z, x,x1)

Команды работы с файлами.

Команда

Назначение

Вид файла

Примечание

Assign (ФП, путь)

Устанавливает связь между файловой переменной и файлом на диске

Все

Обязательная (этап №2)

Reset (ФП)

Открытие файла связь с файловой переменной для чтения

Все

Все 3-й этап

Текстовый

Данные из файла доступны только для использования

ReWrite(ФП)

Открытие файла связь с файловой переменной для записи

Данные из файла доступны для изменения

Append (ФП)

Открытие файла для добавления

Конец файла, данные доступны только для добавления

Close (ФП)

Закрывает доступ к файлу на диске (этап 5)

Все

Файл с диска не удаляется

Erase (ФП)

Удаление файла с диска

Все

Файл должен быть закрыт

ReName (ФП, имя)

Переименование файла

Все

Файл должен быть закрыт

IOResult (ФП)

Возвращает код ошибки ввода(если 0 то ошибки нет)

Все

Использование для проверки существования файла на диске

EoF (ФП)

End of File

Возвращает логическое значение о достижении (true) или не достижении (false) конца файла

Все

Использование для обработки всех элементов (поочередно)

EoLn (ФП)

Возвращает логическое значение о достижении (true) или не достижении (false) конца строки

Текстовый

Read (ФП,переменная)

Считывает с диска текущий элемент файла в ОП (переменная)

Текстовый

Типизированный

Типы данных должны совпадать между файловой переменной и переменной ОП

ReadLn (ФП,переменная)

Смотри выше

Текстовый

Смотри выше

Write (ФП, переменная)

Запись и ОП (переменная) в текущий позицию файла

Текстовый

Типизированный

WriteLn

Текстовый

File Size (ФП)

Возвращает количество элементов в файле

Типизированный

Быстрый переход к концу файла!!!

Seek (ФП, индекс)

Устанавливает указатель на заданный индекс (номер элемента)

Типизированный

Seek(ФП, file size (ФП)+1)

File Pos (ФП)

Возвращает номер текущего элемента (индекс)

Типизированный

6). После выполнения команды Append указатель устанавливается на новый последующий элемент.

0

1

2

3

До

1

2

4

1

0

1

2

3

4

После

1

2

4

1

7). Добавление нового элемента в типизированный файл:

1. Reset (z)

2. Seek (z, file size (z)+1)

3. Записать данные Write (z, x)


Задача. Вывести на экран Слова, хранившиеся на диске в текстовом файле по адресу:

S:\file. txt

Посчитать количество слов в файле

Примечание: через FarManager создайте файл S:\file. txt и запишите в него предложение

Программа Pascal умеет работать с файлами

Словесное описание

Блок-схема

Pascal

Открытие f для чтения

 

нет

 

да

 

закрытие f

 
Блок-схема: знак завершения: Конец
 


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

Kol:=kol+1

 
Блок-схема: дисплей: tБлок-схема: данные: t Ромб: Не конец

f

1.  Связь файловой переменной f с файлом S:\file. txt

2.  Открытие файла для чтения.

3.  До тех пор пока не кончился файл (текущий элемент не последний)

·  считать из файла текущее значение в t.

·  выводится на экран t

·  увеличить kol на 1

4.  Вывести kol на экран

5.  Закрытие f

Задача. Вводить с клавиатуры слова (количество определяет пользователь).

Записать их в текстовый файл по адресу S:\file_2.txt

Примечание: после работы программы откройте через FarManager содержимое файла S:\file_2.txt

Блок-схема: знак завершения: Конец

Закрыть f

 
Блок-схема: данные: tБлок-схема: данные: tБлок-схема: подготовка: x:=1, KolПараллелограмм: Kol

Открыть f для записи

 

Связь f с S:\file_2.txt

 
Блок-схема: знак завершения: Начало1 Спросить количество слов (kol)

2  Связь файловой переменной с файлом S:\file_2.txt

3  Открытие f для записи.

4  До тех пор пока не кончились элементы:

·  ввод пользователя с клавиатур числа (t)

·  запись t в файл f

5 Закрытие f

Блок-схема: магнитный диск: f

Program Write_file_txt;

Var f:text;

t:string;

X, Kol:integer

Begin

Write(‘Количество слов);

ReadLn(Kol);

Assign(f, ‘S:\file_2.txt’);

ReWrite(f);

For x:=1 to kol do

Begin

Write(‘слово:’);

ReadLn(t);

Writeln(f, t);

End;

Close(f);

End.

Задача. Вводить с клавиатуры целые числа (количество определяет пользователь).

Записать их в типизированный файл по адресу S:\file. tip

Блок-схема: знак завершения: Конец

Закрыть f-2

 
Блок-схема: данные: tБлок-схема: данные: tБлок-схема: подготовка: x:=1, KolПараллелограмм: Kol

Открыть f-2 для записи

 

Связь f-2 с S:\file. tip

 
Блок-схема: знак завершения: Начало1 Спросить количество целых чисел (kol)

Связь файловой переменной с файлом S:\file. tip

Открытие f-2 для записи.

До тех пор пока не кончились элементы:

·  ввод пользователя с клавиатур числа (t)

·  запись t в файл f-2

5 Закрытие f-2.

Блок-схема: магнитный диск: f-2

Program Write_file;

Var f-2:file of integer;

Name:string;

X, T,Kol:integer

Begin

Write(‘Количество чисел’);

ReadLn(Kol);

Assign(f-2, ‘S:\file. tip’);

ReWrite(f-2);

For x:=1 to kol do

Begin

Write(‘Число’);

ReadLn(t);

Write(f-2,t);

End;

Close(f-2);

End.

Задача. Вывести на экран все целые числа, хранившиеся на диске в типизированном файле по адресу:

S:\file. tip

Посчитать сумму элементов

Словесное описание

Блок-схема

Pascal

Блок-схема: знак завершения: Начало

Открытие f-1 для чтения

 

нет

 

да

 

закрытие f-1

 
Блок-схема: знак завершения: Конец
 


Program read_file, t;

Uses Crt;

Var f-1: file of integer;

Sum, t:integer;

Name: string;

Begin

Writeln(‘Укажите путь к исходному файлу’);

Readln(name);

Assign(f-1,name);

Reset(f-1);

Writeln(‘числа из файла:’);

While not(eof(f-1)) do

Begin

Read(f-1,t);

WriteLn(t);

Sum:=Sum+t;

End;

WriteLn(‘Сумма чисел в файле’,Sum);

Close(f-1);

End.

Блок-схема: дисплей: Sum

Sum:=Sum+t

 
Блок-схема: дисплей: tБлок-схема: данные: t Ромб: Не конец

f-1

6.  Спросить у пользователя путь к исходному файлу (name)

7.  Связь файловой переменной f-1 с файлом name

8.  Открытие файла для чтения.

9.  До тех пор пока не кончился файл (текущий элемент не последний)

·  считать из файла текущее значение в t.

·  выводится на экран t

·  увеличить Sum на t

10.  Вывести Sum на экран

11.  Закрытие f-1

Задача 3. Проверить существует ли на диске file файл (любой тип) по заданному адресу.

1.  Блок-схема: знак завершения: конецБлок-схема: дисплей: Файла нетБлок-схема: дисплей: Файл естьРомб: Код ошибки

=0

открытие f-3 для чтения

 

Связь f-3 с name

 
Блок-схема: данные: nameБлок-схема: знак завершения: началоСпросить путь к файлу в name.

2.  Связь файловой переменной
f-3 с файлом name.

3.  Отключить директива компилятора контроль ввода

4. Открыть файл f-3 для чтения.

5. Проверить код ошибки (то есть файла существует)

·  Если код = 0, то ошибки нет (т. е файл есть)

·  иначе, то ошибка ввода (то есть файла нет).

6) Включить директиву компилятора контроль ввода.

нет

 

да

 
 


Program Prox_file;

Var f-3:(любой тип (текстовый, типизированный))

Name:string;

Begin

Write(‘Имя файла???’);

ReadLn(name);

Assign(f-3, name);

{$ i - }

Reset(f-3);

IF IOReSULT = 0 then

begin

WriteLn(‘Файл есть’);

Colse (f-3);

end

Else

WriteLn(‘Файла нет’);

{$ i +}

End.


Связь f_st с S:\file_st. tip

 
Параллелограмм: KolБлок-схема: знак завершения: НачалоБлок-схема: данные: tБлок-схема: подготовка: n:=1, Kol

Открыть f_st для записи

 
Задача САМОСТОЯТЕЛЬНАЯ. Вводить с клавиатуры сведения об успеваемости студентов (количество определяет пользователь): фамилия, оценка. Данные сохранить в типизированный файл записи. В текстовый файл записать средний балл и фамилии студентов, имеющих оценку выше средней

Блок-схема: данные: St_all[n].fam, Блок-схема: магнитный диск: F_st

Program file_stud;

Type tip_st=record

FIO:string;

m:integer;

End;

Var f_st: file of tip_st;

st_all:array[1..100] of tip_st;

Kol, n:integer;

Name_st: string;

Sr: real;

Begin

Закрыть f_st