値のリスト「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
結果は偽ではなく真でなければなりません
Form=string:to_integer(FormId),
この場合は戻らないと思います313
そして、コードに追加したいもう 1 つのこと
たとえば、Hが"Z000010"に等しい場合FormId=string:substr(H, 2, length(H)),
それは「000010」を返し ます今、最初の整数の前の最初のゼロを削除したいので、1の前に0000を抽出します