String in Variable links um drei Buchstaben abschneiden?

Begonnen von martinusbaum, Sonntag, 20. Oktober 2019, 17:14

« vorheriges - nächstes »

martinusbaum

hallo zusammen,
hab Stücke in Verzeichnissen, die nummeriert sind, z.B. 01_Stückname.
nun soll der Verzeichnisname ohne Nummer als title verwendet werden (title = "Stückname")
Bitte wie kann ich an dem string links drei Zeichen abschneiden?
Lieben Dank für Hilfe!

harm6

(string-drop "01_Stückname" 3)
oder
(cadr (string-split "01_Stückname" #\_))

Allerdings können beide Methoden falsche Ergebnisse liefern:
string-drop falls Buchstaben vorkommen deren string-length größer 1 ist. Z.B (string-drop "äü_Stückname" 3) -> "�_Stückname"
string-split wenn mehr als ein Unterstrich vorkommt. Z.B. (cadr (string-split "01_Stück_name" #\_)) ->"Stück"

Gruß,
  Harm

Malte

Oder(substring "01_Stückname" 3)Wie sich das jetzt von string-drop unterscheidet, ist mir nicht ganz klar ... Mehr dazu: https://www.gnu.org/software/guile/docs/docs-1.8/guile-ref/String-Selection.html#String-Selection

Edit: Nachdem du immer nur Ziffern und Unterstriche abschneidest, sollte es keine Probleme mit einer falschen Anzahl von Buchstaben geben; diese Zeichen sind alle im ASCII drin und damit auch in UTF8 in nur einem Byte kodiert.

harm6

ZitatWie sich das jetzt von string-drop unterscheidet, ist mir nicht ganz klar

Naja, string-drop startet am Anfang und schmeißt alles raus bis zum spezifizierten Wert.
substring behält alles ab dem spezifizierten Wert bis zum optionalen Wert oder dem string-Ende.

Übrigens, all diese string-operationen klappen in guile-2 sehr viel direkter, da sehr viele characters gelistet werden.
Z.B.
Zitat von: guile-prompt
scheme@(guile-user)> (version)
$3 = "2.0.14"
scheme@(guile-user)> (string-drop "äü_Stückname" 1)
$4 = "ü_Stückname"

Wenn nur  die anderen Probleme nicht wären...

Gruß,
  Harm

harm6

Zum Vergleich:

Zitat von: guile-1.8-prompt
guile> (version)
"1.8.8"
guile> (char-set-size char-set:full)
256

Zitat von: guile-2.0.14-prompt
$2 = "2.0.14"
scheme@(guile-user)> (char-set-size char-set:full)
$3 = 1112064

Gruß,
  Harm

martinusbaum

Lieben Dank!
dass daraus sogar eine vertiefende Disussion entstanden ist....