1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
function ReadFile(const Filename : string; Strs : TStrings): Boolean;
var Buffer : THexaLine; { le buffer }
Count : cardinal; { compteur offset de ligne | taille du buffer }
TSL : TStringList; { tstringlist temporaire pour ne pas ecrire directement dans Strs }
TFS : TFileStream; { }
S : String; { String contenant le fichier}
N, A : Integer; { Variable d'index }
R : TStringPos; { Resultat de position des string }
begin
ReadFile := False;
TSL := nil; { on nilliize pour eviter les erreur de liberation }
TFS := nil; { }
try
{ on crée la stringlist et on place les offsets de colones }
TSL := TStringList.Create;
{ on init count a 0 }
count := 0;
{ si le fichier existe }
if FileExists(FileName) then begin
{ on crée le stream et on ouvre le fichier en mode lecture seule }
TFS := TFileStream.Create(FileName, fmOpenRead);
{ on se place au debut (inutile mais plus sur) }
TFS.Seek(0, soFromBeginning);
SetLength(S, TFS.Size);
TFS.Read(S[1], TFS.Size);
{ boucle de parsing du binaire }
N := 0;
while N < Length(S) do begin
R := PosFirstOf(S, ValueList,N);
N := R.Pos;
//and not $F;
if R.Index = -1 then break;
A := R.Pos + Length(ValueList[R.Index])-1 ;
while N <= A do Begin
{ on rempli le buffer }
Count := $10;
Move(S[N], Buffer[0], Count);
{ on place le buffer dans une chaine qu'on ajoute dans la liste
valeur hexa (hex) | }
TSL.Add( format('%s ',[ HexaLineToStr(Buffer,Count),HexaLineToChr(Buffer,Count)] ) );
// HexaLineToStr(Buffer,Count),
N := N+ Count;
End;
End;
{ on assigne les chaines de TSL a STRS }
Strs.Assign(TSL);
ReadFile := True;
end;
finally
{ on libere la liste temporaire et le stream }
TFS.Free;
TSL.Free;
end;
end; |
Partager