Код 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

0 ответов

Другие вопросы по тегам