![]() |
String parsen
Hallo
hätte jemand ein guter tipp wie man am besten einen String ausliest der in folgender Form vorliegt: "TESTNAME";"C:\Eigene Dateien\TESTPFAD\DATEI.XXX";Param1;Param2;Param3 zu: var1 = TESTNAME // (also ohne Anführungszeichen) var2 = D:\Eigene Dateien\TESTPFAD\DATEI.XXX var3 = Param1 // (enthält keine Anführungszeichen) var4 = Param2 var5 = Param3 Danke daniele |
Re: String parsen
Z.B. mit einer StringListe (Delimiter/DelimitedText)
|
Re: String parsen
Oder mit Pos
siehe Delphi Hilfe |
Re: String parsen
Ja, der delimiter ist gegemen: semikolon
aber dann gibts noch die Anführungszeichen (nur) in den ersten zwei variablen. |
Re: String parsen
Nimm den
![]() |
Re: String parsen
Such mal nach Explode im Forum. :zwinker:
|
Re: String parsen
Explode kannte ich noch nicht.
Aber sehr seltsam - wenn mit stringlist auslese sl.Delimiter := ';'; sl.DelimitedText := ReadString('MRU1'); VAR001 := sl[0]; VAR001 := sl[1]; VAR001 := sl[2]; VAR001 := sl[3]; VAR001 := sl[4]; dann erhalte ich Werte OHNE Anführungszeichen. Ist das möglich ? |
Re: String parsen
Guten Morgen Daniele,
Zitat:
Zitat:
Klaus |
Re: String parsen
TRegExpr, TStringList, Copy/Pos/Delete
mit StringList:
Delphi-Quellcode:
[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]
with StrList do
begin StrList.Delimiter := '#9'; // tab StrList.DelimitedText := MyString; end; |
Re: String parsen
Für sowas hab ich mir mal selbst zwei Funktionen geschrieben:
Delphi-Quellcode:
Die Funktionen an sich funktionieren sicher, das konkrete lösen des Problems ist ungetestet.
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 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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:00 Uhr. |
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-2025 by Thomas Breitkreuz