Posted to tcl by Stu at Wed Nov 30 14:50:10 GMT 2011view raw

  1. # Lgetrows --
  2. #
  3. # Returns a list of lists matched
  4. # based on criteria.
  5. #
  6. # Arguments:
  7. # list
  8. # value
  9. # index
  10. # args
  11. #
  12. # Results:
  13. # list
  14. #
  15. proc netinfo::Lgetrows {list value index args} {
  16. set args [linsert $args 0 $value $index]
  17.  
  18. set single [expr {
  19. [lsearch -glob $args {*\**}] == -1 &&
  20. [lsearch -glob $args {*\?*}] == -1 &&
  21. [lsearch -glob $args {*\[*\]*}] == -1
  22. }]
  23.  
  24. set rows {}
  25. foreach row $list {
  26. set ok 1
  27. foreach {val ind} $args {
  28. if {[lsearch -glob [lindex $row $ind] $val] == -1} {
  29. set ok 0
  30. break
  31. }
  32. }
  33. if {$ok} {
  34. if {$single} {
  35. return $row
  36. }
  37. lappend rows $row
  38. }
  39. }
  40. return $rows
  41. }
  42. ###