Foreach命令,启动错误

时间:2015-03-23 04:12:36

标签: foreach tcl

这是我的名单

  set session_list [list ../../TIMING_ANALYSIS_CRPR/FUNC_ss28_0.85V_0.95V_0.85V_125C_RCmax/reports.15_03_10-22/SAVED_SESSION 
../../TIMING_ANALYSIS_CRPR/FUNC_ff28_0.85V_0.95V_0.85V_m40C_Cmin/reports.15_03_10-22/SAVED_SESSION]


 foreach j $session_list {
 set x  [string trimleft  $j  "../../TIMING_ANALYSIS_CRPR/ "]

}

foreach item $x {
puts "create_scenario -name $item "
}

所以我想要的是我的输出列表如下:

create_scenario -name FUNC_ss28_0.85V_0.95V_0.85V_125C_RCmax/reports.15_03_10-22/SAVED_SESSION 
create_scenario -name FUNC_ff28_0.85V_0.95V_0.85V_m40C_Cmin/reports.15_03_10-22/SAVED_SESSION 

在最上面的代码中,它不会读取第一个foreach命令,也不会显示整个列表

2 个答案:

答案 0 :(得分:1)

您在每个循环中设置x的值,这将导致x值被覆盖。

您必须使用lappend命令

 foreach j $session_list {
      lappend x  [string trimleft  $j  "../../TIMING_ANALYSIS_CRPR/ "]
 }

 foreach item $x {
     puts "create_scenario -name $item "
 }

输出

create_scenario -name FUNC_ss28_0.85V_0.95V_0.85V_125C_RCmax/reports.15_03_10-22/SAVED_SESSION 
create_scenario -name FUNC_ff28_0.85V_0.95V_0.85V_m40C_Cmin/reports.15_03_10-22/SAVED_SESSION 

参考:lappend

答案 1 :(得分:0)

[string trimleft]没有按照您的想法行事。这一行:

string trimleft  $j  "../../TIMING_ANALYSIS_CRPR/ "

基本上意味着:删除字符./以及TI以及MN以及G _A以及NL以及YS以及CR以及{ {1}}和(单个空格)构成字符串的左侧。

你想要的是regsub:

P