Как мне вернуть список из TCL Proc? - PullRequest
2 голосов
/ 15 марта 2019

У меня есть следующий код -

#Create a list, call it 'p'
set p {dut.m0.x,dut.m1.y,dut.m2.z,dut.m3.z,dut.a0.vout}

#Here is a procedure to return this list 
proc get_ie_conn_ports {ie} {
        global p
        set my_list {}
        foreach n [split $p ","] {
        lappend my_list $n
    }
    return [list $my_list]
}

#This procedure call the previous procedure to retrieve the list
#It then prints it
proc print_ports_and_direction {ie} {

    set ie_ports [get_ie_conn_ports ie]
    puts $ie_ports
    foreach n [split $ie_ports (|\{|\})] {
        puts [string trim $n]
    }


}

#I call the procedure, dont worry about the argument (place holder for now)
print_ports_and_direction "dut.net00.RL_Bidir_ddiscrete_1.8"

Когда этот список печатается, я получаю это -

dut.m0.x dut.m1.y dut.m2.z dut.m3.z dut.a0.vout

Пустое пространство не учитывается. Пожалуйста, посоветуйте, как я могу напечатать каждого участника на новой строке. Спасибо за вашу помощь!

1 Ответ

2 голосов
/ 15 марта 2019

Значение ie_ports равно dut.m0.x dut.m1.y dut.m2.z dut.m3.z dut.a0.vout, и вы пытаетесь разделить любой из символов ( | { } ), которых нет в ie_ports, поэтому у вас останется весь список.

Я не уверен, что именно вы пытаетесь сделать, но вы можете перебрать сам список:

foreach n $ie_ports {
    puts [string trim $n]
}

Другая проблема заключается в том, что ваша процедура get_ie_conn_ports заключает список $my_list в другой список, который не нужен. Вы должны вернуть сам список:

proc get_ie_conn_ports {ie} {
    global p
    set my_list {}
    foreach n [split $p ","] {
        lappend my_list $n
    }
    return $my_list
}

Вы также можете изменить следующую строку:

set ie_ports [get_ie_conn_ports ie]

до

set ie_ports [get_ie_conn_ports $ie]

Выполнение изменений в вашем коде в codepad дает следующие результаты, когда каждый участник находится в строке:

dut.m0.x
dut.m1.y
dut.m2.z
dut.m3.z
dut.a0.vout
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...