在每个打印语句之后打印逗号,除了最后一个

时间:2012-04-24 22:49:18

标签: foreach tcl

我的foreach循环逻辑需要一些帮助:

除了循环中的最后一个语句

之外,我需要在每个print语句后面加一个逗号

ex:blah,blah2,blahlast

以下代码甚至在最后一个语句之后输入逗号。

 foreach row $regions {
            set name [lindex $row 0]
            set id [lindex $row 1]
            puts "{'name':'$name', 'val':'$region_id'}"
            puts ","

        }

也许如果我计算它循环的次数,我可以检查一个if条件,将逗号unlti放在最后一次迭代中

3 个答案:

答案 0 :(得分:4)

另一种接近它的方法是建立一个要打印的项目列表并在最后加入它:

set lines {}
foreach row $regions {
    set name [lindex $row 0]
    set region_id [lindex $row 1] ;# changed this from id to region_id, seemed right
    lappend lines "{'name':'$name', 'val':'$region_id'}"
}
puts [join $lines ",\n"]

答案 1 :(得分:3)

诀窍是在所有迭代上打印逗号但是第一个(即,颠倒你的逻辑):

set xs {a b c}
set s ""
set need_comma false
foreach x $xs {
  if {$need_comma} {
    append s ,
  } else {
    set need_comma true
  }
  append s $x
}
puts $s

会产生

a,b,c

请注意,您似乎只是在寻找join命令。

答案 2 :(得分:0)

我为RHSeeger投了+1,因为这就是我要做的。但是,您似乎正在尝试将TCL列表转换为Python的列表。如果是这种情况,您甚至不必担心抑制最后一个逗号:Python允许:

>>> li = [1,2,3,]
>>> len(li)
3

这意味着,您当前的解决方案有效。不要担心最后一个逗号。