Autor Beitrag
Mitmischer 1703
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: Sa 18.04.09 18:17 
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!!

_________________
Die Lösung ist nicht siebzehn.


Zuletzt bearbeitet von Mitmischer 1703 am Sa 18.04.09 18:42, insgesamt 1-mal bearbeitet
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Sa 18.04.09 18:21 
Dann wäre Index wohl Length(meinString) - 12 {+/- 1} und Count wäre 12.

_________________
We are, we were and will not be.
Mitmischer 1703 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: 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)?

_________________
Die Lösung ist nicht siebzehn.
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: 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,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Sa 18.04.09 18:48 
Ansonsten ist der Index 1 (Strings beginnen bei 1) bis Length(StringTeil - 12) (+/- 1, ausprobieren). Oder eben Delete.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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.

_________________
We are, we were and will not be.
Mitmischer 1703 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: 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:
ausblenden 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!

_________________
Die Lösung ist nicht siebzehn.


Zuletzt bearbeitet von Mitmischer 1703 am Sa 18.04.09 19:33, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 18.04.09 19:28 
Wahrscheinlich, weil du Length()-1 nimmst, das ist falsch. ;-)
Richtig:
ausblenden Delphi-Quelltext
1:
Copy(S, Length(S) - 1112);					
Denn Length(S) ist ja der letzte Buchstabe bereits. ;-)
Mitmischer 1703 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: Sa 18.04.09 19:35 
@Jaenicke: Der Code funktioniert. Kannst du mir das mal erklären?

_________________
Die Lösung ist nicht siebzehn.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 18.04.09 19:44 
Beispiel, nehmen wir den String "Das ist ein Test!":
ausblenden 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:
ausblenden Delphi-Quelltext
1:
RightStr(S, 12)					
:mrgreen: