Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   nicht alle Strichpunkte durch #13 setzen lassen (https://www.delphipraxis.net/53127-nicht-alle-strichpunkte-durch-13-setzen-lassen.html)

Helmi 10. Sep 2005 19:30


nicht alle Strichpunkte durch #13 setzen lassen
 
Hallo,

ich hock schon seit einiger Zeit vorm Rechner und grübel über ein Problem.
Nur leider will mir einfach keine gute Lösung einfallen.

Aber hier erst mal mein Problem.

Ich hab diesen String:
Delphi-Quellcode:
Name=ID_STATE_Test;Section=3;Mask=ID_MASK_Testmaske;Previous=;Calc=;Horz_Button={Button1={Bitmap=;Length=1;Text=ID_TEXT_Horz_Button1;ID=ID_MASK_Test;Kind=1;Active=1}};Vert_Button={Button1={}Button2={}Button3={}Button4={}Button5={}}
Wie ihr schon sehen könnt ist das Trennzeichen ein ";".

Dieses Trennzeichen soll durch ein "#13" ersetzt werden um in eine Stringliste geschrieben zu werden (Stringlist.text).

Die Liste soll zum schluss wie folgt aussehen:
Delphi-Quellcode:
Name=ID_STATE_Test
Section=3
Mask=ID_MASK_Testmaske
Previous=
Calc=
Horz_Button={Button1={Bitmap=;Length=1;Text=ID_TEXT_Horz_Button1;ID=ID_MASK_Test;Kind=1;Active=1}};
Vert_Button={Button1={}Button2={}Button3={}Button4={}Button5={}}
mein problem ist, dass ich nicht einfach mit StringReplace nach dem Trennzeichen suchen kann und es durch "#13" zu ersetzen, da es innerhalb von geschwungenen Klammern nicht ersetzt werden soll (z.B. bei "Horz_Button")

Weiss jemand einen Lösungsvorschlag wie ich das machen könnte?

bttb930 10. Sep 2005 19:44

Re: nicht alle Strichpunkte durch #13 setzen lassen
 
durchlauf den string zeichen für zeichen und merk dir ob du gerade innerhalb von { und } bist oder nicht. wenn du drin bist, dann ersetzt du ; nicht, sonst doch.

BenjaminH 10. Sep 2005 19:46

Re: nicht alle Strichpunkte durch #13 setzen lassen
 
Die Bereiche in denen die ; nicht ersetzt werden sollen liegen doch alle in {}
Du suchst jetzt einfach die Klammern und suchst dazu die schließenden elemente.
Dann machst du statt mit Stringreplace das mit Pos und wenn das ergebniss von pos innerhalb der Klammern liegt, macht er nichts, liegt es auserhalb ersetzt er es einfach.
Klingt in meinen Ohren logisch, versuchs einfach mal ;-)

Sharky 10. Sep 2005 19:49

Re: nicht alle Strichpunkte durch #13 setzen lassen
 
Oder einfach so ;-)
Delphi-Quellcode:
procedure TForm1.btn_ParsClick(Sender: TObject);
var
  ndx : integer;
  blubb : string;
  no_replace : boolean;
  sl : TStringList;
begin
  no_replace:= False;
  blubb := 'Name=ID_STATE_Test;Section=3;Mask=ID_MASK_Testmaske;Previous=;Calc=;Horz_Button={Button1={Bitmap=;Length=1;Text=ID_TEXT_Horz_Button1;ID=ID_MASK_Test;Kind=1;Active=1}};Vert_Button={Button1={}Button2={}Button3={}Button4={}Button5={}}';
  for ndx := 1 to Length (blubb) do
  begin
    if (blubb[ndx] = '{') then INC (no_replace);
    if (blubb[ndx] = '}') then DEC (no_replace);
    if not (no_replace) then
    begin
      if blubb[ndx] = ';' then blubb[ndx] := #13;
    end;
  end;
  sl := TStringList.Create;
  try
    sl.Text := blubb;
    memo1.Lines.Assign(sl); // Als Test in ein Memo
  finally
    sl.free;
  end;
end;

Helmi 10. Sep 2005 20:02

Re: nicht alle Strichpunkte durch #13 setzen lassen
 
:-D Vielen Dank Sharky für deine Hilfe

Genau das was ich brauche!! :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz