Avatar billede ossi Nybegynder
24. maj 2003 - 12:50 Der er 3 kommentarer og
1 løsning

Erstat tegn efter tegn

Sikkert et lidt newb spørgsmål... Men..

Hvis jeg har en tekstfil som indeholder følgende:

F0=a
F1=b
F2=c

og jeg har en String som indeholder F0F1F2

Hvordan kan jeg så få den til at erstatte min String, med de informationer den kan læse fra filen?
Avatar billede dkn Nybegynder
24. maj 2003 - 13:56 #1
ok det her kommer lige fra hovedet og er ikke testet.

var
st:Tstringlist;
i :integer;
var1, var2:string;
const
soegstring = 'F0F1F2';
begin
st := tstringlist.create;
st.loadfromfile('dinfil.txt'); //fil med variabler
for i := 0 to st.count-1 do
begin
  var1 := copy(st.strings[I], 0, pos('=', st.strings[I])-1);
  var2 := copy(st.strings[I], pos('=', st.strings[I])+1, length(st.strings[I]));
  soegstring := stringreplace(soegstring, var1, var2, [RfReplaceAll]);
end;
showmessage(soegstring);
end;

Ok somsagt ikke testet, og den kunne nok også gøres hurtigere.
Avatar billede dkn Nybegynder
24. maj 2003 - 14:01 #2
sorry lavede self lige 1 fejl:

procedure TForm1.Button1Click(Sender: TObject);
var
  st: Tstringlist;
  i: integer;
  var1, var2, resultat: string;
begin
  resultat := 'F0F1F2';

  st := tstringlist.create;
  st.loadfromfile('test.txt'); //fil med variabler
  for i := 0 to st.count - 1 do
  begin
    var1 := copy(st.strings[I], 0, pos('=', st.strings[I]) - 1);
    var2 := copy(st.strings[I], pos('=', st.strings[I]) + 1, length(st.strings[I]));
    resultat := stringreplace(resultat, var1, var2, [RfReplaceAll]);
  end;
  showmessage(resultat);
end;
Avatar billede ossi Nybegynder
24. maj 2003 - 14:21 #3
Dette kommer ikke til at virke i praksis hen ad vejen... For hvis jeg har en meget lang hex kode, så vil den lige pludselig erstatte den kode, som allerede er konverteret, da der så dannes ny hex kode... så den skal vendes om til, at den tager et tegn af gangen, og så erstatter det...
Avatar billede nop Nybegynder
27. maj 2003 - 11:49 #4
function getDig(c: char): integer;
begin
  if c<'a' then result:=ord(c)-ord('0')
  else c:=ord(c)-ord('a')+10;
end; //get dig


ix:=1;
while ix <= length(s) do begin
  c:=s[ix];
  if c='F' then begin
    n:=0; inc(ix);
igen:   
      n:=n*16+getDig(s[ix]);
      inc(ix);
      if ix<=length(s) then
        if s[ix] in ['0'..'9','a'..'f'] then goto igen;
    res:=res+'int('+intToStr(n)+')';
  end else begin
    res:=res+c;
    inc(ix);
  end;
end;

Det er måske ikke hvad du præcis ønskede men iden er at skanne strengen seqventielt forfra.
--nop
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