[erlang-questions] searching in an ETS table for substring

Hynek Vychodil hynek@REDACTED
Sat Feb 11 20:25:26 CET 2012


This approach seems work as well:

ets:select(T, [{{"er"++'$1','_'}, [], ["er"++'$1']}]).
["erring","ericsson","erlang"]

On Sat, Feb 11, 2012 at 4:19 PM, Steve Vinoski <vinoski@REDACTED> wrote:
> On Sat, Feb 11, 2012 at 8:28 AM, Avinash Dhumane <avinash@REDACTED> wrote:
>> I am learning Erlang, and I must be doing something wrong here; please
>> correct me! Thanks.
>>
>> avinash@REDACTED:~$ erl
>> Erlang R14B02 (erts-5.8.3) [source] [smp:2:2] [rq:2] [async-threads:0]
>> [kernel-poll:false]
>>
>> Eshell V5.8.3  (abort with ^G)
>> 1>  T=ets:new(test, [set]).
>> 16400
>> 2>  ets:insert(T, {"erlang", 1}).
>> true
>> 3>  ets:insert(T, {"ericsson", 2}).
>> true
>> 4> ets:insert(T, {"erring", 3}).
>> true
>> 5>
>> 5> ets:insert(T, {"ejection", 4}).
>> true
>> 6>  ets:insert(T, {"emersion", 5}).
>> true
>> 7> ets:select(T, [{{'$1', '_'}, [], ['$$']}]).
>> [["erring"],
>>  ["emersion"],
>>  ["ericsson"],
>>  ["erlang"],
>>  ["ejection"]]
>> 8> ets:select(T, [{{'$1', '_'}, [{'==', '$1', "er"++'_'}], ['$$']}]).
>> []
>> 9> ets:select(T, [{{'$1', '_'}, [{'=:=', '$1', "er"++'_'}], ['$$']}]).
>> []
>> 10> ets:select(T, [{{'$1', '_'}, [{'=', '$1', "er"++'_'}], ['$$']}]).
>> ** exception error: bad argument
>>      in function  ets:select/2
>>         called as ets:select(16400,
>>
>> [{{'$1','_'},[{'=','$1',[101,114|'_']}],['$$']}])
>> 11>
>
> One approach:
>
> 1> ets:select(T, [{{"er"++'_','_'}, [], ['$_']}]).
> [{"erring",3},{"ericsson",2},{"erlang",1}]
>
> But note this returns entire objects, not just keys. Still, I think
> that's what Martin might have wanted, since it matches what his
> original SQL select example would do.
>
> Another approach, fetching just the keys:
>
> 2> MS = ets:fun2ms(fun({K,_}) when is_list(K), hd(K) =:= $e, hd(tl(K))
> =:= $r -> K end).
> [{{'$1','_'},
>  [{is_list,'$1'},
>   {'=:=',{hd,'$1'},101},
>   {'=:=',{hd,{tl,'$1'}},114}],
>  ['$1']}]
> 3> ets:select(T, MS).
> ["erring","ericsson","erlang"]
>
> This approach can work OK if you're matching a prefix of just 2 or 3
> characters, but could get tedious beyond that.
>
> --steve
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions



-- 
Hynek Vychodil
BI consultant

GoodData
náměstí 28. října 1104/17, 602 00, Brno - Černá Pole
Office:   +420 530 50 7704
E-mail:  hynek@REDACTED
Web:     www.gooddata.com



More information about the erlang-questions mailing list