Презентация на тему: Нетипизированные файлы

Нетипизированные файлы
Причина введения нетипизированных файлов
Представление нетипизированных файлов
Нетипизированный файл - файл прямого доступа
Новые процедуры, поддерживающие операции ввода-вывода с более высокой скоростью
Пример 1. Программа позволяет разбить исходный файл на части заданного объема и каждую записать отдельным набором данных на диск
Нетипизированные файлы
Нетипизированные файлы
Пример 2. Программа составляет один главный файл из различных частей
Нетипизированные файлы
Нетипизированные файлы
Нетипизированные файлы
1/12
Средняя оценка: 4.5/5 (всего оценок: 22)
Код скопирован в буфер обмена
Скачать (60 Кб)
1

Первый слайд презентации: Нетипизированные файлы

Изображение слайда
2

Слайд 2: Причина введения нетипизированных файлов

2 Причина введения нетипизированных файлов Стремление повысить эффективность программ, участвующих в интенсивном обмене с внешними наборами данных. Эти файлы не имеют строго определенного типа Поддержка нетипизированных файлов осуществляется с максимально возможной скоростью

Изображение слайда
3

Слайд 3: Представление нетипизированных файлов

3 Представление нетипизированных файлов Нетипизированный файл рассматривается как совокупность символов или байтов. Представление char или byte роли не играет, а важно лишь с точки зрения объема занимаемых данных. Такое представление стирает все различия между файлами независимо от типа их объявления. На практике это приводит к тому, что любой файл, подготовленный как текстовый или типизированный, можно открыть и начать работу с ним, как с нетипизированным набором данных. Внутренняя поддержка таких файлов выглядит наиболее близкой к аппаратной поддержке с внешними носителями. За счет этого достигается максимально возможная скорость доступа к наборам данных. Для нетипизированных файлов не надо терять время на преобразование типов и поиск управляющих последовательностей, достаточно считать содержимое файла в определенную область памяти.

Изображение слайда
4

Слайд 4: Нетипизированный файл - файл прямого доступа

4 Нетипизированный файл - файл прямого доступа Прямой доступ обеспечивает возможность одновременного использования операций чтения-записи. Для таких файлов самым важным параметром служит длина записи в байтах. Открытие нетипизированного файла с длиной записи в 1 байт можно описатьтак: Rewrite (UntypedFile, 1) или Reset (UntypedFile, 1). Второй параметр, связанный ТОЛЬКО с нетипизированными файлами, задает длину записи файла на сеанс работы.

Изображение слайда
5

Слайд 5: Новые процедуры, поддерживающие операции ввода-вывода с более высокой скоростью

5 Новые процедуры, поддерживающие операции ввода-вывода с более высокой скоростью BlockRead(var f: file; var Buf; count: word {; result: word}); считывает из файла f определенное число блоков в память, начиная с первого байта переменной Buf. Этот параметр представляет собой любую переменную., используемую для накопления информации из файла f. Параметр count задает число считываемых блоков. Result является необязательным и содержит после вызова процедуры число действительно считанных записей. Использование этого параметра показывает, что число действительно считанных блоков может быть меньше, чем задано count. Если Result указан при вызове, то ошибки ввода-вывода в такой ситуации не произойдет. Для отслеживания этой и другой ошибок можно использовать {$I-}, {$I+}, IOresult. BlockWrite (var f: file; var Buf; count: word {; result: word}); предназначена для быстрой передачи в f определенного числа записей из переменной Buf. Все параметры процедуры BlockWrite аналогичны параметрам BlockRead. Обе процедуры выполняют операции ввода-вывода блоками. Объем блока в байтах определяется по формуле: объем = count*RecSize, где RecSize - размер записи файла, заданный при его открытии. Суммарный объем разового обмена имеет ограничения. Помимо скорости передачи данных преимущество этих процедур заключается в возможности пользователя самостоятельно определять размер буфера для файловых операций. Эта возможность играет значительную роль в тех задачах, где необходимо жесткое планирование ресурсов.

Изображение слайда
6

Слайд 6: Пример 1. Программа позволяет разбить исходный файл на части заданного объема и каждую записать отдельным набором данных на диск

