【发布时间】:2013-02-12 05:01:58
【问题描述】:
我有一个值列表“Z0010”、“Z0011”、“Z0012”、“Z0013”、“Z0014”、“Z0015”、“Z0016”、“Z0017”、“Z0018”、“Z0019”
我想开发一个在参数中取值的函数
如果作为参数传递的值等于列表中的值,我想在我的函数中进行测试,在这种情况下,它将显示“存在”,否则显示“不存在”
我尝试:
test(Token)->
case get_user_formid_by_token(Token) of
{ok, H} ->
FormId=string:substr(H, 2, length(H)),
Form=string:to_integer(FormId),
case verify (0019,1,Form) of
{ok}->io:format("existe");
{notok}->io:format("not existe")
end;
{error, notfound}-> io:format("qq")
end.
verify(VariableLength,VariableIncrement,FormId)->
lists:map(fun(I) -> if I =:= FormId ->
{ok};
I =/= FormId ->
{notok}
end
end,
lists:seq(0010, VariableLength, VariableIncrement)).
但是当我执行这段代码时,它会显示:
1> model:test("21137900").
** exception error: no case clause matching [{notok},
{notok},
{notok},
{notok},
{notok},
{notok},
{notok},
{notok},
{notok},
{notok}]
in function model:test/1
我现在试试这个解决方案:
get_user_formid_by_token(Token) ->
Q = qlc:q([{X#person.formid} || X <- mnesia:table(person),
X#person.token =:= Token]),
case do(Q) of
[{H}] ->
{ok, H};
[] ->
{error, notfound}
end.
test(Token)->
case get_user_formid_by_token(Token) of
{ok, H} ->
io:format("~s~n",[H]),
FormId=string:substr(H, 5, length(H)),
io:format("~s~n",[FormId]),
Form=string:to_integer(FormId),
io:format("~p~n",[Form]),
lists:member(Form, lists:seq(313, 320, 1));
{error, notfound}-> io:format("qq")
end.
但是当我测试时,我在控制台中有这条消息:
1> model:test("21137900").
Z000313
313
{313,[]}
false
结果应该是 true 而不是 false
我认为 Form=string:to_integer(FormId), 在这种情况下不会返回 313
还有一件事我想在我的代码中添加
例如如果 H 等于 "Z000010" FormId=string:substr(H, 2, length(H)),
它返回“000010” 现在我想消除第一个不为空的整数之前的第一个零,所以 extarct 0000 1之前
【问题讨论】:
标签: erlang