![]() |
komma zwischen zwei ' ' finden.
Hallo,
Ich habe ein kleines problem, und denke schon ne weile drüber nach, villeicht bin ich ja auch heute aufgrund der hitze nicht ganz auf der höhe... Denn so schwer kann das doch nicht sein? Ich habe einen string in dem mehrere kommas vorkommen, wenn allerdings ein komma zwischen zwei ' ' ist, will ich es in ein Punkt oder ähnliches ändern. Mir fällt nicht ein wie ich das machen kann, ich hab schon so viel mit Pos, copy, delete undso gemacht, aber das kann doch nicht eine vernünftige lösung sein? Ich hab schon viel von regexp gehört, aber selten in verbindung mit delphi, und das sieht auch verdammt kompliziert aus. Wäre das denn eine lösung? Hoffe hier kann mir jemand weiterhelfen.. Ebil~ |
Re: komma zwischen zwei ' ' finden.
Naja.. ein Regex-Replace wäre schon drin
das Regexpattern wäre dann
Code:
Erläuterung:
('.*?),(.*?')
( - Suche beginnen ' - das Zeichen ' .*? - eine beliebige anzahl beliebiger Zeichen bis zur nächsten angegebenen Grenze ) - Suche beenden , - Das Zeichen , ( - Suche beginnen .*? - eine beliebige anzahl beliebiger Zeichen bis zur nächsten angegebenen Grenze ' - das Zeichen ' ) - Suche beenden und der Replacestring
Code:
Erläuterung:
\1.\2
\1 - Ergebnis aus erster Suche . - Das Zeichen . \2 - Ergebnis aus zweiter Suche und dann noch der Einsatz der Klasse:
Delphi-Quellcode:
Es wird also nach variablen Strings gesucht, die mit ' beginnen und enden und ein Komma in der Mitte haben. Das Komma wird dann durch einen Punkt Ersetzt.
var
regex: TRegExpr; begin regex := TRegExpr.Create; regex.Expression := '(''.*?),(.*?'')'; result := regex.Replace(input, '${1}.${2}', true); regex.Free; end; Eine Klasse TRegExpr gibt es da ![]() Ansonsten kannst du dir natürlich auch eine eigene Methode mit Pos und Co zum Auseinanderpfriemeln baun. |
Re: komma zwischen zwei ' ' finden.
Ich würde in einer Schleife den String durchlaufen und bei einem auftreten von "'" mir merken das es geöffnet wurde und beim erneuten Finden von "'" merken das es wieder geschlossen ist. Wenn dann ein "," gefunden wird muss man nur schauen ob "'" geöffnet ist und wenn dem so ist dies einfach ändern:
Delphi-Quellcode:
Regexpressions würde ich zum einen nicht nehmen weil ich da nicht richtig durchsehe, und zum anderen würde ich sie nicht verwenden weil ich denke das es zu viel overhead ist für so etwas einfaches (parsen der expression, schauen nach Mustern etc.)
var
i: Integer; inquot: Boolean; begin inquot := false; for i := 1 to length(yourstring) do begin if yourstring[i] = '''' then inquot := not(inquot); if (inquot and (yourstring[i] = ',')) then yourstring[i] := '.'; end; |
Re: komma zwischen zwei ' ' finden.
Danke an euch ich habe den vorschlag von cruiser genommen, regexpr wollt ich schon immer mal benutzen :mrgreen:
Aber ein problem habe ich noch, wie mache ich es das nur das erste vorkommen verändert wird? Weil der string ist nicht nur ' blabla,blabla' sondern eher 'blabla',5,'blabla' also wird ',5,' auch bearbeitet. Also es soll nur das erste gefundene bearbeitet werden. Ebil~ |
Re: komma zwischen zwei ' ' finden.
Zitat:
Zitat:
Zur Verarbeitung von Stringlisten gibt es die Klasse TStringList. Erforderlichen Falls erzeugt man 2 Instanzen um den Text erst in Zeilen und dann in Spalten zu zerlegen.
Delphi-Quellcode:
Quotechar := '''';
Delimiter := ','; StrictDelimiter := True; DelimitedText := 'blabla',5,'blabla','5,30','5,40','blabla',5,'blabla'; for i := 0 to Count - 1 do Strings[i] := ReplaceStr(Strings[i], ',', '.'); {Ergebnis in DelimitedText: 'blabla',5,'blabla','5.30','5.40','blabla',5,'blabla'} |
Re: komma zwischen zwei ' ' finden.
Wenn die Werte extra noch durch Kommata getrennt sind wird das ungleich schwieriger mit regular Expressions... in dem Fall ist eine Funktion, die die Arbeit macht evtl. zu bevorzugen. SirThornberrys Ansatz sollte genau das machen was du suchst.
|
Re: komma zwischen zwei ' ' finden.
Also die Fragestellung ist mir nicht ganz klar.
Wenn es folgende Möglichkeiten gibt
Code:
soll dann
...blabla','blabla....
...blabla',5,'blabla....
Code:
und
...blabla','blabla.... => ...blabla'.'blabla....
Code:
umgesetzt werden?
...blabla',5,'blabla.... => ...blabla'.5.'blabla....
oder soll nur das erste Komma (genau)hinter einem Hochkomma umgesetzt werden?
Code:
oder...
...blabla',5,'blabla',7,'blablu.... => ...blabla'.5,'blabla',7,'blablu....
Gruß K-H |
Re: komma zwischen zwei ' ' finden.
Sorry für die späte antwort, war ziemlich busy in letzter zeit.
Blup hat das problem einwandfrei für mich gelöst. Ich arbeite schon lange mit der tstringlist class aber QuoteChar kannte ich noch nicht. Danke für eure hilfe Ebil |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 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 by Thomas Breitkreuz