Файлы. Типы файлов

Содержание

Слайд 2

Файлы 1 Типы файлов Файл - любая именованная область внешней памяти

Файлы

1 Типы файлов

Файл - любая именованная область внешней памяти

Характерные особенности:
имя;

содержит компоненты одного типа;
длина файла не оговаривается при создании.

Связано ли расширение файла с его содержимым?

- НЕТ

Слайд 3

Файлы 1 Типы файлов Объявление файловой переменной: = FILE OF ;

Файлы

1 Типы файлов

Объявление файловой переменной:
<имя> = FILE OF <тип>; (типизированный)

<имя> = TEXT; (текстовый)
<имя> = FILE. (нетипизированный)

type
product = record
name: string;
code: word;
price: real;
end;
text80 = file of string[80];
var
f1: file of char;
f2: text;
f3: file;
f4: text80;
f5: file of product;

Слайд 4

Файлы Типы файлов Доступ к файлу Текстовые файлы Типизированный файлы Нетипизированные файлы Умная Йохансон

Файлы

Типы файлов
Доступ к файлу
Текстовые файлы
Типизированный файлы
Нетипизированные файлы
Умная Йохансон

Слайд 5

Файлы 2 Доступ к файлу Файловая переменная связывается с именем файла:

Файлы

2 Доступ к файлу

Файловая переменная связывается с именем файла:
ASSIGN (<ф.п.>, <имя

файла>);

здесь <ф.п.> – файловая переменная (правильный идентификатор объявленный в программе как переменная файлового типа);
<имя файла> – текстовое выражение, содержащее имя файла.

const
name=’e:\work\try.txt’;
var
f: Text;
begin
assign(f,name);
...

Слайд 6

Файлы 2 Доступ к файлу После связывания файловой переменной с файлом

Файлы

2 Доступ к файлу

После связывания файловой переменной с файлом процедура работы

с файлом состоит из следующих этапов:
инициация файла – указание направление передачи данных;
чтение и/или запись информации; (может повторяться сколько угодно раз)
закрытие файла.

Чтение файла:
RESET(<ф.п.>);

Перезапись файла:
REWRITE(<ф.п.>);

Добавление в файл:
APPEND(<ф.п.>);

Закрытие файла:
CLOSE (<ф.п.>);

Слайд 7

Файлы 2 Доступ к файлу Специальные логические функции: EOF( ): boolean

Файлы

2 Доступ к файлу

Специальные логические функции:
EOF(<ф.п.>): boolean – возвращает TRUE ,

если файловый указатель стоит в конце файла.
EOLN(<ф.п.>): boolean – возвращает TRUE , если файловый указатель стоит в конце строки

Чтение из текстового файла:
READ (<ф.п.>, <сп. ввода> )
READLN (<ф.п.>, <сп. ввода> )

Запись в текстовый файл:
WRITE (<ф.п.>, <сп. вывода> )
WRITELN (<ф.п.>, <сп. вывода> )

Слайд 8

Файлы Типы файлов Доступ к файлу Текстовые файлы Типизированный файлы Нетипизированные файлы Умная Йохансон

Файлы

Типы файлов
Доступ к файлу
Текстовые файлы
Типизированный файлы
Нетипизированные файлы
Умная Йохансон

Слайд 9

Файлы 3 Текстовый файл var f: text; s: string; begin assign(f,'myprog.pas');

Файлы

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

var
f: text;
s: string;
begin
assign(f,'myprog.pas');
reset(f);
while not eof(f) do
begin

readln(f,s);
writeln(s);
end;
close(f);
end.

Вывод на экран исходного текста программы

Слайд 10

Файлы 3 Текстовый файл const N = 5; var f: text;

Файлы

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

const N = 5;
var
f: text;
m: array[1..N] of

real;
i: integer;
begin
assign(f,'prog.dat');
rewrite(f);
for i := 1 to N do
begin
m[i] := random * 10;
writeln(m[i]);//вывод на экран
write(f,m[i]);//вывод в файл
end;
close(f);
end.

Запись значений массива в файл

5.34014130259871
0.0751469703741125
9.14481708274447
2.01952238661215
6.81229438949949

На экране

Слайд 11

Файлы 3 Текстовый файл Содержимое файла prog.dat (в виде текста) 5.340141302598710.07514697037411259.144817082744472.019522386612156.81229438949949

Файлы

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

Содержимое файла prog.dat (в виде текста)

5.340141302598710.07514697037411259.144817082744472.019522386612156.81229438949949

Содержимое файла prog.dat в

виде бинарного файла

Почему файл занимает 82 байта?

