2015-07-28 118 views

回答

2

在Tcl中,分号标记命令行的结尾,因此,您实际上在做split $line而不是split $line ;。你将不得不引用;为它工作:

foreach {line} [split [read $lFile] \n] { 
    lassign [split $line ";"] a 
    puts $a 
} 

或者用括号:

foreach {line} [split [read $lFile] \n] { 
    lassign [split $line {;}] a 
    puts $a 
} 
+2

我更喜欢使用双引号,因为它鼓励突出显示“像一个字符串”。另外,'\;'会起作用,其他一些比较模糊的选项也会起作用。 –

1

你也可以使用

set a [regsub {;.*} $a ""] 

,或者假设分号

后没有文本
set a [string trimright $a ";"] 
0

输出是th e相同的字符串,因为您在foreach中有错误(因为它被解释为here)。虽然,您不必使用foreach。您可以使用while循环逐行读取文件。

set file [open lFile.txt r]; 

while {![eof $file]} { 
    gets $file line; 
    lassign [split $line ";"] splittedFile; 
    puts stdout $splittedFile; 
} 

或者换句话说,只要文件还没有到达其终点(![eof $file]),分割文件,并将其打印到标准输出。

相关问题