Tcl / Tk: Как я могу игнорировать переводы строк при создании списка из столбца данных? - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть один столбец данных, который содержит названия элементов, которые я хотел бы сохранить в списке Tcl. Для удобства чтения я бы хотел оставить каждый элемент на отдельной строке (в этом случае редактирование сценария в будущем будет намного проще для тех, кто следит за мной). Как мне обернуть мой столбец данных в команды / синтаксис Tcl, чтобы он просто брал элемент в каждой строке и формировал список Tcl?

Вот что я пробовал до сих пор:

set mylist {
   apples
   bananas
   peaches
   cherries
}

Я надеялся на

% puts $mylist
apples bananas peaches cherries
%

Что я получаю, это

% puts $mylist

apples
bananas
peaches
cherries

%

Кроме того, длина фактического возвращаемого списка равна 1, что явно не то, что я хочу.

Ответы [ 3 ]

0 голосов
/ 01 ноября 2018

Некоторые предпочитают идиому, использующую оператор расширения {*} , прекрасно избегая обратной косой черты:

% set mylist [list {*}{
   apples
   bananas
   peaches
   cherries
}]
apples bananas peaches cherries
% puts $mylist
apples bananas peaches cherries
0 голосов
/ 02 ноября 2018

У вас есть строка, которая была бы отлично принята в виде списка, если вы использовали какие-либо команды списка. Например: llength $mylist выдаст 4. (Не 1, как вы сообщили. Я думаю, вы, возможно, случайно сделали llength mylist)

Если вы хотите напечатать строку в виде канонического списка, т. Е. Вы хотите преобразовать строку -> список -> строку, вам нужно что-то сделать, чтобы преобразовать ее в список. Одним из способов было бы использовать puts [join $mylist]. Команда join берет список, поэтому он преобразует $ mylist в список, а затем обратно в строку.

Если вы хотите, чтобы переменная mylist фактически содержала список в кананической форме, вы можете использовать одну из следующих команд:

set mylist [lassign $mylist]

set mylist [lrange $mylist 0 end]

Но в большинстве случаев способ определения списка идеально подходит для обычного использования.

0 голосов
/ 01 ноября 2018

Вот самый простой способ сделать это:

% set mylist [list \
apples \
bananas \
peaches \
cherries \
]

% puts $mylist
apples bananas peaches cherries
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...