Avatar billede azs Nybegynder
20. oktober 2004 - 20:32 Der er 6 kommentarer og
1 løsning

Replace hex i fil

Ja. hvordan kan jeg loade en fil ind og så replace en hex verdi men en anden ?
Avatar billede hrc Mester
21. oktober 2004 - 13:29 #1
Det er da ret let:

1. Læs filen ind i en TFileStream
2. Opret ny fil vha endnu et TFileStream
3. Kopiér data fra stream 1 til 2 og der hvor du skal erstatte en værdi, skriver du den i stream 2. Fortsæt med at kopiere data fra stream 1 til 2
4. Luk stream 1 og 2
5. Slet filen tilhørende stream 1 og omdøb stream 2 til stream 1-filens navn.

Du kan også lave tricket med BlockRead / BlockWrite men streaming er lettest.

Hvordan finder du værdien du skal erstatte? Er det en fast position i filen eller er det noget du skal lede efter?
Avatar billede hrc Mester
21. oktober 2004 - 13:33 #2
Alternativt, hvis de data du skal erstatte er af samme størrelse som dem der findes:

var
  fp : file; // måske "of byte" (kan ikke huske det)
  Position : integer;
begin
  Position := 512; // Gå til position 512

  assignfile(fp,'FilNavn.dat');
  reset(fp,1);
  seek(fp,Position);
  write(fp,$ff);
  closefile(fp);
end;
(ikke testet)
Avatar billede azs Nybegynder
21. oktober 2004 - 19:33 #3
Der kommer fejl med dit eksemple ved "write(fp,$ff);"

[Error] Unit1.pas(90): Incompatible types: 'procedure, untyped pointer or untyped parameter' and 'Integer'

Nogen ide hvordan det fixes ? =)
Avatar billede azs Nybegynder
21. oktober 2004 - 20:03 #4
lavet det om til blockread og så virker det ;)
Avatar billede hreiff Nybegynder
22. oktober 2004 - 08:29 #5
Position skal være longint.
fp skal være file of byte.
Det burde være væsentligt hurtigere end at kopiere hele filen (blockread osv.)
Avatar billede hrc Mester
24. oktober 2004 - 21:17 #6
hreiff: Det er det givetvis, men hvis det data han skulle erstatte, ikke har samme størrelse, så er der vist ikke anden måde, vel?
Avatar billede hreiff Nybegynder
25. oktober 2004 - 07:38 #7
hrc: Naturligvis.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester