Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Copy


Mitmischer 1703 - Sa 18.04.09 18:17
Titel: Copy
Ich möchte einen Teilstring aus einem "großen" String erhalten und möchte dafür die letzten zwölf (!) Zeichen abschneiden. ALSO DEN REST IN DER HAND HALTEN!!

Ich verstehe aber jetzt nicht ob ich die 12 in "Index" oder in "Count" schreiben soll.

Die Zeichenlänge der vorderen Zeichen ist unbekannt!!


Gausi - Sa 18.04.09 18:21

Dann wäre Index wohl Length(meinString) - 12 {+/- 1} und Count wäre 12.


Mitmischer 1703 - Sa 18.04.09 18:26

Klar, Length gibts auch noch...

In der DF steht: Copy gibt einen Teilstring oder ein Teilarray zurück, das Count Zeichen oder Elemente ab S[Index] enthält

Müsste Index dann nicht 0 sein und Count Length(StringTeil - 12)?


Hidden - Sa 18.04.09 18:47

Hi :)

Ehe du jetzt "S := Copy(S, ..); machst: Es gibt auch noch Delete(), das ist glaube ich bi langen Strings performancemäßig gesehen ein bisschen günstiger.

mfG,


GTA-Place - Sa 18.04.09 18:48

Ansonsten ist der Index 1 (Strings beginnen bei 1) bis Length(StringTeil - 12) (+/- 1, ausprobieren). Oder eben Delete.


Gausi - Sa 18.04.09 18:50

Ups, hatte das falsch gelesen. Ich dachte, du wolltest die letzten 12 Zeichen haben. Dann würde ich Index auch auf 1 setzen, denn ein String fängt bei 1 an, nicht bei 0 wie dynamische Arrays.


Mitmischer 1703 - Sa 18.04.09 19:16

Aus irgendeinem Grund muss ich zwar 13 Zeichen abschneiden, aber ansonsten funktioniert der Code!

Danke!

Edit: Tja, wie man sich irren kann...

An JEDEN String hängt die Prozedur ein "f"... Wie löscht der?
Das ist der Code:

Delphi-Quelltext
1:
Delete(S, Length(S) - 1212);                    


Aber es wird immer das f beibehalten (Zur Erläuterung: Die Strings sind Dateinamen von Prefetchdateien, also *.pf!


jaenicke - Sa 18.04.09 19:28

Wahrscheinlich, weil du Length()-1 nimmst, das ist falsch. ;-)
Richtig:

Delphi-Quelltext
1:
Copy(S, Length(S) - 1112);                    
Denn Length(S) ist ja der letzte Buchstabe bereits. ;-)


Mitmischer 1703 - Sa 18.04.09 19:35

@Jaenicke: Der Code funktioniert. Kannst du mir das mal erklären?


jaenicke - Sa 18.04.09 19:44

Beispiel, nehmen wir den String "Das ist ein Test!":

Quelltext
1:
2:
D  a  s  _  i  s  t  _  e  i  n  _  T  e  s  t  !
1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17
So, jetzt willst du die letzten 12 Buchstaben. Das heißt die Buchstaben 6 bis 17 (die ersten 5 ja nicht).
Length(S) ist 17, also der letzte Buchstabe, wenn ich von da aus einen kopiere, dann wäre das der letzte (ohne Length() - 1 oder so als Start). Ich will aber 11 Buchstaben weiter links anfangen, also 17 - 11 = 6. Und von da aus sind das dann die letzten 12 Buchstaben.

Du kannst natürlich auch einfach die Unit StrUtils einbinden und RightStr benutzen:

Delphi-Quelltext
1:
RightStr(S, 12)                    
:mrgreen: