2016-09-20 2 views
0

Ich bin ein Neuling auf TCL und ich versuche, die Zeichenfolge unten in eine Liste aufgeteilt:Split ein String TCL mit

Sep 20, 07:45:12, 100.1.1.1 

Meine Erwartung ist:

{Sep 20} {07:45:12} {100.1.1.1} 

Könnte jemand helfen ich mit einer einfachen Lösung? Ich meine eigene Art und Weise, aber es ist ein wenig komplexen Dank

Antwort

1

Da Sie ein aus mehrere Separator-Sequenz verwenden, ist es am einfachsten string map zu verwenden, um es in einen einzigen seltenen Charakter (etwas in dem „ungewöhnlich“ Teil von Unicode zu konvertieren wird tun, wir verwenden die maskierte Version von dem) und dann split darauf. Es ist wirklich ein one-liner ...

set theString "Sep 20, 07:45:12, 100.1.1.1" 
set pieces [split [string map {", " \uffff} $theString] \uffff] 

Sie auch die splitx Sachen in tcllib dafür verwenden können, aber es ist viel des Guten für diesen Fall.

+0

es gut funktioniert. Vielen Dank – loveclassic

+0

Die "splitx Zeug" ist hier dokumentiert: http://core.tcl.tk/tcllib/doc/trunk/embedded/www/tcllib/files/modules/textutil/textutil_split.html –

0
% set foo "Sep 20, 07:45:12, 100.1.1.1" 
Sep 20, 07:45:12, 100.1.1.1 
% split [regsub -all {,\s+} $foo ,] ,  
{Sep 20} 07:45:12 100.1.1.1 
% 

Schließen Sie alle Elemente mit geschweiften Klammern nach Bedarf explizit ein. Aus Sicht von TCL ist es nur ein Mechanismus, um eine durch Leerzeichen getrennte Zeichenkette anzuzeigen. Zum Beispiel

% split "foo bar, bar bat, bat foo" , 
{foo bar} { bar bat} { bat foo} 
% 
+0

Vielen Dank! Es ist nett – loveclassic

0

Der Vollständigkeit halber; erfordert Tcl 8.6+ (8.5 mit der rein Tcl Add-on genannt unten):

set txt "Sep 20, 07:45:12, 100.1.1.1" 
lmap item [split $txt ,] {string trim $item} 
# => {Sep 20} 07:45:12 100.1.1.1 

Dokumentation: lmap (for Tcl 8.5), lmap, set, split, string

+0

Vielen Dank. Es läuft gut – loveclassic