using openser 1.3, is there a way to get a count of how many items there are in an avp variable other than:<br>while ( is_avp_set("$avp(s:fork_uri)") ) <br> {<br> $var(fork_uri_count) = $var(fork_uri_count) + 1 ;
<br> avp_copy("$avp(s:fork_uri)", "$avp(s:fork_uri_rev_order)/d") ;<br> }<br>then if you wanted things in the same order as they were originally you would also have to:<br>while ( is_avp_set("$avp(s:fork_uri_rev_order)") )
<br> {<br> avp_copy("$avp(s:fork_uri_rev_order)", "$avp(s:fork_uri)/d") ;<br> }<br><br>talk about an expensive counting<br><br>Several ways I could see this implimented:<br> New function avp_count("$avp(s:myvar)", "$avp(s:count_result)")
or avp_count("$avp(s:myvar)") where $rc contains the result.<br> is_avp_set("$avp(s:myvar)") where $rc is set to the count, probably best as you could test if exitst and the go right to processing.<br>
avp_check("$avp(s:myvar)", "cn/g") where $rc is set to the count. It could always set $rc to count of found matches
for when the g flag is used.<br>Of course using $rc for is_avp_set() or avp_check() depends on if setting that to non-zero makes a test like if( is_avp_set("$avp(s:myvar)") ) always trigger as false.<br><br>also on getting a count ...
<br><br>another place I need to get a count is how many times a character(s) (or shoot the moon, a regex) occurs in a string.<br>for handeling things like transformations like {s.select,index,seperator}, eg: $(var(findme){
s.select,$var(count),,}) <br> sidenote ... (not sure what values for seperator are valid)<br>a transformation like {s.count,seperator}<br><br>Here is an example of something I was trying to do that would have benifited from knowing the count of seperator.
<br>I think that I got a warning or error when the test for the while indexed past the end of the string.<br><br>xlog("L_INFO", "Original findme list to parse: $avp(s:findme)\n");<br>if ( $avp(s:findme) =~ "\|" )
<br>{<br> $var(findme) = $(avp(s:findme){s.select,0,|}) ;<br> $var(findme_tm_out) = $(avp(s:findme){s.select,1,|}) ;<br> xlog("L_INFO", "This findme has a timeout: $var(findme_tm_out)\n");<br>
}<br>else<br>{<br> $var(findme) = $avp(s:findme) ;<br>}<br>xlog("L_INFO", "findme list to parse: $var(findme)\n");<br>$var(findme_cnt) = 0 ;<br>while ($(var(findme){s.select,$var(findme_cnt),,}{s.len
}) > 0 )<br>{<br> xlog("L_INFO", "Loop $var(findme_cnt), Adding $(var(findme){s.select,$var(findme_cnt),,}) to TO_list\n");<br> $avp(s:TO_list) = $(var(findme){s.select,$var(findme_cnt),,}) ;
<br> $var(findme_cnt) = $var(findme_cnt) + 1 ;<br>}<br><br>can/do $var()'s stack like $avp()'s?<br><br>Thanks<br>Dave<br>