如何解析使用分隔在TCL的文本文件?(How to parse a text file in tcl

2019-10-24 05:49发布

我有格式的文本文件

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

我需要分配在不同变量的所有三个字符串

Answer 1:

你是在犯错误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"


文章来源: How to parse a text file in tcl using separators?
标签: tcl