如何使用最后一个字符拆分来读取 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]
),拆分文件并打印到标准输出。
我正在尝试阅读以下打印每个字符串的文本;
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]
),拆分文件并打印到标准输出。