Примечание: В процессе обработки, если длина строки выходного файла превышает 255 символов и вы хотите прочесть ее с помощью ReadLn, то просто используйте в запросе ReadLn несколько строк, например так:
ReadLn(infile,string1,string2); |
Так можно прочесть вплоть до 510 символьных строк с 1-й по 255 символ в string1 и остальное в string2;
program fixfile;{ Компилируем из DOS-приглашения: DCC FIXFILE.PAS }uses { запускаем из File Manager }sysutils,dialogs,forms; typebufptr = obufr;iobufr = array[0..16384] of char; varinfile : 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 theninfilename := OpenDialog1.filename; if infilename='' thenbeginOpenDialog1.free;halt;end; OpenDialog1.Title := 'Укажите имя создаваемого целевого файла';if OpenDialog1.execute thenoufilename := OpenDialog1.filename; OpenDialog1.free; if oufilename='' thenhalt; if infilename=oufilename thenhalt; 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) dobeginif (actualfilesize-totalbytesread)>sizeof(inbufr^) thenbytes2read := sizeof(inbufr^)elsebytes2read := actualfilesize-totalbytesread; blockread(infile,inbufr^,bytes2read,bytesread); totalbytesread := totalbytesread + bytesread;for idx := 0 to bytesread doif inbufr^ [idx]='''' then { <= преобразуемый символ }writeln(oufile)elsewrite(oufile,inbufr^ [idx]);end; closefile(infile);closefile(oufile); dispose(inbufr);dispose(oubufr); end. |
- Dennis Passmore [000755]