В файле 82 символа по 1 байту на каждый символ

Слайд 12

Файлы 3 Текстовый файл Изменим вывод в файл, вместо write(f,m[i]) writeln(f,m[i])

Файлы

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

Изменим вывод в файл, вместо write(f,m[i]) writeln(f,m[i])

4.72753859810882
9.44486666444916
5.96698050665063
6.08366832886062
3.03903472751334

Содержимое файла prog.dat

(в виде текста)

Содержимое файла prog.dat в виде бинарного файла

Почему файл занимает 90 байта?

Появились символы с 13 и 10
13 - CR (перевод каретки). Курсор перемещается к левому краю поля, не переходя на другую строку.
10 - LF (перевод строки). Курсор перемещается на следующую строку.

Слайд 13

Файлы 3 Текстовый файл var f: text; s: string; begin assign(f,'MyText.txt');

Файлы

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

var
f: text;
s: string;
begin
assign(f,'MyText.txt');
rewrite(f);
repeat
readln(s);
if length(s)>0 then

writeln(f,s);
until length(s)=0;
close(f);
end.

Запись текста в текстовый файл

Слайд 14

Файлы Типы файлов Доступ к файлу Текстовые файлы Типизированный файлы Нетипизированные файлы Умная Йохансон

Файлы

Типы файлов
Доступ к файлу
Текстовые файлы
Типизированный файлы
Нетипизированные файлы
Умная Йохансон

Слайд 15

Файлы 4 Типизированный файл Работа с типизированными файлами несколько отличается от

Файлы

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

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

текстовыми файлами, а именно:
уже существующий файл может быть инициирован для чтения и записи процедурой RESET.
для чтения и записи используются соответственно процедуры READ и WRITE.
для работы с типизированными файлами могут использоваться процедуры и функции SEEK, FILESIZE, FILEPOS
Слайд 16

Файлы 4 Типизированный файл Процедура SEEK. Смещает указатель файла к требуемому

Файлы

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

Процедура SEEK. Смещает указатель файла к требуемому компоненту. Формат

обращения:
SEEK(<ф.п.>, <№ компонента>)
Здесь <№ компонента> – выражение типа LONGINT, указывающее новый номер компонента файла.
Функция FILESIZE. Возвращает значение типа LONGINT, которое содержит количество компонентов файла. Формат обращения:
FILESIZE(<ф.п.>)
Функция FILEPOS. Возвращает значение типа LONGINT, содержащее порядковый номер компонента файла, который будет обрабатываться следующей операцией ввода-вывода. Формат обращения:
FILEPOS(<ф.п.>)
Слайд 17

Файлы 3 Текстовый файл Заполнение типизированного файла type Person = record

Файлы

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

Заполнение типизированного файла
type
Person = record
name: string;
year:

integer;
end;
var
f: file of Person;
Rec: Person;
yes: integer;
 begin
assign(f,'List.dat');
rewrite(f); {для добавления в файл reset(f); seek(f, filesize(f)); }
repeat
write('Введи фамилию : '); readln(Rec.name);
write('Введи год рождения : '); readln(Rec.year);
  write(f, Rec);
writeln('Добавить ещё одну запись? (1 - да, 0 - нет)'); readln(yes);
until yes<>1;
  close(f);
end.
Слайд 18

Файлы 4 Типизированный файл Вывод на экран содержимого типизированного файла type

Файлы

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

Вывод на экран содержимого типизированного файла
type
Person = record

name: string;
year: integer;
end;
var
f: file of Person;
Rec: Person;
yes: integer;
 begin
assign(f,'List.dat');
reset(f);
while not eof(f) do
begin
read(f, Rec);
writeln(Rec.name, Rec.year:6);
end;
close(f);
end.
Слайд 19

Файлы Типы файлов Доступ к файлу Текстовые файлы Типизированный файлы Нетипизированные файлы Умная Йохансон

Файлы

Типы файлов
Доступ к файлу
Текстовые файлы
Типизированный файлы
Нетипизированные файлы
Умная Йохансон

Слайд 20

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

Файлы

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

Слайд 21

Файлы 5 Нетипизированный файл //запись в файл 5 чисел типа shortint

Файлы

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

//запись в файл 5 чисел типа shortint (1 байт

-128..127)
const N = 5;
var
f1 : file;
arr : array [1..N] of shortint ;
i : byte;
begin
arr[1] := 0;
arr[2] := 127;
arr[3] := -128;
arr[4] := -1;
arr[5] := 1;
assign(f1,'test.dat');
rewrite(f1);
for i := 1 to N do
write(f1,arr[i]);
close(f1);
end.

