AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

komma zwischen zwei ' ' finden.

Ein Thema von Ebil · begonnen am 14. Jul 2009 · letzter Beitrag vom 22. Jul 2009
Antwort Antwort
Ebil

Registriert seit: 14. Mär 2008
35 Beiträge
 
#1

komma zwischen zwei ' ' finden.

  Alt 14. Jul 2009, 19:52
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~
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: komma zwischen zwei ' ' finden.

  Alt 14. Jul 2009, 21:38
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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: komma zwischen zwei ' ' finden.

  Alt 14. Jul 2009, 21:46
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.)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Ebil

Registriert seit: 14. Mär 2008
35 Beiträge
 
#4

Re: komma zwischen zwei ' ' finden.

  Alt 14. Jul 2009, 22:52
Danke an euch ich habe den vorschlag von cruiser genommen, regexpr wollt ich schon immer mal benutzen
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~
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: komma zwischen zwei ' ' finden.

  Alt 15. Jul 2009, 10:19
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 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'}
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: komma zwischen zwei ' ' finden.

  Alt 15. Jul 2009, 12:49
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.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

Re: komma zwischen zwei ' ' finden.

  Alt 15. Jul 2009, 13:25
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
  Mit Zitat antworten Zitat
Ebil

Registriert seit: 14. Mär 2008
35 Beiträge
 
#8

Re: komma zwischen zwei ' ' finden.

  Alt 22. Jul 2009, 20:38
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:56 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