Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   String parsen (https://www.delphipraxis.net/133952-string-parsen.html)

danieleh 12. Mai 2009 19:56


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

mkinzler 12. Mai 2009 20:00

Re: String parsen
 
Z.B. mit einer StringListe (Delimiter/DelimitedText)

lbccaleb 12. Mai 2009 20:03

Re: String parsen
 
Oder mit Pos
siehe Delphi Hilfe

danieleh 12. Mai 2009 20:09

Re: String parsen
 
Ja, der delimiter ist gegemen: semikolon
aber dann gibts noch die Anführungszeichen (nur) in den ersten zwei variablen.

alzaimar 12. Mai 2009 20:14

Re: String parsen
 
Nimm den CSV-Reader, der kommt auch mit '"' klar.

Jakob Ullmann 12. Mai 2009 20:20

Re: String parsen
 
Such mal nach Explode im Forum. :zwinker:

danieleh 12. Mai 2009 20:36

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 ?

Klaus01 13. Mai 2009 07:31

Re: String parsen
 
Guten Morgen Daniele,
Zitat:

Zitat von danieleh
dann erhalte ich Werte OHNE Anführungszeichen. Ist das möglich ?

das mag daran liegen:

Zitat:

Zitat von http://www.delphibasics.co.uk/RTL.asp?Name=TStringList
DelimitedText property
Get or set the list via a big string. This string will have the list strings separated by the Delimiter value (default is a comma). Strings containing embedded blanks must be enclosed in the QuoteChar (default is ").

Grüße
Klaus

wazap 13. Mai 2009 09:08

Re: String parsen
 
TRegExpr, TStringList, Copy/Pos/Delete

mit StringList:

Delphi-Quellcode:
with StrList do
begin
  StrList.Delimiter := '#9'; // tab
  StrList.DelimitedText := MyString;
end;
[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]

fui-tak 15. Mai 2009 13:01

Re: String parsen
 
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


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