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

我在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.
我的目标是只显示“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.