6 Пример 1. Программа позволяет разбить исходный файл на части заданного объема и каждую записать отдельным набором данных на диск program DivFile; const SizeBuffer=25600;{ размер буфера для ввода - вывода } type TBufFile = array[1..SizeBuffer] of byte; var Buffer: TBufFile; W1, W2, W3: word; KolZap, Siz: LongInt; NameFile, NamePart: string[60]; { имя главного файла и выходного } FileMain, FilePart: file; flag1, flag2: boolean; function Answer: boolean; var ch: char; begin write( 'Продолжать работу(Д/Н )?'); repeat readln(ch); case ch of ' Д ',' д ': Answer:=true; ' Н ',' н ': Answer:=false; end;{case} until ch in [' Д ',' д ',' Н ',' н ']; end;{Answer}

Изображение слайда
7

Слайд 7

7 flag1:=true; while flag1 do begin write( 'введите имя файла для разбиения :'); readln(NameFile); assignfile(FileMain, NameFile); reset(FileMain,1); { открыть главный файл, длина записи 1} kolZap:=FileSize(FileMain);{ размер файла в байтах } while KolZap>0 do begin writeln( 'размер файла ',NameFile,'=',KolZap); write(' деление файла, '); flag2:=Answer; writeln; write( 'введите имя выходного файла:'); readln(NamePart); assignfile(FilePart, NamePart); rewrite(FilePart, 1); if flag2 then begin write( 'введите размер выходного файла:'); readln(Siz); if Siz>kolZap then Siz:=KolZap; end;

Изображение слайда
8

Слайд 8

8 { вводится коррекция на размер буфера ввода-вывода } W1:=Siz div SizeBuffer; {количество полных буферов} W2:=Siz mod SizeBuffer; write(' копирование '); for W3:=1 to W1 do begin BlockRead(FileMain, Buffer, SizeBuffer); BlockWrite(FilePart, Buffer, SizeBuffer); write(' + '); end; if W2<>0 then begin BlockRead(FileMain, Buffer, W2); BlockWrite(FilePart, Buffer, W2); write('+'); end; closefile(FilePart); KolZap:=KolZap-Siz; { расчет остатка главного файла } end;{while} closefile(FileMain); write( 'деление нового исходного файла, '); flag1:=Answer; end;{while flag1} end.

Изображение слайда
9

Слайд 9: Пример 2. Программа составляет один главный файл из различных частей

9 Пример 2. Программа составляет один главный файл из различных частей program ConnFile; {$APPTYPE CONSOLE} uses SysUtils, Windows; const SizeBuffer=25600;{ размер буфера для ввода-вывода } type TBufFile = array[1..SizeBuffer] of byte; var Buffer: TBufFile; W1, W2, W3: word; KolZap, Siz: LongInt; NameFile, NamePart: string[60]; { имя главного файла и выходного } FileMain, FilePart: file; flag1, flag2: boolean;

Изображение слайда
10

Слайд 10

10 function Answer: boolean; var ch: char; begin write('Продолжать работу(Д/Н)?'); repeat readln(ch); case ch of 'Д','д': Answer:=true; 'Н','н': Answer:=false; end;{case} until ch in ['Д','д','Н','н']; end;{Answer}

Изображение слайда
11

Слайд 11

11 begin {main} flag1:=true; while flag1 do begin write( 'введите имя файла для формирования :'); readln(NameFile); assignfile(FileMain, NameFile); rewrite(FileMain, 1); { открыть главный файл, длина записи 1 } Siz:=0; flag2:=true; while flag2 do begin writeln(' размер файла ',NameFile,'=',siz); write( 'присоединение к главному файлу, '); if Answer then begin writeln; write( 'введите имя присоединяемого файла :');readln(NamePart); assignfile(FilePart, NamePart); reset(FilePart, 1); KolZap:=Filesize(FilePart); W1:=Siz div SizeBuffer; { количество полных буферов } W2:=Siz mod SizeBuffer;

Изображение слайда
12

Последний слайд презентации: Нетипизированные файлы

12 write(' копирование '); for W3:=1 to W1 do begin BlockRead(FilePart, Buffer, SizeBuffer); BlockWrite(Filemain, Buffer, SizeBuffer); write(' + '); end; if W2<>0 then begin BlockRead(FilePart, Buffer, W2); BlockWrite(FileMain, Buffer, W2); write('+'); end; closefile(FilePart); inc(siz,KolZap); { увеличить текущий размер } end else begin writeln; flag2:=false; end; end;{while flag2} closefile(FileMain); write( 'создание нового исходного файла, '); flag1:=Answer; end;{while flag1} writeln ('ВСЕ!'); readln; end.

Изображение слайда