提取子字符串

时间:2012-12-28 10:58:20

标签: 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};
        [] ->
            {error, notfound}
    end.

这是执行此函数时的结果示例:

{ok,{"07049200"}}

我的目标是在没有{}

的情况下显示“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"})

2 个答案:

答案 0 :(得分:3)

{"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.

答案 1 :(得分:0)

试试这个:

test3()->

    case get_user_cin_by_token("93090612") of
        {ok, {H}}-> io:format("\"~s\"~n",[H]);
        {error, notfound}->io:format("error")
end.