Das Problem ist, dass \
ein Metasyntax Charakter Tcl-Liste ist, anders als , >
oder beliebige alphanumerische Zeichen.Sie müssen Ihre Zeichenfolge in eine ordnungsgemäße Tcl-Liste konvertieren, bevor Sie lindex
(oder eine andere listenintensive Operation) darauf verwenden. Um das zu tun, müssen Sie verstehen genau was Sie bedeuten durch "Wörter" in Ihren Eingabedaten. Wenn Ihre Eingabedaten ein Sequenz von nicht-Leerzeichen getrennt durch einzelne Leerzeichen sind, können Sie split
verwenden, um die Umwandlung in eine Liste zu tun:
set properList [split $item]
# Now we can use it...
set theFirstWord [lindex $properList 0]
Wenn Sie einen anderen Separator haben, split
ein optionales nehmen Extra-Charakter, um zu sagen, was zu teilen ist. Zum Beispiel aufzuspalten von Doppelpunkten (:
) Sie tun:
set properList [split $item ":"]
Wenn Sie jedoch andere Arten von Spaltung Regeln haben, ist dies nicht so gut funktioniert. Zum Beispiel, wenn Sie mit dem mehrere Leerzeichen aufteilen können, dann ist es tatsächlich besser regexp
zu verwenden (mit den -all -inline
Optionen) die Wort-Identifikation zu tun:
# Strictly, this *chooses* all sequences of one or more non-whitespace characters
set properList [regexp -all -inline {\S+} $item]
Sie auch Aufspaltung von Multi-Zeichenfolge zu tun In diesem Fall ist es am einfachsten, die Multi-Zeichen-Sequenz (mit string map
) zuerst auf ein einzelnes seltenes Zeichen abzubilden. Unicode bedeutet, dass es viele solcher Zeichen ist ...
# NUL, \u0000, is a great character to pick for text, and terrible for binary data
# For binary data, choose something beyond \u00ff
set properList [split [string map {"BOUNDARY" "\u0000"} $item] "\u0000"]
Noch komplexe Optionen möglich zu holen, aber das ist, wenn Sie splitx
von Tcllib verwenden.
package require textutil::split
# Regular expression to describe the separator; very sophisticated approach
set properList [textutil::split::splitx $item {SPL+I*T}]
Gut danke für die Info. Aber meine Frage ist anders. – user2311285
Entschuldigung Irgendwie wurde mein Netzwerk getrennt, Konnte die vollständige Antwort nicht geben. Bitte finden Sie die aktualisierte Antwort. – kvivek
Ja, aber ich habe nicht die Option, das "\" in der Listenvariablen zu umgehen. In der Anwendung, die ich mit dem Benutzer arbeite, wählt einige Text in Form einer Liste aus. Daher habe ich keine Kontrolle über den Inhalt der angegebenen Liste und kann sie nicht ändern. – user2311285