ok here ya go try this out....
;Usage hdel.wilddata -bN <name> <matchtext>
;
; Deletes hashtable Items who's data matches the matchtext given.
;
; -bN : N being a number 1 or greater (default 10),
; N represents the point where a simple loop is no longer used to remove matched data items
; ie: if N is 5 and there are only 3 data matched items then a simple loop is used
; if N is 10 and there are 15 data matched items then the hsave/filter method is used.
;
alias hdel.wilddata {
;
; Pharse command line phase
;
var %breakpoint = 10
if (-* !iswm $1) {
var %hdel.wilddata.hashtable = $1
var %hdel.wilddata.matchtext = $2-
}
else {
if ($calc($mid($1,$calc($poscs($1,b) + 1))) isnum 1-) { var %breakpoint = $v1 }
var %hdel.wilddata.hashtable = $2
var %hdel.wilddata.matchtext = $3-
}
;
; Do the hdel phase
;
if (((%hdel.wilddata.hashtable != $null) && (%hdel.wilddata.matchtext != $null)) && ($hfind(%hdel.wilddata.hashtable,%hdel.wilddata.matchtext,0,w).data)) {
if ($v1 > 0) {
if ($v1 == $hget(%hdel.wilddata.hashtable,0).item) {
;
; Matchtext matched entire table
;
hdel -w %hdel.wilddata.hashtable *
}
elseif ($v1 < %breakpoint) {
;
; Simple loop method
;
while ($hfind(%hdel.wilddata.hashtable,%hdel.wilddata.matchtext,1,w).data) { hdel %hdel.wilddata.hashtable $v1 }
}
else {
;
; Hsave/filter method
;
set %hdel.wilddata.hashtable %hdel.wilddata.hashtable
hsave -ou %hdel.wilddata.hashtable hdel.wilddata.tempfile.txt
window -hn @hdel.wilddata.hidden.window
loadbuf -r @hdel.wilddata.hidden.window hdel.wilddata.tempfile.txt
hsave -oun %hdel.wilddata.hashtable hdel.wilddata.tempfile.txt
filter -fkn hdel.wilddata.tempfile.txt hdel.wilddata.filter.alias %hdel.wilddata.matchtext
window -c @hdel.wilddata.hidden.window
unset %hdel.wilddata.hashtable
}
}
}
}
alias -l hdel.wilddata.filter.alias { hdel %hdel.wilddata.hashtable $line(@hdel.wilddata.hidden.window,$calc(-1 + 2 * $1)) }
it uses 3 possable methods
(1) if it notices you wildcarded the whole hashtabe, it just erases the whole table
(2) It uses a simple loop if there isnt many to do, default below 10 to do, or -bN and u can set that number.
(3) other wise it uses a Hsave & Filter combo
If anyone is interested but cant follow it i can explain.