List 要列出的元组,其中包含多个元素,这些元素最初在Erlang中由\r\n分隔

List 要列出的元组,其中包含多个元素,这些元素最初在Erlang中由\r\n分隔,list,ftp,erlang,tuples,List,Ftp,Erlang,Tuples,我正在写一个程序,它可以获取FTP服务器中的文件列表。 所以它是这样开始的: inet_parse:address(IP), inets:start(), {ok, Pid} = inets:start(ftpc, [{host, IP}]), ftp:user(Pid, "anonymous", "lol@lol.com"), ftp:pwd(Pid), Content = ftp:ls(Pid), 7> Content = ftp:ls(Pid). {ok,"-rw-r--r--

我正在写一个程序,它可以获取FTP服务器中的文件列表。 所以它是这样开始的:

inet_parse:address(IP),
inets:start(),
{ok, Pid} = inets:start(ftpc, [{host, IP}]),
ftp:user(Pid, "anonymous", "lol@lol.com"),
ftp:pwd(Pid),
Content = ftp:ls(Pid),
7> Content = ftp:ls(Pid).
{ok,"-rw-r--r--    1 21       21              0 Oct 14 21:47 bar\r\ndrwxr-xr-x    2 21       21           4096 Oct 14 21:47 baz\r\n-rw-r--r--    1 21       21              0 Oct 14 21:47 foo\r\nlrwxrwxrwx    1 1000     10             21 Sep 10 14:22 musique -> /home/foo/musique\r\n"}
内容变量是一个元组,返回如下内容:

inet_parse:address(IP),
inets:start(),
{ok, Pid} = inets:start(ftpc, [{host, IP}]),
ftp:user(Pid, "anonymous", "lol@lol.com"),
ftp:pwd(Pid),
Content = ftp:ls(Pid),
7> Content = ftp:ls(Pid).
{ok,"-rw-r--r--    1 21       21              0 Oct 14 21:47 bar\r\ndrwxr-xr-x    2 21       21           4096 Oct 14 21:47 baz\r\n-rw-r--r--    1 21       21              0 Oct 14 21:47 foo\r\nlrwxrwxrwx    1 1000     10             21 Sep 10 14:22 musique -> /home/foo/musique\r\n"}
我知道我可以将此元组转换为列表,但我想知道是否可以获取每个元素(由a分隔),以便可以单独访问它们(例如,为了将它们保存在数据库中)。
再次感谢。

有一个函数字符串:tokens/2,但是它将字符串作为分隔符列表,因此字符串的每个字符都是分隔符。召唤

1> {ok,S} = {ok,"-rw-r--r--    1 21       21              0 Oct 14 21:47 bar\r\ndrwxr-xr-x    2 21       21           4096 Oct 14 21:47 baz\r\n-rw-r--r--    1 21       21              0 Oct 14 21:47 foo\r\nlrwxrwxrwx    1 1000     10             21 Sep 10 14:22 musique -> /home/foo/musique\r\n"}.
{ok,"-rw-r--r--    1 21       21              0 Oct 14 21:47 bar\r\ndrwxr-xr-x    2 21       21           4096 Oct 14 21:47 baz\r\n-rw-r--r--    1 21       21              0 Oct 14 21:47 foo\r\nlrwxrwxrwx    1 1000     10             21 Sep 10 14:22 musique -> /home/foo/musique\r\n"}
2> Split = string:tokens(S,"\r\n").
["-rw-r--r--    1 21       21              0 Oct 14 21:47 bar",
 "drwxr-xr-x    2 21       21           4096 Oct 14 21:47 baz",
 "-rw-r--r--    1 21       21              0 Oct 14 21:47 foo",
 "lrwxrwxrwx    1 1000     10             21 Sep 10 14:22 musique -> /home/foo/musique"]
3>
string:tokens(Content, "\r\n")
这对你的情况有效,但总的来说,它并不完全符合你的需要。以下是以字符串(多字符)作为分隔符的函数示例:

tokens(Str, Separator) ->
    tokens(Str, Separator, []).

tokens(Str, Separator, Acc) ->
    case string:str(Str, Separator) of
        0 ->
            lists:reverse([Str | Acc]);
        N ->
            Token = string:substr(Str, 1, N-1),
            Str1 = string:substr(Str, N + string:len(Separator)),
            tokens(Str1, Separator, [Token | Acc])
    end.

有一个函数字符串:tokens/2,但是它将字符串作为分隔符列表,因此字符串的每个字符都是分隔符。召唤

string:tokens(Content, "\r\n")
这对你的情况有效,但总的来说,它并不完全符合你的需要。以下是以字符串(多字符)作为分隔符的函数示例:

tokens(Str, Separator) ->
    tokens(Str, Separator, []).

tokens(Str, Separator, Acc) ->
    case string:str(Str, Separator) of
        0 ->
            lists:reverse([Str | Acc]);
        N ->
            Token = string:substr(Str, 1, N-1),
            Str1 = string:substr(Str, N + string:len(Separator)),
            tokens(Str1, Separator, [Token | Acc])
    end.

谢谢帕斯卡,鲁伯和罗伯托:)谢谢帕斯卡,鲁伯和罗伯托:)