如何使用最后一个字符拆分来读取tcl中的字符串?

如何使用最后一个字符拆分来读取tcl中的字符串?,tcl,Tcl,在打印每个字符串之前,我试图阅读以下文本 0:1:2:3; 1:2:0; 10:13:15; 我编写了以下代码 foreach {line} [split [read $lFile] \n] { lassign [split $line ;] a puts $a } 但是输出是相同的字符串。我要先把绳子穿好 在Tcl中,分号表示命令行的结尾,因此,实际上您正在执行split$line而不是split$line。您必须引用使其工作: foreach {line} [split [r

在打印每个字符串之前,我试图阅读以下文本

0:1:2:3;
1:2:0;
10:13:15;
我编写了以下代码

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

但是输出是相同的字符串。我要先把绳子穿好

在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
}
你也可以使用

set a [regsub {;.*} $a ""]
或者,假设分号后没有文本

set a [string trimright $a ";"]

输出是相同的字符串,因为您在
foreach
中有一个错误(如前所述)。不过,您不必使用
foreach
。您可以使用
while
循环逐行读取文件

set file [open lFile.txt r];

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

或者换句话说,只要文件还没有结束(
![eof$file]
),就将文件拆分并打印到标准输出。

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