Слайд 1Файлы
Типы файлов
Доступ к файлу
Текстовые файлы
Типизированный файлы
Нетипизированные файлы
Умная Йохансон
Варианты чтения файла
                            							
							
							
						 
											
                            Слайд 2Файлы
1 Типы файлов
Файл - любая именованная область внешней памяти
Характерные особенности:
                                                            
                                    имя;
 содержит компоненты одного типа;
 длина файла не оговаривается при
                                    создании.
Связано ли расширение файла с его содержимым?
-  НЕТ
Расширение файла позволяет операционной системе определить необходимое для его запуска приложение. Без расширения ОС не сможет узнать, что и как именно ему нужно открыть.
                                
 
                            							
														
						 
											
                            Слайд 3Файлы
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 Доступ к файлу
Файловая переменная связывается с именем файла:
ASSIGN (,
                                                            
                                    );
здесь  – файловая переменная (правильный идентификатор объявленный в
                                    программе как переменная файлового типа);
<имя файла> – текстовое выражение, содержащее имя файла.
const
 name=’e:\work\try.txt’;
var
 f: Text;
begin
assign(f,name);
...
                                
 
                            							
														
						 
											
                            Слайд 6Файлы
2 Доступ к файлу
После связывания файловой переменной с файлом процедура
                                                            
                                    работы с файлом состоит из следующих этапов:
 инициация файла –
                                    указание направление передачи данных;
 чтение и/или запись информации; (может повторяться сколько угодно раз)
 закрытие файла.
Чтение файла:
	RESET(<ф.п.>);
Перезапись файла:
	 REWRITE(<ф.п.>);
Добавление в файл:
	 APPEND(<ф.п.>);
Закрытие файла:
	 CLOSE (<ф.п.>);
                                
 
                            							
														
						 
											
                            Слайд 7Файлы
2 Доступ к файлу
Специальные логические функции:
	EOF(): boolean – возвращает TRUE
                                                            
                                    , если файловый указатель 		стоит в конце файла.
	EOLN(): boolean –
                                    возвращает TRUE , если файловый указатель 		стоит в конце строки
Чтение из текстового файла:
	READ (<ф.п.>, <сп. ввода> )
	READLN (<ф.п.>, <сп. ввода> )
Запись в текстовый файл:
	WRITE (<ф.п.>, <сп. вывода> )
	WRITELN (<ф.п.>, <сп. вывода> )
                                
 
                            							
														
						 
											
                            Слайд 8Файлы
Типы файлов
Доступ к файлу
Текстовые файлы
Типизированный файлы
Нетипизированные файлы
Умная Йохансон
Варианты чтения файла
                            							
														
						 
											
                            Слайд 9Файлы
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;
 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
Содержимое файла prog.dat
                                                            
                                    
в виде бинарного файла
Почему файл занимает 82 байта?
В файле 82
                                    символа по 1 байту на каждый символ
                                
                            							
														
						 
											
                            Слайд 12Файлы
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');
rewrite(f);
repeat
 readln(s);
 if length(s)>0
                                                            
                                    
then writeln(f,s);
until length(s)=0;
close(f);
end.
Запись текста в текстовый файл
                                                                    
                            							
														
						 
											
                            Слайд 14Файлы
Типы файлов
Доступ к файлу
Текстовые файлы
Типизированный файлы
Нетипизированные файлы
Умная Йохансон
Варианты чтения файла
                            							
														
						 
											
                            Слайд 15Файлы
4 Типизированный файл
Работа с типизированными файлами несколько отличается от работы
                                                            
                                    
с текстовыми файлами, а именно:
 уже существующий файл может быть
                                    инициирован для чтения и записи процедурой RESET.
 для чтения и записи используются соответственно процедуры READ и WRITE.
для работы с типизированными файлами могут использоваться процедуры и функции SEEK, FILESIZE, FILEPOS
                                
                            							
														
						 
											
                            Слайд 16Файлы
4 Типизированный файл
Процедура SEEK. Смещает указатель файла к требуемому компоненту.
                                                            
                                    
Формат обращения:
	SEEK(, )
Здесь  – выражение типа LONGINT,
                                    указывающее новый номер компонента файла.
Функция FILESIZE. Возвращает значение типа LONGINT, которое содержит количество компонентов файла. Формат обращения:
	FILESIZE(<ф.п.>)
Функция FILEPOS. Возвращает значение типа LONGINT, содержащее порядковый номер компонента файла, который будет обрабатываться следующей операцией ввода-вывода. Формат обращения:
	FILEPOS(<ф.п.>)
                                
                            							
														
						 
											
                            Слайд 17Файлы
4 Текстовый файл
Заполнение типизированного файла
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
 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Файлы
Типы файлов
Доступ к файлу
Текстовые файлы
Типизированный файлы
Нетипизированные файлы
Умная Йохансон
Варианты чтения файла
                            							
														
						 
											
											
                            Слайд 21Файлы
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 байт со знаком:
//опер. в доп. коде
127 +
                                                            
                                    
1 = ?
127 :	0111 1111
1:	0000 0001
+:	1000 0000
обр:	1111 1111
прям:	1000 0000
ответ: 	
                                    -128
                                
                            							
														
						 
											
                            Слайд 23Файлы
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
                                                            
                                    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
 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
32
String
абвг123 (кодировка CP1251)
Boolean
true
                            							
														
						 
											
                            Слайд 27Файлы
5 Нетипизированный файл
Пример: Прочитать ID3(v1-v1.1) теги из mp3 файла
                            							
														
						 
											
                            Слайд 28Файлы
5 Нетипизированный файл
Структура программы для чтения метаданных:
 открыть файл для
                                                            
                                    
чтения;
 отступить на 128 байт с конца файла;
 прочитать заголовок;
                                    если заголовок «TAG» - прочитать поля;
 закрыть файл.
                                
                            							
														
						 
											
                            Слайд 29Файлы
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 символа?
                            							
														
						 
											
                            Слайд 31Файлы
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); 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.
                                
                            							
														
						 
											
											
                            Слайд 34Файлы
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 : 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); // откуда начинается изображение
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 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.
Выдумка сценаристов?
                                                                    
                            							
														
						 
											
                            Слайд 40Файлы
6 Умная Йохансон
JPEG файл 1
JPEG файл 2
JPEG файл 3
Что общего
                                                            
                                    
у этих файлов?
- маркеры
                                                                    
                            							
														
						 
											
                            Слайд 41Файлы
6 Умная Йохансон
Маркеры JPEG файла
                            							
														
						 
											
                            Слайд 42Файлы
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)
                                
                            							
														
						 
											
											
                            Слайд 44Файлы
Типы файлов
Доступ к файлу
Текстовые файлы
Типизированный файлы
Нетипизированные файлы
Умная Йохансон
Варианты чтения файла
                            							
														
						 
											
                            Слайд 45Файлы
7 Варианты чтения из файла
Чтение файла размеров 50.4 Мб
var
 f
                                                            
                                    
: file;
 val : array [1..1] of byte;
begin
 assign(f,'file.dat');
 reset(f);
                                    while not(eof(f)) do read(f,val);
 close(f);
end.