Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 сентября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



Как работать с нетипизированным файлом (BlockRead и текстовый файл)?

Следующий код демонстрирует использование нетипизированного входного файла для блочного чтения (blockread) текстового файла, сканирование входного буфера в поисках любого символа и их замены на символы перевода строки и возврата каретки. Поскольку код использует входные и выходные буфера размером 16к, то получаемая скорость весьма приемлема.

Примечание: В процессе обработки, если длина строки выходного файла превышает 255 символов и вы хотите прочесть ее с помощью ReadLn, то просто используйте в запросе ReadLn несколько строк, например так:

ReadLn(infile,string1,string2);

Так можно прочесть вплоть до 510 символьных строк с 1-й по 255 символ в string1 и остальное в string2;

program fixfile;{ Компилируем из DOS-приглашения: DCC FIXFILE.PAS }
uses { запускаем из File Manager }
sysutils,dialogs,forms;

type
bufptr = obufr;
iobufr = array[0..16384] of char;

var
infile : file;
oufile : textfile;
inbufr,
oubufr : bufptr;

idx: integer;
bytesread: integer;
bytes2read: integer;

totalbytesread: longint;
actualfilesize: longint;

OpenDialog1: TOpenDialog;

infilename,
oufilename: string;


begin
infilename := '';
OpenDialog1 := TOpenDialog.Create(Application);

OpenDialog1.Options := [];
OpenDialog1.Filter := 'Все файлы|*.*';
OpenDialog1.FilterIndex := 1;
OpenDialog1.Title := 'Укажите исходный файл для преобразования';
if OpenDialog1.execute then
infilename := OpenDialog1.filename;

if infilename='' then
begin
OpenDialog1.free;
halt;
end;

OpenDialog1.Title := 'Укажите имя создаваемого целевого файла';
if OpenDialog1.execute then
oufilename := OpenDialog1.filename;

OpenDialog1.free;

if oufilename='' then
halt;

if infilename=oufilename then
halt;

new(inbufr);
new(oubufr);

assignfile(infile,infilename);
reset(infile,1);
actualfilesize := filesize(infile);

assignfile(oufile,oufilename);
system.settextbuf(oufile,oubufr^);
rewrite(oufile);

totalbytesread := 0;
bytesread := 0;
bytes2read := 0;

while (totalbytesread<actualfilesize)
and (bytes2read=bytesread) and (IOresult=0) do
begin
if (actualfilesize-totalbytesread)>sizeof(inbufr^) then
bytes2read := sizeof(inbufr^)
else
bytes2read := actualfilesize-totalbytesread;

blockread(infile,inbufr^,bytes2read,bytesread);

totalbytesread := totalbytesread + bytesread;
for idx := 0 to bytesread do
if inbufr^ [idx]='''' then { <= преобразуемый символ }
writeln(oufile)
else
write(oufile,inbufr^ [idx]);
end;

closefile(infile);
closefile(oufile);

dispose(inbufr);
dispose(oubufr);

end.



<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS