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