如何将输入作为元组并将其存储在 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/2、io:get_chars/2、io:get_line/1 或io: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 应用程序中检索?