Entwickler-Ecke
Sonstiges (Delphi) - string zerschneiden
raven - Mo 10.02.03 16:49
Titel: string zerschneiden
hi leuzt ...
Ich habe in einer stringvariable eine pfad angabe gespeichert, aber es gibt die möglichkeit das ganz am ende vom pfad entweder ein "\" oder zwei "\\" sind ... das möchte ich überprüfen und wenn es 2 slashe sind möchte ich das der eine davon gelöscht wird ...
also wenn ich habe
G:\\ soll das zu G:\ werden...
wenn ich habe
G:\ soll das G:\ bleiben
danke ;)
DaRkFiRe - Mo 10.02.03 17:08
Einfach im String solange nach den "\\" suchen und diese ersetzen, bis keine mehr davon vorhanden sind...
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function simpSlashes (S:STRING):STRING; var R:STRING; var iIdx:INTEGER; begin R:=S; repeat iIdx:=POS('\\',R); IF iIdx > 0 THEN DELETE(R,iIdx,1); until (iIdx = 0); Result:=R; end; |
Delete - Mo 10.02.03 17:18
Oder:
Quelltext
1: 2: 3: 4: 5: 6:
| var s : String; begin s := Pfath; if (s[length] = '\') and (s[length-1] = '\') then delete(s, length, 1); |
Wenn ich ihn richtig verstanden haben, kann es nur am Ende vorkommen. Außerdem dürfte das schneller sein, da pos viel Rechenzeit braucht.
raven - Mo 10.02.03 17:42
@lucky
der code funtzt leider nich ;(
Die Fehler:
( erwartet aber ] gefunden
( erwartet aber - gefunden
Operator ist auf diesen Operatoprentyp nicht anwendbar
zu viele parameter (bei dem delete befehl werden bei mir keine paramter erwartet?!?)
Inkompliatable typen
?!?
smiegel - Mo 10.02.03 17:52
Hallo,
Luckie ist in seinem Code ein kleiner aber gemeiner Fehler unterlaufen! Die Variable length ist so nicht deklariert, aber er meinte wahrscheinlich
s[Length(s)].
So müsste es gehen:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var s : String; aLen:Integer;
... s := Pfath; aLen:=Length(s); if (s[aLen] = '\') and (s[aLen-1] = '\') then System.Delete(s, aLen, 1); ... |
Christian S. - Mo 10.02.03 18:08
Ich wüßte zu gerne, was ein Pfath ist ... :lol:
Delete - Mo 10.02.03 18:54
Jupp. So isses. Ich war zu faul Delphi anzuwerfen. :roll:
Aya - Mo 10.02.03 20:21
Also ich will ja nix sagen *g* Aber das ganze geht auch mit einem einzigen Befehl...
Quelltext
1:
| S:=StringReplace(S,'\\','\',[rfReplaceAll,rfIgnoreCase]); |
Au'revoir,
Aya
smiegel - Mo 10.02.03 21:20
Hallo,
@Aya, @DaRkFiRe
so einfach geht es nicht.
Wenn ich einen UNC-Pfad ("\\[SERVER_NAME]\[VOLUME_NAME]\[VERZEICHNIS]\") habe, bekomme ich mit Euren Lösungen Probleme.
Die Frage war auch nicht, das 1. Vorkommen oder alle Vorkommen zu ersetzen, sondern den überflüssigen Backslash am Schluß :idea:
Delete - Mo 10.02.03 21:22
So habe ich es auch verstanden, deswegen meine (fehlerhafte) Lösung mit der Stringlänge.
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!