var
f_in: file of byte;
f_out: file;
symb, bbyte: byte;
i: integer;
addr, a_ch, f_pos: longint;
buf: array [0..$0F] of byte;
label
Next, Exit_all;
begin
assign(f_in,'in.bin');
assign(f_out,'out.bin');
reset(f_in);
if IOResult<>0
then goto Exit_all;
rewrite(f_out,16);
if IOResult<>0
then goto Exit_all;
addr:=0;
Next:
a_ch:=$FFFFFFFF;
f_pos:=filepos(f_in);
for i:=0 to 7 do
begin
read(f_in,symb);
if IOResult<>0
then goto Exit_all;
if ((symb>$2F) and (symb<$3A))
then symb:=symb-$30
else if ((symb>$40) and (symb<$47))
then symb:=symb-$37
else goto Next;
a_ch:=(a_ch shl 4) or symb;
end;
if a_ch<>addr
then
begin
seek(f_in,f_pos+1);
goto Next;
end;
read(f_in,symb);
read(f_in,symb);
for i:=0 to $0F do
begin
bbyte:=0;
read(f_in,symb);
if ((symb>$2F) and (symb<$3A))
then symb:=symb-$30
else if ((symb>$40) and (symb<$47))
then symb:=symb-$37
else goto Exit_all;
bbyte:=(bbyte shl 4) or symb;
read(f_in,symb);
if ((symb>$2F) and (symb<$3A))
then symb:=symb-$30
else if ((symb>$40) and (symb<$47))
then symb:=symb-$37
else goto Exit_all;
bbyte:=(bbyte shl 4) or symb;
read(f_in,symb);
buf[i]:=bbyte;
end;
blockwrite(f_out,buf,1);
addr:=addr+$10;
goto Next;
Exit_all:
close(f_in);
close(f_out);
end.
Пасквиль.
Входной файл - in.bin, выходной файл - out.bin.
А программатору, который сливает в файл такой мусор, нужно было еще во младенчестве засунуть паяльник на 100 Вт поглубже и провернуть. Задача бы решалась намного проще, если хотя бы чистые бинарные данные (которые там тоже присутствуют) не разбавлялись случайными переводами каретки (т.е. вместо 0A --> 0D 0A).
var f_in: file of byte; f_out: file; symb, bbyte: byte; i: integer; addr, a_ch, f_pos: longint; buf: array [0..$0F] of byte; label Next, Exit_all; begin assign(f_in,'in.bin'); assign(f_out,'out.bin'); reset(f_in); if IOResult<>0 then goto Exit_all; rewrite(f_out,16); if IOResult<>0 then goto Exit_all; addr:=0; Next: a_ch:=$FFFFFFFF; f_pos:=filepos(f_in); for i:=0 to 7 do begin read(f_in,symb); if IOResult<>0 then goto Exit_all; if ((symb>$2F) and (symb<$3A)) then symb:=symb-$30 else if ((symb>$40) and (symb<$47)) then symb:=symb-$37 else goto Next; a_ch:=(a_ch shl 4) or symb; end; if a_ch<>addr then begin seek(f_in,f_pos+1); goto Next; end; read(f_in,symb); read(f_in,symb); for i:=0 to $0F do begin bbyte:=0; read(f_in,symb); if ((symb>$2F) and (symb<$3A)) then symb:=symb-$30 else if ((symb>$40) and (symb<$47)) then symb:=symb-$37 else goto Exit_all; bbyte:=(bbyte shl 4) or symb; read(f_in,symb); if ((symb>$2F) and (symb<$3A)) then symb:=symb-$30 else if ((symb>$40) and (symb<$47)) then symb:=symb-$37 else goto Exit_all; bbyte:=(bbyte shl 4) or symb; read(f_in,symb); buf[i]:=bbyte; end; blockwrite(f_out,buf,1); addr:=addr+$10; goto Next; Exit_all: close(f_in); close(f_out); end.Пасквиль.
Входной файл - in.bin, выходной файл - out.bin.
А программатору, который сливает в файл такой мусор, нужно было еще во младенчестве засунуть паяльник на 100 Вт поглубже и провернуть