Erlang 提取子字符串
我在erlang中开发此函数:Erlang 提取子字符串,erlang,Erlang,我在erlang中开发此函数: get_user_cin_by_token(Token) -> Q = qlc:q([{X#person.idcard} || X <- mnesia:table(person), X#person.token =:= Token]), case do(Q) of [H] -> {ok, H}; [] -> {er
get_user_cin_by_token(Token) ->
Q = qlc:q([{X#person.idcard} || X <- mnesia:table(person),
X#person.token =:= Token]),
case do(Q) of
[H] ->
{ok, H};
[] ->
{error, notfound}
end.
我的目标是只显示“07049200”,而不显示{}
我使用此功能进行测试:
test3()->
case get_user_cin_by_token("93090612") of
{ok, H}-> G=string:substr(H, 2, length(H)-1),
io:format("~s~n",[G]);
{error, notfound}->io:format("error")
end.
但这一错误并不令人满意:
** exception error: bad argument
in function length/1
called as length({"07049200"})
{“07049200”}
不是字符串;这是一个元组。因此,您可以通过模式匹配来“解压”它:{H}={“07049200”}
将导致H=07049200
在原始代码中,您可以执行以下操作:
get_user_cin_by_token(Token) ->
Q = qlc:q([{X#person.idcard} || X <- mnesia:table(person),
X#person.token =:= Token]),
case do(Q) of
[{H}] ->
{ok, H};
[] ->
{error, notfound}
end.
get\u user\u cin\u by\u token(token)->
Q=qlc:Q({X#person.idcard}|X
{好的,H};
[] ->
{错误,未找到}
结束。
试试这个:
test3()->
case get_user_cin_by_token("93090612") of
{ok, {H}}-> io:format("\"~s\"~n",[H]);
{error, notfound}->io:format("error")
end.
我使用您的代码并使用以下代码进行测试:它显示:07049200,但我喜欢显示:“07049200”如何将元组转换为字符串,而不是使用
{X#person.idcard}
在您的QLC查询中,尝试使用X#person.idcard
,这样它就不会被包装在单个元素元组中。这绝对是解决问题的最简单方法。这种包装完全没有必要。
test3()->
case get_user_cin_by_token("93090612") of
{ok, {H}}-> io:format("\"~s\"~n",[H]);
{error, notfound}->io:format("error")
end.