我只有一列数据,其中包含我想存储在Tcl列表中的项目名称。出于可读性考虑,我想将每个项目保留在自己的行中(在这种情况下,它将使以后跟着我的人进行脚本的编辑变得容易得多)。如何将我的数据列包装在Tcl命令/语法中,以便仅将每一行中的项目取走并形成Tcl列表?
这是我到目前为止尝试过的:
set mylist {
apples
bananas
peaches
cherries
}
我希望的是
% puts $mylist
apples bananas peaches cherries
%
我得到的是
% puts $mylist
apples
bananas
peaches
cherries
%
此外,实际返回列表的长度为1,这显然不是我想要的。
答案 0 :(得分:2)
有些人更喜欢使用{*}
expansion operator的习惯用法,很好地避免了反斜杠:
% set mylist [list {*}{
apples
bananas
peaches
cherries
}]
apples bananas peaches cherries
% puts $mylist
apples bananas peaches cherries
答案 1 :(得分:2)
如果您在上面使用了任何列表命令,那么您将拥有一个完全可以作为列表接受的字符串。例如:llength $mylist
将产生4。(不是您所报告的1。我想您可能无意中完成了llength mylist
)
如果要将字符串打印为规范列表,即要进行字符串->列表->字符串转换,则必须执行一些操作以强制将其转换为列表。一种方法是使用puts [join $mylist]
。 join命令接受一个列表,因此这会将$ mylist转换为列表,然后再转换为字符串。
如果希望mylist变量实际包含标准格式的列表,则可以在其上使用以下命令之一:
set mylist [lassign $mylist]
set mylist [lrange $mylist 0 end]
但是在大多数情况下,您定义列表的方式对于正常使用是完全可以的。
答案 2 :(得分:1)
这是最简单的方法:
% set mylist [list \
apples \
bananas \
peaches \
cherries \
]
% puts $mylist
apples bananas peaches cherries