| Autor |
Beitrag |
raven
      
Beiträge: 54
|
Verfasst: Mo 10.02.03 16:49
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
      
Beiträge: 526
WinXP Home & Professional
C, C++, Delphi
|
Verfasst: 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; |
_________________ Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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 
      
Beiträge: 54
|
Verfasst: 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
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: 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); ... |
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 10.02.03 18:08
Ich wüßte zu gerne, was ein Pfath ist ... 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 10.02.03 18:54
Jupp. So isses. Ich war zu faul Delphi anzuwerfen. 
|
|
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: 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
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: 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ß 
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 10.02.03 21:22
So habe ich es auch verstanden, deswegen meine (fehlerhafte) Lösung mit der Stringlänge.
|
|