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.