Tcl / Tk:从一列数据创建列表时如何忽略换行符?

时间:2018-11-01 19:22:57

标签: list tcl

我只有一列数据,其中包含我想存储在Tcl列表中的项目名称。出于可读性考虑,我想将每个项目保留在自己的行中(在这种情况下,它将使以后跟着我的人进行脚本的编辑变得容易得多)。如何将我的数据列包装在Tcl命令/语法中,以便仅将每一行中的项目取走并形成Tcl列表?

这是我到目前为止尝试过的:

set mylist {
   apples
   bananas
   peaches
   cherries
}

我希望的是

% puts $mylist
apples bananas peaches cherries
%

我得到的是

% puts $mylist

apples
bananas
peaches
cherries

%

此外,实际返回列表的长度为1,这显然不是我想要的。

3 个答案:

答案 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