Код Tcl для сравнения двух файлов (конкретная ложь)
Этот код TCL, который я написал, чтобы получить информацию о выводах и сравнить их со слоем и прямоугольником.
proc fileinput {filename} {
set filedata [open $filename r]
set file1 [ read $filedata ]
close $filedata
set pindata [dict create]
foreach line [split $file1 \n] {
if {[string match "*PIN*" $line]} {
set pin [lindex $line 1]
}
if {[string match "*LAYER*" $line]} {
set layer [lindex $line 1]
dict lappend pindata $pin layer $layer
}
if {[string match *RECT* $line]} {
set rect [lindex $line 1 4]
dict lappend pindata $pin rect $rect
}
}
return $pindata
}
set pin_data1 [fileinput osi_hbmp_top_briscm_1.txt]
set pin_data2 [fileinput osi_hbmp_top_briscm_2.txt]
#last block
foreach pin_name [dict keys $pin_data1] {
set layer1 [dict get $pin_data1 $pin_name layer]
set layer2 [dict get $pin_data2 $pin_name layer]
if {$layer1 != $layer2} {
puts "pin not match"
} else {
puts $pin_name
}
}
В этом коде я получаю ошибку в последнем блоке кода. Эти два файла содержат одинаковый формат данных, а имена некоторых контактов различаются. При сравнении двух файлов выдается ошибка. i_hbmc_ieee1500_wsi_san этот вывод присутствует только в первом файле, во втором файле такого вывода нет. могу ли я узнать, что не так я сделал в коде? пожалуйста, подчеркните мою ошибку :) Я получил следующую ошибку: -
key "i_hbmc_ieee1500_wsi_san" not known in dictionary
while executing
"dict get $pin_data2 $pin_name layer"
("foreach" body line 3)
invoked from within
"foreach pin_name [dict keys $pin_data1] {
set layer1 [dict get $pin_data1 $pin_name layer]
set layer2 [dict get $pin_data2 $pin_name lay..."
(file "aa.tcl" line 26)
для справки, формат файла (в файле присутствует отступ)
PIN i_hbmc_ieee1500_sel_wir
DIRECTION INPUT ;
USE SIGNAL ;
PORT
LAYER K3 ;
RECT 2090.163000 3265.856000 2090.476000 3265.920000 ;
END
END i_hbmc_ieee1500_sel_wir
PIN i_hbmc_ieee1500_cap_wr
DIRECTION INPUT ;
USE SIGNAL ;
PORT
LAYER K3 ;
RECT 2090.163000 3265.984000 2090.476000 3266.048000 ;
END
END i_hbmc_ieee1500_cap_wr
PIN i_hbmc_ieee1500_shft_wr
DIRECTION INPUT ;
USE SIGNAL ;
PORT
LAYER K3 ;
RECT 2090.163000 3265.728000 2090.476000 3265.792000 ;
END
END i_hbmc_ieee1500_shft_wr