Date range and match specification syntax
Ulf Wiger (AL/EAB)
ulf.wiger@REDACTED
Tue Oct 7 16:51:45 CEST 2003
On October 7, 2003, Massimo Cesaro wrote:
>> Try to use Query = ets:fun2ms(fun(X) -> ... end) instead,
>> slightly simpler to use :-)
>You kidding, don't you ?! :-)
>Seriously, I'd like to see a short tutorial or more examples about it.
Here's a short tutorial using ets, and trying to mimic your
problem (the ms_transform manual is daunting, I agree):
Your match spec would look pretty much like this:
fun({_,_,D}) when StartDate =< D, D =< EndDate ->
object()
end
1> ets:new(cdr,[set,public,named_table,{keypos,2}]).
cdr
2> [ets:insert(cdr,{cdr,D,{2003,12,D}}) || D <- lists:seq(1,31)].
[true,
true|...]
3> ets:tab2list(cdr).
[{cdr,28,{2003,12,28}},
{cdr,27,{2003,12,27}},
{cdr,1,{2003,12,1}},
{cdr,14,{2003,12|...}},
{cdr,5,{2003|...}},
{cdr,16,{...}},
{cdr,7|...},
{cdr|...},
{...}|...]
4> StartDate = {2003,12,3}.
{2003,12,3}
5> EndDate = {2003,12,17}.
{2003,12,17}
6> P = ets:fun2ms(fun({_,_,D}) when StartDate =< D, D =< EndDate -> object() end).
[{{'_','_','$1'},
[{'=<',{const,{2003,12,3}},'$1'},{'=<','$1',{const,{2003,12,17}}}],
['$_']}]
7> catch ets:select(cdr,P).
[{cdr,10,{2003,12,10}},
{cdr,13,{2003,12,13}},
{cdr,15,{2003,12,15}},
{cdr,11,{2003,12,11}},
{cdr,3,{2003,12,3}},
{cdr,8,{2003,12,8}},
{cdr,12,{2003,12,12}},
{cdr,4,{2003,12,4}},
{cdr,14,{2003,12,14}},
{cdr,5,{2003,12,5}},
{cdr,16,{2003,12,16}},
{cdr,7,{2003,12,7}},
{cdr,6,{2003,12,6}},
{cdr,9,{2003,12,9}},
{cdr,17,{2003,12,17}}]
8>
More information about the erlang-questions
mailing list