Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi komma zwischen zwei ' ' finden. (https://www.delphipraxis.net/137118-komma-zwischen-zwei-finden.html)

Ebil 14. Jul 2009 19:52


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~

cruiser 14. Jul 2009 21:38

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:
\1.\2
Erläuterung:
\1 - Ergebnis aus erster Suche
. - Das Zeichen .
\2 - Ergebnis aus zweiter Suche

und dann noch der Einsatz der Klasse:
Delphi-Quellcode:
var
  regex: TRegExpr;
begin
  regex := TRegExpr.Create;
  regex.Expression := '(''.*?),(.*?'')';
  result := regex.Replace(input, '${1}.${2}', true);
  regex.Free;
end;
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.

Eine Klasse TRegExpr gibt es da http://regexpstudio.com/

Ansonsten kannst du dir natürlich auch eine eigene Methode mit Pos und Co zum Auseinanderpfriemeln baun.

SirThornberry 14. Jul 2009 21:46

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:
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;
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.)

Ebil 14. Jul 2009 22:52

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~

Blup 15. Jul 2009 10:19

Re: komma zwischen zwei ' ' finden.
 
Zitat:

Zitat von Ebil
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.

Zitat:

Zitat von Ebil
Also es soll nur das erste gefundene bearbeitet werden.

Ich vermute mal das die erste Beschreibung die richtigere ist.

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'}

cruiser 15. Jul 2009 12:49

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.

p80286 15. Jul 2009 13:25

Re: komma zwischen zwei ' ' finden.
 
Also die Fragestellung ist mir nicht ganz klar.
Wenn es folgende Möglichkeiten gibt
Code:
...blabla','blabla....
...blabla',5,'blabla....
soll dann
Code:
...blabla','blabla.... => ...blabla'.'blabla....
und
Code:
...blabla',5,'blabla.... => ...blabla'.5.'blabla....
umgesetzt werden?

oder soll nur das erste Komma (genau)hinter einem Hochkomma umgesetzt werden?
Code:
...blabla',5,'blabla',7,'blablu.... => ...blabla'.5,'blabla',7,'blablu....
oder...

Gruß
K-H

Ebil 22. Jul 2009 20:38

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 01:14 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