Erlang Как получить строку из списка - PullRequest
2 голосов
/ 14 января 2011

Как я могу преобразовать список в строку в эрланге?

Мой список просмотра:

[{{19,59,51}, {2011,1,14},"fff"}, {{19,59,47}, {2011,1,14}, "ASDfff"}]

Спасибо.

Ответы [ 2 ]

4 голосов
/ 14 января 2011

Очень простая вещь будет

List = [{{19,59,51},{2011,1,14},"fff"},
        {{19,59,47},{2011,1,14},"ASDfff"}],
IOList = io_lib:format("~w", [List]),
FlatList = lists:flatten(IOList),

но поскольку это временные метки, которые вы, возможно, захотите отформатировать лучше, что-то вроде

FormattedIOLists =
   [ io_lib:format("~4..0B-~2..0B-~2..0B ~2..0B:~2..0B:~2..0B ~s",
                   [YYYY,M,D, HH,MM,SS, Comment])
     || {{HH,MM,SS},{YYYY,M,D},Comment} <- List ],
FormattedFlatLists =
   [ lists:flatten(io_lib:format("~4..0B-~2..0B-~2..0B ~2..0B:~2..0B:~2..0B ~s",
                                 [YYYY,M,D, HH,MM,SS, Comment]))
     || {{HH,MM,SS},{YYYY,M,D},Comment} <- List ],

может лучше соответствовать вашему счету.

Для быстрого и грязного интерактивного вывода на оболочку,

9> [ io:format("~4..0B-~2..0B-~2..0B ~2..0B:~2..0B:~2..0B ~s~n", [YYYY,M,D, HH,MM,SS, Comment]) || {{HH,MM,SS},{YYYY,M,D},Comment} <- List ].                 
2011-01-14 19:59:51 fff
2011-01-14 19:59:47 ASDfff
[ok,ok]
10> lists:foreach(fun({{HH,MM,SS},{YYYY,M,D},Comment}) -> io:format("~4..0B-~2..0B-~2..0B ~2..0B:~2..0B:~2..0B ~s~n", [YYYY,M,D, HH,MM,SS, Comment]) end, List).
2011-01-14 19:59:51 fff
2011-01-14 19:59:47 ASDfff
11> 

Обратите внимание, что в большинстве случаев создание рекурсивных списков списков (iolists) гораздо лучше, чем выравнивание этих iolists. Большинство функций вывода напрямую принимают iolists для выходных данных, поэтому вы ничего не получите, сгладив списки до того, как произойдет фактический вывод.

1 голос
/ 14 января 2011

Может быть, просто:

 io_lib:format("~w", [[{{19,59,51},{2011,1,14},"fff"},{{19,59,47},{2011,1,14},"ASDfff"}]]).
...