Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - string zwischen "{" und "}" ersetzen


Raphael O. - Di 02.12.03 22:03
Titel: string zwischen "{" und "}" ersetzen
habe da mal eine Frage (steh grad ziemlich aufm schlacuh und denke und hoffe, dass das eigentlich nicht so schwer sein dürfte :D
ich habe ne datei, die in etwa so aufgebaut ist:
Zitat:
{83547}{83573}
{83574}{83621}

wie kann ich da jetzt die Werte zwischen den geschweiften Klammern um einen bestimmten Wert erhöhen?
habe da mit "pos" das Problem das das ja immer nur den ersten Eintrag findet :-/
thx =)


Anonymous - Di 02.12.03 22:18

Hier hab ich mal eben was gebastelt:


Delphi-Quelltext
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:
procedure IncInBrackets(txt: pchar);
var
 cpy: pchar;
begin
 while txt^ > #0 do
 begin
  case txt^ of
   '{'while (txt^ in ['{''0'..'9''}']) do
        begin
         if txt^ = '}' then
         begin
          cpy := txt;
          dec(cpy);
          inc(cpy^);
          while (cpy^ = chr(ord('9') + 1)) do
          begin
           cpy^ := '0';
           dec(cpy);
           if cpy^ <> '{' then
            inc(cpy^);
          end;
         end;
         inc(txt);
        end;
  end;
  inc(txt);
 end;
end;


nach 99999 kommt 00000

aufruf Beispielsweise so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
 p: pchar;
begin
 p := pchar(memo1.text);
 IncInBrackets(p);
 memo1.text := p;
end;


olliterski - Mi 03.12.03 03:38
Titel: Re: string zwischen "{" und "}" ersetzen
Fiji-Fighter hat folgendes geschrieben:
...
habe da mit "pos" das Problem das das ja immer nur den ersten Eintrag findet :-/
thx =)


haste schon mal darüber nachgedacht den Wert den PosEx zurückgibt als neuen Startwert einzufügen???

Beispiel:

Quelltext
1:
2:
3:
4:
5:
6:
7:
i:=1;

while i <> 0 do
  begin
      i:=PosEx('{',s,i)+1;
      // tue was auch immer - ersetzen, löschen etc.
  end;


...nur mal so als kurzen Tip (hab ich jetzt mal einfach so geschrieben!!!). PosEx() ist einfach Pos() erweitert um den letzen Wert, der besagt wo PosEx() das nächste mal mit dem suchen beginnen soll!

Vielleicht hilft es!

Viele Grüße

Oliver


Raphael O. - Mi 03.12.03 18:46

thx hatte es jetzt auch so schon hinbekommen, aber das dürfte den Code nochmal vereinfachen ;)