如何将输入作为元组并将其存储在 Erlang 的变量中?

Posted

技术标签:

【中文标题】如何将输入作为元组并将其存储在 Erlang 的变量中?【英文标题】:How to take input as tuple and store it in a variable in Erlang? 【发布时间】:2019-06-24 17:01:04 【问题描述】:

我想从用户那里获取输入并将其存储在一个变量中,以便我将它传递给另一个函数。

提前谢谢..

【问题讨论】:

【参考方案1】:

根据IO module manual,您可以使用io:fread/2io:get_chars/2io:get_line/1io:read/1。 例如:

% get input in desired form in string and you need to parse it.
% each ~ts means that I want a unicode string.
1> ok, [FirstName, LastName] = io:fread("what is your name? ", "~ts ~ts").
what is your name? foo bar
ok,["foo","bar"]
2> FirstName.
"foo"
3> LastName.
"bar"

% get input for defined length in string and you need to parse it:
4> NumberOfCharacters = 7.                                                         
7
5> FullName = io:get_chars("what is your name? ", NumberOfCharacters).             
what is your name? foo bar
"foo bar" 
6> FullName.
"foo bar"

% get whole line as input in string and you need to parse it:
7> FullName2 = io:get_line("what is your name? ").                    
what is your name? foo bar
"foo bar\n"
8> FullName2. 
"foo bar\n"

% get Erlang terms as input:
9> ok, FirstNameAtom, LastNameAtom=FullNameTuple = io:read("what is your name? "). 
what is your name? foo, bar.
ok,foo,bar
10> FirstNameAtom.                                                                     
foo
11> LastNameAtom.                                                                      
bar
12> FullNameTuple.                                                                     
foo,bar

13> ok, Input = io:read("enter text? ").                                             
enter text? 100,c.
ok,100,c
14> Input.
100,c

【讨论】:

谢谢@Pouriya,但最后一个答案是使用 io:read 并且它要求输入多次,这与正常行为的 fread 不同。 read/1 函数需要一个 erlang 表达式,该表达式必须以点结尾(例如 hello。) 现在知道了。谢谢【参考方案2】:
1> ok, [T] = io:fread("enter text: ", "~s").
enter text: 100,c
ok,["100,c"]
2> T.
"100,c"

然后你可以像这样得到需要的值:

5> ok, Tokens, _ = erl_scan:string(T).
ok,['',1,integer,1,100,',',1,atom,1,c,'',1],1
6> Tokens.
['',1,integer,1,100,',',1,atom,1,c,'',1]
7>_, _, A1 = lists:nth(2, Tokens).
integer,1,100
8> _, _, A2 = lists:nth(4, Tokens).
atom,1,c
9> A1, A2
100, c

【讨论】:

感谢您的回答。但是我需要将元组输入作为100,c。上面给了我“100,c”之类的字符串。 更新了我的答案。

以上是关于如何将输入作为元组并将其存储在 Erlang 的变量中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 html 存储在 mysql 数据库中并将其作为 html 在 nodejs 应用程序中检索?

如何将 Python 数据帧存储在内存中并将其作为 excel 附件发送到特定的电子邮件地址?

如何在 Java 中添加并将其存储在数组中之前检查和输入?

Erlang 元组列表与另一个元组列表在单个列表中

如何将输入模式附加到猪的输出

您如何获取 git diff 文件,并将其应用到作为同一存储库副本的本地分支?