![]() |
Beliebigkeitssymbol?
Hallo
ich will mit folgendem Code
Delphi-Quellcode:
alle Zeichen, die eingeklammert sind (zB [ Test123 ] ) aus meinem Memo mit 0 ersetzen. Ich habe dies mit einem "Beliebigkeitszeichen" versucht, aber leider klappt das nicht.
procedure TForm1.Button1Click(Sender: TObject);
begin MemoIniShow.Lines[0] :=StringReplace(MemoIniShow.Lines[0], ('[' + * + ']') , '0', [rfReplaceAll]); end; Gibt es ein anderes "Beliebigkeitszeichen" oder muss man das Problem anders lösen? MFG |
Re: Beliebigkeitssymbol?
Mit Delphi-eigenen Mitteln ist es nicht ganz trivial, es liefe auf eine Verbindung von PosEx und Copy hinaus. Weit eleganter geht es aber sicherlich mit Regulären Ausdrücken.
|
Re: Beliebigkeitssymbol?
was meinst du mit Regilären Ausdrücken ? Feste Bezeichnungen wie Haus, Garten und Schippe ?
EEs steht aber in jeder Klammer etwas anderes. |
Re: Beliebigkeitssymbol?
|
Re: Beliebigkeitssymbol?
muss ich da wirklich wieder ne extra Komponente installieren?
|
Re: Beliebigkeitssymbol?
Ja
|
Re: Beliebigkeitssymbol?
Müsste reichen, sich ne entsprechende Unit zu suchen und die einzubinden.
|
Re: Beliebigkeitssymbol?
Ich hab jetzt mal schnell ne Funktion geschrieben:
Delphi-Quellcode:
Wurde das so gehen?
procedure TForm1.Button1Click(Sender: TObject);
begin Edit1.Text := ReplaceArea(Edit1.Text, '[', ']', '0'); end; function TForm1.ReplaceArea(CurrentS, FromS, ToS, ReplcS: string): string; var FromSPos, ToSPos: Integer; begin result := ''; FromSPos := Pos(FromS, CurrentS); ToSPos := Pos(ToS, CurrentS); while (FromSPos > 0) and (ToSPos > 0) do begin Delete(CurrentS, FromSPos, ToSPos - FromSPos + Length(ToS)); Insert(ReplcS, CurrentS, FromsPos); FromSPos := Pos(FromS, CurrentS); ToSPos := Pos(ToS, CurrentS); end; result := CurrentS; end; |
Re: Beliebigkeitssymbol?
Benjamin, besorg Dir eine RegularExpression-Klasse und verwende die. Reguläre Ausdrücke sind so fundamental, Du wirst, sofern Du dich weiter mit Softwareentwicklung beschäftigst nicht darum herum kommen. Je eher Du das drauf hast, desto besser.
|
Re: Beliebigkeitssymbol?
Ok, werd ich machen, fange gleich morgen an...
Kannst Du mir irgend eine Seite empfehlen? MFG, Benjamin |
Re: Beliebigkeitssymbol?
In dem Wikipediaartikel sind mehrere gute verlinkt - und der Artikel selbst erklärt es auch recht gut.
|
Re: Beliebigkeitssymbol?
Zitat:
![]() |
Re: Beliebigkeitssymbol?
mmh hat vielleicht jemand noch ne seite, wo man diese Unit/Komponente herunterladen kann?
Auch wenn ich weiß das die Computersprache und die Tutorials dazu in Englisch sind hätt ich gern ein Deutsches wenns irgendwie machbar ist. MFG |
Re: Beliebigkeitssymbol?
![]() Beispiel...
Delphi-Quellcode:
function Replace(Input:string):string;
var RegExpr:TRegExpr; begin RegExpr:=TRegExpr.Create; try RegExpr.ModifierG:=false; RegExpr.Expression:='(\[.*\])'; Result:=RegExpr.Replace(Input, '0', false); finally RegExpr.free; end; end; |
Re: Beliebigkeitssymbol?
Zitat:
|
Re: Beliebigkeitssymbol?
Die Zeile schlatet auf "nicht gierig" um.
Dies ist wichtig, damit bei mehrfachem Vorkommen von "[ bla ]" auch alle für sich zu einer "0" werden. Aber das hättest du auch einfach ausprobieren können. |
Re: Beliebigkeitssymbol?
Okay...
Pattern: \[.*\] String: [wuppdi]blabla[narf] Mit Greedy-Modifier: 1 Match: [wuppdi]blabla[narf] Ohne Greedy-Modifier: 2 Matches: [wuppdi] und [narf] Der Greedy-Modifier sorgt dafür, dass jedes Pattern sich so viel Text wie möglich schnappt. Ohne Greedy wird versucht, so wenig Text wie möglich pro Match zu nehmen. |
Re: Beliebigkeitssymbol?
supper danke hat perfekt funktioniert :-D :cheers:
|
Re: Beliebigkeitssymbol?
Delphi-Quellcode:
es gibt leider doch noch ein Problem.
function Replace(Input:string):string;
var RegExpr:TRegExpr; begin RegExpr:=TRegExpr.Create; try RegExpr.ModifierG:=false; RegExpr.Expression:='(\[.*\])'; Result:=RegExpr.Replace(Input, '', false); finally RegExpr.free; end; end; procedure TForm1.Button1Click(Sender: TObject); begin MemoIniShow.Lines[0] := Replace(MemoIniShow.Lines[0]); end; Es werden immer 6[*] auf einmal gelöscht. Das bedeutet für mich, dass wenn in einem Text 20x[*] vorkommt, dass ich 4 mal auf den Butto1 klicken muss. Nach dem 10-15 mal drücken allerdings führt er keinen Replace mehr aus, obwohl ich auf den Button drücke und noch[*] Stellen vorhanden sind. Woran liegt das? |
Re: Beliebigkeitssymbol?
Zitat:
|
Re: Beliebigkeitssymbol?
Dir ist klar, dass dein Code so nur die erste Zeile ersetzt?
Für das von dir beschriebene Verhalten habe ich aber keine Erklärung. EDIT: Ich habe es mit genau dem gleichen Code - nur statt MemoIniShow.Lines[0] eben MemoIniShow.Text - ausprobiert, und es funktioniert perfekt. |
Re: Beliebigkeitssymbol?
jo das wars, danke
ich bin immer nur von einer Zeile in meinem Memo ausgegangen, weil eigentlich alles in die Zeile 0 per SelText geschrieben wird. Danke nochma |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:17 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