如何使用分隔符解析 tcl 中的文本文件?
How to parse a text file in tcl using separators?
我有一个格式为
的文本文件
35|46
36|49
37|51
38|22
40|1
39|36
41|4
我必须跨分隔符“|”将文件读入数组其中左侧将是数组的键,右侧将是值。
我用过下面的代码
foreach {line} [split [read $lFile] \n] {
#puts $line
foreach {lStr} [split $line |] {
if { $lStr!="" } {
set lPartNumber [lindex $lStr 0]
set lNodeNumber [lindex $lStr 1]
set ::capPartsInterConnected::lMapPartNumberToNodeNumber($lPartNumber) $lNodeNumber
}
}
}
close $lFile
我无法阅读分隔符“|”的左侧。怎么做?
同样如此:
35|C:\AI\DESIGNS\SAMPLEDSN50\BENCH_WORKLIB.OLB|R
36|C:\AI\DESIGNS\SAMPLEDSN50\BENCH_WORKLIB.OLB|R
我需要在不同的变量中分配所有三个字符串
您在 foreach
中犯了错误,其中 split
的结果将分配给一个循环变量 lStr
,它一次只包含一个值,从而导致失败.
使用 lassign
,这可以很容易地执行。
set fp [open input.txt r]
set data [split [read $fp] \n]
close $fp
foreach line $data {
if {$line eq {}} {
continue
}
lassign [split $line | ] key value
set result($key) $value
}
parray result
lassign [split "35|C:\AI\DESIGNS\SAMPLEDSN50\BENCH_WORKLIB.OLB|R" |] num userDir name
puts "num : $num"
puts "userDir : $userDir"
puts "name : $name"
我有一个格式为
的文本文件35|46
36|49
37|51
38|22
40|1
39|36
41|4
我必须跨分隔符“|”将文件读入数组其中左侧将是数组的键,右侧将是值。
我用过下面的代码
foreach {line} [split [read $lFile] \n] {
#puts $line
foreach {lStr} [split $line |] {
if { $lStr!="" } {
set lPartNumber [lindex $lStr 0]
set lNodeNumber [lindex $lStr 1]
set ::capPartsInterConnected::lMapPartNumberToNodeNumber($lPartNumber) $lNodeNumber
}
}
}
close $lFile
我无法阅读分隔符“|”的左侧。怎么做?
同样如此:
35|C:\AI\DESIGNS\SAMPLEDSN50\BENCH_WORKLIB.OLB|R
36|C:\AI\DESIGNS\SAMPLEDSN50\BENCH_WORKLIB.OLB|R
我需要在不同的变量中分配所有三个字符串
您在 foreach
中犯了错误,其中 split
的结果将分配给一个循环变量 lStr
,它一次只包含一个值,从而导致失败.
使用 lassign
,这可以很容易地执行。
set fp [open input.txt r]
set data [split [read $fp] \n]
close $fp
foreach line $data {
if {$line eq {}} {
continue
}
lassign [split $line | ] key value
set result($key) $value
}
parray result
lassign [split "35|C:\AI\DESIGNS\SAMPLEDSN50\BENCH_WORKLIB.OLB|R" |] num userDir name
puts "num : $num"
puts "userDir : $userDir"
puts "name : $name"