Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Einen Komma-Text richtig trennen. (https://www.delphipraxis.net/108490-einen-komma-text-richtig-trennen.html)

TERWI 2. Apr 2008 16:35

Re: Einen Komma-Text richtig trennen.
 
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... :spin:

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...

DP-Maintenance 2. Apr 2008 16:48

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage

grenzgaenger 2. Apr 2008 23:45

Re: Einen Komma-Text richtig trennen.
 
und hast dir das auch schon mal angesehen? müsst eigentlich ziemlich genau deinen bedarf treffen...

alzaimar 3. Apr 2008 07:58

Re: Einen Komma-Text richtig trennen.
 
Zitat:

Zitat von TERWI
und ich würde mach dumpf behaupten, das da die Platte (von der gelesen wurde) eher das langsamste Teil in der Kette war...

Bestimmt, nur wenn die Daten schon im Speicher sind oder per TCPStream reintrudeln, möchte man im Server keine unnötigen CPU-Zyklen, denn wenn viele Threads gleichzeitig rumsplitten, dann geht der Server -pardauz- in die Knie. Insofern muss man immer nach möglichst effizienten Verfahren suchen. Dein Verfahren ist sehr aufwändig, denn es wird ständig unwichtiges Zeugs hin-und-her kopiert.

Hansa 3. Apr 2008 13:25

Re: Einen Komma-Text richtig trennen.
 
Das Wort "feste Feldlänge" ist noch nicht gefallen. Damit sind Trennzeichen-Probleme ein für allemal aus der Welt geschafft. Selbst dann wenn ein DAU "Herr M;ller" als Name gespeichert hat. Das Komma selber ist wegen Dezimalzahlen sowieso auszuschließen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:20 Uhr.
Seite 3 von 3     123   

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