2017-09-10 1 views
-2

veulent fusionner 2 fichiers proc_2.tcl au proc_1.tcl, en utilisant nom, couche, bbox,fusion 2 fichiers avec une structure différente

fichier

de ports_1.tcl ci-dessous:

create_terminal \ 
     -name {DMItoPCUNotL1XnnnH} \ 
     -port {DMItoPCUNotL1XnnnH} \ 
     -layer m10 \ 
     -bbox {{0.000 2.104} {0.320 2.184}} 

set obj [get_terminal {"DMItoPCUNotL1XnnnH"}] 
set_attribute -quiet $obj layer m10 
set_attribute -quiet $obj owner_port {DMItoPCUNotL1XnnnH} 
set_attribute -quiet $obj bbox {{0.000 2.104} {0.320 2.184}} 
set_attribute -quiet $obj status Fixed 
set_attribute -quiet $obj access_direction Left 
set_attribute -quiet $obj direction input 
set_attribute -quiet $obj eeq_class 0 
fichier

de proc_2.tcl ci-dessous:

DMItoPCUNotL1XnnnH M8 {{0.000 4} {0.320 5}} 

name : DMItoPCUNotL1XnnnH 
layer: M8 
bbox : {{0.000 4} {0.320 5}} 
+0

Les fichiers affichés ne sont pas ceux que vous voulez fusionner et vous n'avez fourni aucune information utile sur la manière de les fusionner. Vous n'avez pas non plus montré d'effort pour résoudre cela vous-même. –

+0

merci camarade, –

+0

mais je ne comprends toujours pas quelle est la solution?! –

Répondre

0

En supposant que le second fichier est la suivante:

DMItoPCUNotL1XnnnH M8 {{0.000 4} {0.320 5}} 

Ensuite, il peut être analysé et converti/produit quelque chose comme le premier en utilisant ceci:

set TEMPLATE { 
    create_terminal \ 
      -name {$name} \ 
      -port {$name} \ 
      -layer $layer \ 
      -bbox {$bbox} 
    set obj [get_terminal {"$name"}] 
    set_attribute -quiet \$obj layer $layer 
    set_attribute -quiet \$obj owner_port {$name} 
    set_attribute -quiet \$obj bbox {$bbox} 
    set_attribute -quiet \$obj status Fixed 
    set_attribute -quiet \$obj access_direction Left 
    set_attribute -quiet \$obj direction input 
    set_attribute -quiet \$obj eeq_class 0 
} 

set f_in [open "file2.whatever.you.call.it"] 
set f_out [open "file1.tcl" w] 

# For each line 
while {[gets $f_in line] >= 0} { 
    # Skip blank lines or lines that start with # so you have comments 
    if {$line eq "" || [string match "#*" [string trim $line]]} continue 

    # We assume that each line is a complete Tcl list. 
    # This is usually a dodgy idea, but looks good in your specific case. 
    lassign $line name layer bbox 

    # Now generate the text using subst on the template 
    # I disable command substitutions; this reduces the number of backslashes needed 
    set text [subst -nocommands $TEMPLATE] 

    # Write the substituted text to the output file 
    puts $f_out $text 
} 

close $f_in 
close $f_out 

Vous peut intégrer un certain nombre de choses si vous voulez (par exemple, le subst et le modèle sont des candidats raisonnables). Si vous finissez par extraire les données d'entrée de quelque chose qui est un format plus générique (par exemple, CSV ou JSON) alors la partie d'analyse est un peu différente - il y a de bons paquets qui aident - mais le modèle général est reconnaissable.

Notez que le modèle est traité par subst et que les accolades internes ne sont pas significatives. Le traitement de subst a beaucoup en commun avec l'utilisation de guillemets doubles.

+0

super, ça marche. compatriote il genius & simple. Merci . –