Rev 12038 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 12038 | Rev 13586 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | !if $wims_read_parm!=slib_header |
1 | !if $wims_read_parm!=slib_header |
2 | !goto proc |
2 | !goto proc |
3 | !endif |
3 | !endif |
4 | 4 | ||
5 | slib_parms=2\ |
5 | slib_parms=2\ |
6 | ,[x_1,...,x_n] \ |
6 | ,[x_1,...,x_n] \ |
7 | ,[a_1,...,a_m] |
7 | ,[a_1,...,a_m] |
Line 21... | Line 21... | ||
21 | !reset slib_END1 slib_END |
21 | !reset slib_END1 slib_END |
22 | !distribute items $wims_read_parm into slib_data,slib_w |
22 | !distribute items $wims_read_parm into slib_data,slib_w |
23 | slib_v=!declosing $slib_data |
23 | slib_v=!declosing $slib_data |
24 | slib_w=!declosing $slib_w |
24 | slib_w=!declosing $slib_w |
25 | !if $slib_v$slib_w=$empty |
25 | !if $slib_v$slib_w=$empty |
26 |
|
26 | slib_out=0 |
27 |
|
27 | !exit |
28 | !else |
28 | !else |
29 |
|
29 | slib_v=!sort numeric item $slib_v |
30 |
|
30 | slib_max=!item -1 of $slib_v |
31 |
|
31 | slib_min=!item 1 of $slib_v |
32 |
|
32 | slib_cnt= !itemcnt $slib_v |
33 |
|
33 | slib_cntw=!itemcnt $slib_w |
34 |
|
34 | !if $slib_cntw=2 |
35 |
|
35 | !distribute item $slib_w into slib_b,slib_p |
36 |
|
36 | slib_c=$[ceil(($slib_max-$slib_b)/$slib_p)] |
37 |
|
37 | slib_d=$[min(0,floor(($slib_min-($slib_b))/$slib_p))] |
38 |
|
38 | slib_w=!values $slib_b+x*$slib_p for x=$slib_d to $slib_c |
39 |
|
39 | !endif |
40 |
|
40 | slib_w=!sort numeric item $slib_w |
41 |
|
41 | !if $slib_w=$empty |
42 |
|
42 | slib_N=$[ceil(4*($slib_cnt)^(1/4))] |
43 |
|
43 | slib_w=!values $slib_min+x*$[(($slib_max-($slib_min))/$slib_N)] for x=0 to $slib_N |
44 |
|
44 | !else |
45 |
|
45 | slib_m=!item -1 of $slib_w |
46 |
|
46 | slib_max=$[max($slib_max,$slib_m)] |
47 |
|
47 | slib_m=!item 1 of $slib_w |
48 |
|
48 | slib_min=$[min($slib_min,$slib_m)] |
49 |
|
49 | slib_w=$slib_min,$slib_w,$slib_max |
50 |
|
50 | slib_w= !listuniq $slib_w |
51 |
|
51 | !endif |
52 |
|
52 | slib_cpt=0 |
53 |
|
53 | slib_cntw=!itemcnt $slib_w |
54 |
|
54 | slib_wpointer=2 |
55 | # end est le point de separation |
55 | # end est le point de separation |
56 |
|
56 | slib_end=!item $slib_wpointer of $slib_w |
57 |
|
57 | slib_result= |
58 |
|
58 | !for slib_i=1 to $slib_cnt |
59 |
|
59 | slib_dat=!item $slib_i of $slib_v |
60 |
|
60 | !if $slib_dat<$slib_end or ($slib_dat=$slib_max and $slib_wpointer=$slib_cntw) |
61 | # On est toujours dans le meme intervalle |
61 | # On est toujours dans le meme intervalle |
62 |
|
62 | !advance slib_cpt |
63 |
|
63 | !else |
64 | # Le point de separation franchi |
64 | # Le point de separation franchi |
65 | # creer un nouveau point de separation |
65 | # creer un nouveau point de separation |
66 | :point |
66 | :point |
67 |
|
67 | !advance slib_wpointer |
68 |
|
68 | slib_end=!item $slib_wpointer of $slib_w |
69 |
|
69 | !if $slib_wpointer < $slib_cntw |
70 |
|
70 | slib_end1=!item $[$slib_wpointer] of $slib_w |
71 |
|
71 | !else |
72 |
|
72 | slib_end1=$[$slib_end+1] |
73 | !endif |
- | |
74 | slib_END1=!append item $slib_end1 to $slib_END1 |
- | |
75 | slib_END=!append item $slib_end to $slib_END |
- | |
76 | slib_result=!append item $[$slib_cpt] to $slib_result |
- | |
77 | !ifval $slib_dat>=$slib_end1 |
- | |
78 | slib_cpt=0 |
- | |
79 | !goto point |
- | |
80 | !else |
- | |
81 | slib_cpt=1 |
- | |
82 | !endif |
- | |
83 | !endif |
73 | !endif |
- | 74 | slib_END1=!append item $slib_end1 to $slib_END1 |
|
- | 75 | slib_END=!append item $slib_end to $slib_END |
|
- | 76 | slib_result=!append item $[$slib_cpt] to $slib_result |
|
- | 77 | !ifval $slib_dat>=$slib_end1 |
|
- | 78 | slib_cpt=0 |
|
- | 79 | !goto point |
|
- | 80 | !else |
|
- | 81 | slib_cpt=1 |
|
- | 82 | !endif |
|
- | 83 | !endif |
|
84 |
|
84 | !next slib_i |
85 | #Le dernier intervalle |
85 | #Le dernier intervalle |
86 |
|
86 | slib_result=!append item $[$slib_cpt] to $slib_result |
87 |
|
87 | !if $[$slib_wpointer+1] <=$slib_cntw |
88 |
|
88 | slib_zero=!values 0 for x=$[$slib_wpointer+1] to $slib_cntw |
89 |
|
89 | slib_result=$slib_result,$slib_zero |
90 |
|
90 | !endif |
91 | !endif |
91 | !endif |
92 | slib_out=!trim $slib_result |
92 | slib_out=!trim $slib_result |
93 | slib_out=!line -1 of $slib_out |
93 | slib_out=!line -1 of $slib_out |
94 | slib_out=[$slib_out],[$slib_w], [$slib_END], [$slib_END1] |
94 | slib_out=[$slib_out],[$slib_w], [$slib_END], [$slib_END1] |