![]() |
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:
Wie ihr schon sehen könnt ist das Trennzeichen ein ";".
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={}}
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:
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")
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={}} Weiss jemand einen Lösungsvorschlag wie ich das machen könnte? |
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.
|
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 ;-) |
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; |
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 14:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz