AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String parsen

Ein Thema von danieleh · begonnen am 12. Mai 2009 · letzter Beitrag vom 15. Mai 2009
Antwort Antwort
danieleh

Registriert seit: 1. Dez 2005
54 Beiträge
 
#1

String parsen

  Alt 12. Mai 2009, 20:56
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: String parsen

  Alt 12. Mai 2009, 21:00
Z.B. mit einer StringListe (Delimiter/DelimitedText)
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: String parsen

  Alt 12. Mai 2009, 21:03
Oder mit Pos
siehe Delphi Hilfe
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
danieleh

Registriert seit: 1. Dez 2005
54 Beiträge
 
#4

Re: String parsen

  Alt 12. Mai 2009, 21:09
Ja, der delimiter ist gegemen: semikolon
aber dann gibts noch die Anführungszeichen (nur) in den ersten zwei variablen.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: String parsen

  Alt 12. Mai 2009, 21:14
Nimm den CSV-Reader, der kommt auch mit '"' klar.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Jakob Ullmann
Jakob Ullmann

Registriert seit: 17. Feb 2007
218 Beiträge
 
Lazarus
 
#6

Re: String parsen

  Alt 12. Mai 2009, 21:20
Such mal nach Explode im Forum.
Jakob
  Mit Zitat antworten Zitat
danieleh

Registriert seit: 1. Dez 2005
54 Beiträge
 
#7

Re: String parsen

  Alt 12. Mai 2009, 21:36
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 ?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: String parsen

  Alt 13. Mai 2009, 08:31
Guten Morgen Daniele,
Zitat von danieleh:
dann erhalte ich Werte OHNE Anführungszeichen. Ist das möglich ?
das mag daran liegen:

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
Klaus
  Mit Zitat antworten Zitat
wazap

Registriert seit: 19. Nov 2008
1 Beiträge
 
#9

Re: String parsen

  Alt 13. Mai 2009, 10:08
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]
  Mit Zitat antworten Zitat
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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz