Entwickler-Ecke
Sonstiges (Delphi) - Linknamen in einzelteile zerlegen
Asgar - Di 03.05.05 14:05
Titel: Linknamen in einzelteile zerlegen
Hallo erstmal.
Ich habe folgendes Problem.
In einer Textdatei steht ein Link (z.B.:%PROGRAMMS%\%PROGRAMMGROUP%\Uninstall)
Der Link besteht aus den Teilen Position des Links=%PROGRAMMS%, Verzeichnis des Links=%PROGRAMMGROUP% und dem Namen des Links=Uninstall
Jetzt soll das programm diesen Link aufteilen und seine Einzelteile in eine Tabelle schreiben. Wie mache ich das am Besten? Kenne keinen Befehl dafür da ich noch Anfänger bin.
jaenicke - Di 03.05.05 15:15
Nun ja, es gibt den Befehl Pos. Der gibt die Position eines Strings innerhalb eines anderen zurück.
Und mit Copy kann ein bestimmter Teil des durchsuchten Strings geholt werden.
Damit solltest du es mal versuchen.
Aber hier mal ein bisschen Quelltext...
Ich hab irgendwann mal ne Funktion geschrieben, die das ganze etwas langsamer aber dafür selbstständig durchführt...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| procedure ParseString(AnalyzeString, Trennung: String; var Daten: TStringList); overload; var tmpString: String; begin if Daten = nil then Daten:=TStringList.Create else Daten.Clear; while Length(AnalyzeString)>0 do begin If Pos(Trennung,AnalyzeString)>0 then begin tmpString:=Copy(AnalyzeString,1,Pos(Trennung,AnalyzeString)-1); Delete(AnalyzeString,1,Pos(Trennung,AnalyzeString)); end Else begin tmpString:=AnalyzeString; AnalyzeString:=''; end; Daten.Add(tmpString); end; end;
var Parts: TStringList; i: Integer; begin ParseString(DeinString, '\', Parts); for i := 0 to Parts.Count - 1 do ShowMessage(Parts[i]); Parts.Free; end; |
Erklärung:
ParseString bekommt den zu parsenden String und das Trennzeichen, an dem es trennen soll. Außerdem muss eine Variable vom Typ TStringlist mit übergeben werden, in die dann die einzelnen Teile kommen.
Dann kann mit Parts[i] auf die einzelnen Bestandteile zugegriffen werden, als Beispiel zeigt der Code oben die mit jeweils einem Meldungsfenster an...
Asgar - Di 03.05.05 15:19
Danke für die schnelle Hilfe.
Das mit pos funktioniert bei mir, aber wenn das selbe Zeichen nach dem ich suche noch einmal in dem String vorkommt, soll er mir auch die Position davon sagen. Aber er gibt mir nur die erste Position aus.
jaenicke - Di 03.05.05 15:27
Dafür gibts Delete, das löscht einen Teil des Strings, d.h. nachdem ein teil mit Copy fertig ist, kann er mit denselben Parametern an Delete gelöscht werden.
Der String muss aber ein einfacher String sein, d.h. darf nicht eine Eigenschaft oder so sein, aber das merkst du, wenn der Compiler meckert...
2. Möglichkeit, falls der String unverändert bleiben soll: Es gibt PosEx, das macht dasselbe wie Pos, sucht aber erst ab einer angegebenen Stelle...
Asgar - Di 03.05.05 15:30
ok, es funktioniert jetzt.
Danke.
Delete - Di 03.05.05 15:33
Wie wäre es mit
EXPLODE?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!