如何使用分隔符在tcl中解析文本文件?

如何使用分隔符在tcl中解析文本文件?,tcl,Tcl,我有一个这种格式的文本文件 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 lPartNum

我有一个这种格式的文本文件

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
中出错,
分割的结果将分配给循环变量
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"

您在
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"

您必须将这些反斜杠加倍以保留它们,或者使用大括号而不是双引号。您必须将这些反斜杠加倍以保留它们,或者使用大括号而不是双引号。