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

How to read a string in tcl using split with the last character?

我正在尝试阅读以下打印每个字符串的文本;

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]),拆分文件并打印到标准输出。