Einzelnen Beitrag anzeigen

Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#21

Re: Einen Komma-Text richtig trennen.

  Alt 2. Apr 2008, 16:35
Ein wenig TERWI-Senf dazu...
Diese Funktion nutze ich schon seit ner kleinen Ewigkeit, um Strings - z.B. durch Komma oder andere Zeichen getrennt - zu zerlegen.
Kann man dann logo auch rekursiv auf die Ergebnisse anwenden ...
Delphi-Quellcode:
function SplitStr(T : char; var S : string) : string;
var
  p : integer;
begin
  Result := S; // Result ist zunächst S unverändert !
  if s = 'then exit; // ... da gibts nix zu trennen
  p := Pos(T, S); // Position des Trennzeichens 'T' ermitteln
  if p > 1 then // Trennzeichen ist vorhanden !
  begin // > JA
    Result := trim(Copy(S,1,p-1)); // Bis zum Trennzeichen aus S nach Result kopieren (links)
    S := trim(Copy(S,p+1,Length(S))); // Rest nach Trennz. in S zurückgeben (rechts)
  end
  else S := ''; // Kein Trenner - Result (links) ist S und S (rechts) ist leer
end;
Da würde ich gunfran's Beispiel erst mal grob nach Kommata zerlegen
Und dann weiter den Wert in {} ermitteln... Nur ne grobe Idee, nicht getestet !
Delphi-Quellcode:
...
  s_org := 'BORKUM{61}, BLA2{60}, REL{62}, EN/NORD{72}, ESSEN{59}, TRINKEN{70}, HERNE{71}, HSK1{67}, MAMA123{65}, KW/DINSL{64}, OBERHAUSEN{66}, EN/SÜD{73}, KW/MOERS{63}, HSK2{68}, HSK3{69}';
  repeat
    s_result := SplitStr(',', s_org);
    s_rest := s_result; // Edit: ... sonst wird das nix mit repeat until.
    // s_result prüfen... entweder leer oder was gültiges vor dem ','
    // ggf. noch mal ein SplitStr('/', s_result) darauf um für ein '/' zu trennen.... Achtung: s_result wird verändert !
    s_temp := SplitStr('{',s_result); // die {-Klammer vorne weg und den Rest erhalten
    // mach was mit s_temp vor dem {
    SetLength(s_result, Length(s_result - 1)); // die }Klammer hinten weg --- EDIT: Korrgiert...
    // mach hier was mit s_result
  until s_rest = '';
  // Edit: oder until (Pos(',', s_org) < 1);
Idee ohne Gewehr zum selber selbsterschiessen / weiterdenken...

PS: Ich bin da nicht so der Performance-Kasper. Sollte logo schon zügig gehen... Aber mit der SplitStr-Func habe ich schon relativ dicke Daten im xx-MB-Format durchwurstet und ich würde mach dumpf behaupten, das da die Platte (von der gelesen wurde) eher das langsamste Teil in der Kette war...
  Mit Zitat antworten Zitat