Thema: String parsen

Einzelnen Beitrag anzeigen

fui-tak

Registriert seit: 24. Okt 2008
117 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: String parsen

  Alt 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
  Mit Zitat antworten Zitat