Registriert seit: 24. Okt 2008
117 Beiträge
Turbo Delphi für Win32
|
Re: String parsen
15. Mai 2009, 14:01
Für sowas hab ich mir mal selbst zwei Funktionen geschrieben:
Delphi-Quellcode:
function positionSuchen(hauptstring, suchstring:string; nummerSuchstring:integer):integer;
var
i,laenge,pos1,poszaehler: integer;
begin
poszaehler := 0;
for i := 0 to nummerSuchstring-2 do
begin
pos1 := Pos(suchstring,hauptstring);
laenge := Length(suchstring);
poszaehler := poszaehler+laenge;
Delete(hauptstring,pos1,laenge);
end;
if Pos(suchstring,hauptstring) > 0 then
Result := Pos(suchstring,hauptstring)+poszaehler
else Result := 0;
end;
function wertZwischenErweitert(inString, zeichen1:string; zeichen1nummer:integer; zeichen2:string; zeichen2nummer:integer; abErstesZeichen, bisLetztesZeichen: boolean):string;
var pos1,pos2:integer;
begin
if abErstesZeichen = false then
pos1 := positionSuchen(inString,zeichen1,zeichen1nummer) + Length(zeichen1)
else pos1 := 1;
if bisletztesZeichen = false then
pos2 := positionSuchen(inString,zeichen2,zeichen2nummer)
else pos2 := Length(inString)+1;
Result := Copy(inString,pos1,pos2-pos1);
end;
//Aufruf:
var s: string
...
s := '"TESTNAME";"C:\Eigene Dateien\TESTPFAD\DATEI.XXX";Param1;Param2;Param3'
var1 := wertZwischenErweitert(s, '',0, ';', 1, true,false); // "TESTNAME"
var1 := wertZwischenErweitert(var1, '"', 1, '"' ,2 ,false,false); // TESTNAME
var2 := wertZwischenErweitert(s,';',1,';',2,false,false); // "D:\Eigene Dateien\TESTPFAD\DATEI.XXX"
var2 := wertZwischenErweitert(var2,'"',1,'"',2,false,false); // D:\Eigene Dateien\TESTPFAD\DATEI.XXX
var3 := wertZwischenErweitert(s, ';',2, ';', 3, false,false); // Param1
var4 := wertZwischenErweitert(s, ';',3, ';', 4, false,false); // Param2
var5 := wertZwischenErweitert(s, ';',4, '', 0, false,true); // Param3
Die Funktionen an sich funktionieren sicher, das konkrete lösen des Problems ist ungetestet.
Zum benutzen:
-der erste Parameter "inString" erhält den String, in dem gesucht werden soll
-der zweite Parameter "zeichen1" erhält das Zeichen oder den String, der vor dem gesuchten String steht
-der dritte Parameter "zeichen1nummer" erhält die Nummer von "zeichen1" (er könnte ja mehrmals auftauchen, wie hier das ";")
-"zeichen2" ist entsprechend "zeichen1"
-"zeichen2nummer" ist entsprechend "zeichen1nummer"
-"abErstesZeichen" ist true, wenn es kein erstes Zeichen gibt, weil das Gesuchte beim ersten Zeichen anfängt
-"bisLetztesZeichen" ist true, wenn es kein letztes Zeichen gibt, weil das Gesuchte beim letzten Zeichen aufhört
|