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

Видеокурс программиста и крэкера 5D 2O17
(актуальность: август 2O17)
Свежие инструменты, новые видеоуроки!

  • 400+ видеоуроков
  • 800 инструментов
  • 100+ свежих книг и статей

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

БОЛЬШОЙ FAQ ПО DELPHI



BlockRead и текстовый файл

Автор: Dennis Passmore

Следующий код демонстрирует использование нетипизированного входного файла для блочного чтения (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