hex 00 – bin 0000 0000 dec 0
hex 7F – bin 0111 1111 dec 127
hex 80 – bin 1000 0000 dec 128
hex FF – bin 1111 1111 dec 255
hex 01 – bin 0000 0001 dec 1

Слайд 22

Файлы 5 Нетипизированный файл 1 байт со знаком: //опер. в доп.

Файлы

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

1 байт со знаком:
//опер. в доп. коде
127 + 1

= ?
127 : 0111 1111
1: 0000 0001
+: 1000 0000
обр: 1111 1110
прям: 1000 0001
ответ: -1
Слайд 23

Файлы 5 Нетипизированный файл //запись в файл 5 чисел типа smallint(2

Файлы

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

//запись в файл 5 чисел типа smallint(2 байт -32768..32767)
const

N = 4;
var
f1 : file;
arr : array [1..N] of smallint;
i : byte;
begin
arr[1] := 0;
arr[2] := 32767;
arr[3] := -1;
arr[4] := 16;
assign(f1,'test.dat');
rewrite(f1);
for i := 1 to N do
write(f1,arr[i]);
close(f1);
end.
Слайд 24

Файлы 5 Нетипизированный файл hex 00 00 – bin 0000 0000

Файлы

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

hex 00 00 – bin 0000 0000 0000

0000 dec 0
hex 7F FF – bin 0111 1111 1111 1111 dec 32767
hex FF FF – bin 1111 1111 1111 1111 dec 65535
hex 00 10 – bin 0000 0000 0001 0000 dec 16

Младший байт
Старший байт

arr[1] := 0;
arr[2] := 32767;
arr[3] := -1;
arr[4] := 16;

Слайд 25

Файлы 5 Нетипизированный файл //запись в файл переменных разного типа var

Файлы

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

//запись в файл переменных разного типа
var
f1 : file;

vr1 : single ;
vr2 : integer;
vr3 : byte;
vr4 : string;
vr5 : boolean;
begin
vr1 := -12.5; vr2 := -56; vr3 := 32;
vr4 := 'абвг123'; vr5 := true;
assign(f1,'test.dat');
rewrite(f1);
write(f1,vr1); write(f1,vr2); write(f1,vr3);
write(f1,vr4); write(f1,vr5);
close(f1);
end.
Слайд 26

Файлы 5 Нетипизированный файл Содержимое файла Single -12.5 Integer -56 Byte

Файлы

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

Содержимое файла

Single
-12.5

Integer
-56

Byte
32

String
абвг123 (кодировка CP1251)

Boolean
true

Слайд 27

Файлы 5 Нетипизированный файл Пример: Прочитать ID3(v1-v1.1) теги из mp3 файла

Файлы

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

Пример: Прочитать ID3(v1-v1.1) теги из mp3 файла

Слайд 28

Файлы 5 Нетипизированный файл Структура программы для чтения метаданных: открыть файл

Файлы

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

Структура программы для чтения метаданных:
открыть файл для чтения;

отступить на 128 байт с конца файла;
прочитать заголовок;
если заголовок «TAG» - прочитать поля;
закрыть файл.
Слайд 29

Файлы 5 Нетипизированный файл var f_music : file; stag : string[3];

Файлы

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

var
f_music : file;
stag : string[3];
sTitle,sArtist,sAlbum :string[30];

sYear : string[4];sComment :string[28];
fsize : int64; i :integer;
begin
assign(f_music, 'music.mp3'); reset(f_music);
fsize := FileSize(f_music); seek(f_music,fsize-128);
read(f_music,sTag);
writeln('Длина sTag 'length(sTag)); writeln('TAG - ',sTag);
read(f_music,sTitle); read(f_music,sArtist);
read(f_music,sAlbum); read(f_music,sYear);
read(f_music,sComment);
close(f_music);
writeln('Исполнитель - ',sArtist);
writeln('название трека - ',sTitle);
writeln('Альбом - ',sAlbum);
writeln('Год - ',sYear);
writeln('Коментарий - ',sComment);
end.
Слайд 30

Файлы 5 Нетипизированный файл Почему длина переменной sTag 84 символа?

Файлы

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

Почему длина переменной sTag 84 символа?

Слайд 31

Файлы 5 Нетипизированный файл var f_music : file; stag : array

Файлы

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

var
f_music : file;
stag : array [1..3] of

byte;
sTitle, sArtist,sAlbum : array [1..30] of byte;
sYear : array [1..4] of byte;
sComment : array [1..28] of byte;
fsize : int64; i :integer;
begin
assign(f_music, 'music.mp3');
reset(f_music);
fsize := FileSize(f_music);
seek(f_music,fsize-128);
read(f_music,sTag);
Слайд 32

Файлы 5 Нетипизированный файл if Concat(chr(sTag[1]),chr(sTag[2]),chr(sTag[3]))='TAG' then begin read(f_music,sTitle); read(f_music,sArtist); read(f_music,sAlbum);

Файлы

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

if Concat(chr(sTag[1]),chr(sTag[2]),chr(sTag[3]))='TAG' then
begin
read(f_music,sTitle); read(f_music,sArtist);
read(f_music,sAlbum); read(f_music,sYear);

read(f_music,sComment);
writeln('Содержимое ID3v1');
write('Исполнитель - ');
for i := 1 to 30 do write(chr(sArtist[i]));
writeln; write('название трека - ');
for i := 1 to 30 do write(chr(sTitle[i])); writeln;
write('Альбом - ');
for i := 1 to 30 do write(chr(sAlbum[i])); writeln;
write('Год - ');
for i := 1 to 4 do write(chr(sYear[i])); writeln;
write('Коментарий - ');
for i := 1 to 28 do write(chr(sComment[i])); writeln;
end
else writeln('ID3v1 не заполнен');
close(f_music);
end.
Слайд 33

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

Файлы

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

Слайд 34

Файлы 5 Нетипизированный файл Пример: Вывести графическом режиме изображение, которое хранится

Файлы

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

Пример: Вывести графическом режиме изображение, которое хранится в файле

Структура

файла
0 4 Смещение, с которого начинается само изображение
4 3*N Палитра, хранится три составляющие цвета R, G, B
3*N+4 M Координаты точечного изображения (x,y)+цвет, 3 байта точку
Слайд 35

Файлы 5 Нетипизированный файл uses graphABC; type TColor = record r,g,b

Файлы

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

uses graphABC;
type
TColor = record
r,g,b : byte;
end;
TPoint = record

x,y,c : byte;
end;
var
f: file;
offset: longword;
Color : array of TColor;
point : array of TPoint;
i,j : longword;
Слайд 36

Файлы 5 Нетипизированный файл begin assign(f,'pointpict.dat'); reset(f); //открываем для чтения read(f,offset);

Файлы

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

begin
assign(f,'pointpict.dat');
reset(f); //открываем для чтения
read(f,offset); // откуда начинается изображение
SetLength(Color,(offset-4) mod

3+1); // кол-во цветов
for i := 0 to Length(Color)-1 do //заполним палитру
read(f,Color[i]);
i := 0;
while not eof(f) do //читаем точки
begin
SetLength(point,i+1);
read(f,point[i]);
i := i + 1;
end;
close(f);
Слайд 37

Файлы 5 Нетипизированный файл //рисуем изображение for i := 0 to

Файлы

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

//рисуем изображение
for i := 0 to Length(point)-1 do

begin
j := point[i].c;
SetPixel(point[i].x,point[i].y,RGB(color[j].r,color[j].g,color[j].b));
end;
SetWindowSize(30,30);
SaveWindow('wnd.bmp');
end.
Слайд 38

Файлы Типы файлов Доступ к файлу Текстовые файлы Типизированный файлы Нетипизированные файлы Умная Йохансон

Файлы

Типы файлов
Доступ к файлу
Текстовые файлы
Типизированный файлы
Нетипизированные файлы
Умная Йохансон

Слайд 39

Файлы 6 Умная Йохансон - Это не JPEG. Это текстовый файл в кодировке ASCII. Выдумка сценаристов?

Файлы

6 Умная Йохансон

- Это не JPEG. Это текстовый файл в кодировке

ASCII.

Выдумка сценаристов?

Слайд 40

Файлы 6 Умная Йохансон JPEG файл 1 JPEG файл 2 JPEG

Файлы

6 Умная Йохансон

JPEG файл 1

JPEG файл 2

JPEG файл 3

Что общего у

этих файлов?

- маркеры

Слайд 41

Файлы 6 Умная Йохансон Маркеры JPEG файла

Файлы

6 Умная Йохансон

Маркеры JPEG файла

Слайд 42

Файлы 6 Умная Йохансон Вывод: по двоичному представлению можно определить это

Файлы

6 Умная Йохансон

Вывод: по двоичному представлению можно определить это JPEG или

нет.

А является ли он текстовым в кодировке ASCII?

Особенности текстового файла:
наличие пробелов (dec 32, hex 20)
CR+ LF (перевод каретки dec 13, hex 0D; перевод строки dec 10, hex 0A)
A-Z (hex 41 – 5A), a-z (hex 61 – 7A), 0 – 9 (hex 30 – 39)