Entwickler-Ecke
Sonstiges (Delphi) - Wie kann ich einen String zerpflücken??
fbkreon - Sa 28.09.02 12:37
Titel: Wie kann ich einen String zerpflücken??
Ich weiß nicht, ob diese Frage schon mal gestellt worden ist, jedenfalls habe ich nichts dergleichen gefunden.
Ich würde gerne, ähnlich wie in PHP nen string mit der Form:
variable1=bla&variable2=blabla....
gerne so zerpflücken, daß ich direkt auf die Variablen mit den zugeordneten Werten zugreifen kann.
Gibt es so was in Delphi, oder muß ich sowas selbst bauen?
CenBells - Sa 28.09.02 12:56
Als erstes machst du
neuerstring := StringReplace(deinstring, '&', ',', rfReplaceAll);
und dann kannst mit einer erzeugten Strinlist folgendes machen
neuestringlist.commatext := neuerstring;
dann hast du in neueStringlist.names alle strings vor dem '=' und in neuestringlist.values alles hinter dem '='
Gruß
Ken
Ex0rzist - Sa 28.09.02 13:48
Und wie sieht es aus, wenn man eine Variable hat, in der ein Komma vorkommt? :roll:
Gruß
____________
Ex0rzist
fbkreon - Sa 28.09.02 14:11
Da kann ich Dir vielleicht helfen,
in PHP würde ich da einfach ein \ oder ein anderes mir bekanntes Zeichen packen, was nicht interpretiert wird. Da Delphi anscheinend ein Komma als Limiter oder Seperator interpretiert, würde ich also ein Komma durch ein Synonym ersetzen, z.B.: &kom&
oder so etwas, das funktioniert in jedem Fall, du mußt nur dann vor jeder Ausgabe oder Weiterverarbeitung dann das umsetzen in ein "Real"Komma
Ex0rzist - Sa 28.09.02 14:18
Das war eher eine rhetorische Frage. :wink:
Es ist in meinen Augen nicht unbedingt der beste Weg, die Variablen dem Algorithmus anzupassen, sondern eher anders herum.
Ich würde das mit einer Schleife realisieren. Alles was zwischen einem '&' und einem '=' steht kopieren und in Variable und Wert zerlegen.
Gruß
______________
Ex0rzist
fbkreon - Sa 28.09.02 14:40
Kann aber sehr hilfreich sein, speziell wenn man eigene Klassen oder Komponenten baut. Ich habe mir eine PHP-Derivat gebastelt, was noch einfacher und komfortabler zu handhaben ist, als das Original...man umgeht so auch Bugs. ;-)
fbkreon - Sa 28.09.02 14:44
Übrigens hab ich gerade noch etwas gefunden: ExtractStrings scheint sehr interessant zu sein....
Anonymous - Sa 28.09.02 16:22
TStrings und Co. haben einige kleine Schätzchen die etwas im verborgenen hinvegetieren und kaum beachtet werden. Vielleicht kannst du einiges davon gebrauchen:
.CommaText >> Importiert einen String und zerlegt ihn bei Kommas in einzelne Strings
.Values >> Liefert den Wert-Teil wenn Bezeichner angeben wird und die Form "Bezeichner=Wert" ist
uvm.
Manchmal kann man sich damit einen Parser sparen.
Anonymous - Sa 28.09.02 16:24
Ups...
hab gerade gesehen, daß Values schon bemerkt wurde.
fbkreon - Sa 28.09.02 17:03
Vielen Dank Euch allen für die schnelle Hilfe.
Aber ich habe soeben die NonPlusUltra-Lösung gefunden.
TExtractStrings und für die Bearbeitung von URLs TExtractHTTPFields.
Beide benötigen eine Stringlist:
Das kann dann z.B. So aussehen:
var TempList: TStringList;
{...}
begin
TempList:=TStringList.Create; { list object constructen }
chrSepa:=['&','=']; { Das sind hier die Trennzeichen }
chrWhite:=['w']; { Whitespacezeichen , hier: w wird ignoriert.... }
try
ExtractHTTPFields(chrSepa,chrWhite,PCHAR(URL-String),TempList);
finally
TempList.Free; { list object zerstören}
end;
end;
Fertig....mit TempList[..] kann man nun die ganze Geschichte als Array steuern und mit den Stringlist-Zusätzen bearbeiten.
ACHTUNG!! Das Bearbeiten geht nur solange, bis der .Free Asudruck gestartet wurde.....!!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!