Getlast

El següent codi s’encarrega de extraure els últims n bytes d’un arxiu font (eventualment llarg) generant un fitxer objectiu eixida amb l’esmentat contingut. A més genera un altre arxiu anomenat 1font amb el mateix contingut que l’axiu font exceptuant els n bytes finals.

 

El codi complet és:

var
FromF, ToF, PreF: file of byte;
NumRead, NumWritten: Word;
buf: array[1..1] of Char;
i:int64;
copylen,nread,numval: int64;
begin
{obrim l'arxiu font}
if paramcount<3 then begin
writeln ('GetLast v1.0. JISO 2025 (estiu).');
writeln (' Ús: getlast fitxerfont nomfitxereixida bytesdelfitxerdeixida');
writeln (' propòsit: des d'#39' fitxer font, genera una eixida amb els ultims bytes esmentats al tercer parametre');
writeln (' a banda, es genera un altre arxiu am el fitxer complementari generat.');
halt(1);
end;
Assign(FromF, paramstr(1));
Filemode :=0;
{$i-} Reset(FromF); {$i+}
i:=ioresult; if i<>0 then begin write ('Codi d'#39':',i);halt(i);end;
{ obrim els fitxers d'eixida }
Assign(ToF, ParamStr(2)); Rewrite(ToF, 1);
Assign(PreF, '1'+paramstr(1)); Rewrite(PreF, 1);

copylen:=filesize (fromf);
val (paramstr(3),numval, i);
WriteLn('Splitting ', FileSize(FromF),' bytes in ',numval,'.');
nread:=0;
repeat
begin
BlockRead(FromF,buf, SizeOf(buf),NumRead); inc (nread);
if nread>(copylen-numval) then
BlockWrite(ToF,buf,NumRead,NumWritten) else
BlockWrite(PreF,buf,NumRead,NumWritten);
end
until (NumRead = 0) or
(NumWritten <> NumRead);

Close (PreF); Close(FromF); Close(ToF);
end.