我正在尝试阅读以下文本打印每个字符串之前;如何使用最后一个字符分割来读取tcl中的字符串?
0:1:2:3;
1:2:0;
10:13:15;
我写了下面的代码
foreach {line} [split [read $lFile] \n] {
lassign [split $line ;] a
puts $a
}
但输出相同的字符串。我想要之前的字符串;
我正在尝试阅读以下文本打印每个字符串之前;如何使用最后一个字符分割来读取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 [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 ";"]
输出是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]
),分割文件,并将其打印到标准输出。
我更喜欢使用双引号,因为它鼓励突出显示“像一个字符串”。另外,'\;'会起作用,其他一些比较模糊的选项也会起作用。 –