Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции ТП.docx
Скачиваний:
9
Добавлен:
19.04.2015
Размер:
47.01 Кб
Скачать

Бинарные файлы

Компонента занимает от 1 до 64 кбайт.

Процедуры и функции:

  1. Procedurereset(varf:file[;n:word]);{Открывает бинарный файл для чтения поnбайт}

  2. Rewrite (var f:file [;N:word]);

  3. Filesize(var f):longint {Разме файла в компанентах} {по умолчанию считается порция 128 байт}

  4. Blockread (var f:file; var buf; cont:word; [var rez:word]) {Эта процедура считывает из файла F в буфер buf кол-во КОМПОНЕНТ count . параметр rez позволяет контролировать сколько компонент ьыло прочитано}

  5. Blockwrite (var f:file; var buf; count:word; [var rez:word]);

Buf>=N*count(N- Размер компоненты)

Var i:integer; qaz:record;

G:integer;

M:string;

End;

F:file’

begin;

assignfile(f,’a.txt’);

rewrite(f);

for i:=1 to 10 do begin

readln(qaz.g);

readln(qaz.m);

blockwrite(f,qaz,1);

End;

Closefile(f);

End.

Program copyfile;

Var formF, ToF:file;

numRead,numwritten:word;

buf:array[1..512] of byte;

srt1,str2:string;

begin

assignfile(fromF,str1);

{sI-}

Reset(formf,1);

{$I+}

If ioresult<>0 then begin

Writeln(‘Файл-источник не найден’);

Halt;

End;

Assignfile(tof,str2);

Rewrite(tof,1);

Writeln(‘Копиуем’,filesize(formf),’байт ‘ );

Repeat

Blockread(fromF,buf,size(buf),numread);

Blockwrite(tof,buf,numread,numwriteln);

Unti (numread=0) or(numwriteln<>numread);

Closefile(fromF);

Closefile(tof);

End.

Для чего нужны бинарные файлы:

  1. Работа с файлами для которой не важна природа данных хранящихся в файлах

  2. Запись в файл только необходимой информации. Только те данные что информативны для нас. Эффективное храненнние данных

Var f:file; n:integer;

t:Boolean;

nomer:byte;

rec:record

group:integer;

memo:string:

end;

begin

nomer:=1;

assignfile(f,’b.txt’);

reset(f);

while not eof(f) do begin

t:=(nomer mod 2)=0

blockread(f,rec,1);

if t then begin

writeln(rec.group);

writeln(rec.memo);

end;

inc(nomer);

end;

closefile(f);

end.

Type TRec= record

Group:integer;

Name:string[30];

End;

Var f,f1:file;

Procedure writenew;

Var a:trec;

Len:byte;

Begin

Write (‘Номер’); readln(a.group);

Write(‘Имя’); readln(a.name);

Len:=length(a.name);

Reset(f,1);

Seek(f,filesize(f));

Blockwrite(f,a.group,4);

Blockwrite(f,len,1);

Blockwrite(f,a.name,len);

Close(f);

Var

Group:integer;

Meno:string;

I:byte;

F,f2:file;

Bb:Boolean;

Procedure writeff;

Begin

Reset(f,1);

Seek(f,filesize(f));

Readln(group); readln(memo);

Blockwrite (f,group,2);

Blockwrite(f,memo[o],1);

For i:=1 to length(memo) do

Blockwrite(f,memo[i],1);

End;

Procedure readff;

Begin

Reset(f,1);

Reset(f2,1);

Repeat

Blockread(f,group,2);

Blockread(f,memo[0],1);

Blockread(f,memo,ord(memo[0]));

Bb:=false;

For i:=1 to length(memo) do

If memo[i] in [‘0’..’9’]); then bb:=true;

If not bb then blockwrite(f2,memo,length(memo)+1);

Until eof(f);

End;

Работа с динамической памятью

Оперативная память компьютера представляет собой совокупность элементарных ячеек для хранения информации – байтов, каждый из которых имеет номер. Эти номера – адреса позволяют, обращается к любому байту.

Гибкое средство управление динамической памятью – указатель.

Указатель – Это переменная, которая в качестве своего значения содержит адрес байта памяти. Адрес задается двумя шестнадцатиразрядными словами (в двоичной СС).

Адрес = Сегмент : Смещение

Сегмент – это участок памяти, имеющий длину 64кб и начинающийся с адреса, кратного 16.

Смещение указывает, сколько байт от начала сегмента нужно пропустить, что бы обратится к нужному байту.

СА = сегмент*16+Сегмент (Стандартный адрес)

Сегмент = СА div16

Смещение = СAmod16

Виды памяти:

  1. Куча(heap)

  2. Стек

  3. Сегмент данных

  4. Рабочий код модуля

  5. Служебная информация

Options/compile/memorysize

{$M…}

{$M, стек, тип Heap, max Heap}

По умолчанию: {$M. 16384.0.655360}

Стек: 0..65520

MinHeap: 0..655360

Max heap^ 0..655360