source: tol/tolbaseBLT/lib/byswidget/bfunctions/bflist.tcl

devel
Last change on this file was 56ade3b, checked in by Jorge Pérez <josp.jorge@…>, 10 years ago

fixes #1932, se ha creado la rama trunk/tolbaseBLT copia de trunk/tolbase

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@7330 be4846ae-f051-483a-831f-b64e7d08527f

  • Property mode set to 100644
File size: 5.8 KB
Line 
1#/////////////////////////////////////////////////////////////////////////////
2# FILE    : bflist.tcl
3# PURPOSE : This file
4#/////////////////////////////////////////////////////////////////////////////
5
6#/////////////////////////////////////////////////////////////////////////////
7proc ListReplace {list value newValue} {
8# PURPOSE:
9#
10# PARAMETERS:
11#   lst ->
12#   value ->
13#   newValue ->
14#
15# RETURN:
16#
17#/////////////////////////////////////////////////////////////////////////////
18  set idx -1;
19  if [string equal $value $newValue] {
20    return $list
21  }
22  while { [set idx [lsearch $list $value]] != -1} {
23    set list [lreplace $list $idx $idx $newValue]
24  }
25  return $list
26}
27
28#/////////////////////////////////////////////////////////////////////////////
29proc blremove {_L args} {
30# PURPOSE:
31#
32# PARAMETERS:
33#   _L ->    nombre completo de la lista
34#   args ->  argumentos a borrar
35#
36# RETURN:
37#
38#/////////////////////////////////////////////////////////////////////////////
39  upvar $_L L
40  foreach i $args {
41    set pos [lsearch $L $i] ;# might be -1 if not found...
42    set L [lreplace $L $pos $pos] ;# ... but that's fine
43  }
44}
45
46#/////////////////////////////////////////////////////////////////////////////
47proc lunion {args} {
48# PURPOSE:
49#
50# PARAMETERS:
51#   args ->
52#
53# RETURN:
54#
55#/////////////////////////////////////////////////////////////////////////////
56  switch [llength $args] {
57    0 {
58      return {}
59    }
60    1 {
61      return [lindex $args 0]
62    }
63    default {
64      foreach set $args {
65        foreach e $set {
66          set tmp($e) .
67        }
68      }
69      return [array names tmp]
70    }
71  }
72}
73
74#/////////////////////////////////////////////////////////////////////////////
75proc lreverse {_L} {
76# PURPOSE:
77#
78# PARAMETERS:
79#   _L ->
80#
81# RETURN:
82#
83#/////////////////////////////////////////////////////////////////////////////
84  set res {}
85  set i [llength $_L]
86  while {$i} {lappend res [lindex $_L [incr i -1]]}
87  set res
88}
89
90#/////////////////////////////////////////////////////////////////////////////
91proc ljoin {_L1 _L2 sep {empty 0} {tab 0}} {
92#
93# PURPOSE: Junta las dos variables en un elemento separandolos por los
94#          caracteres que se le indique
95#
96# PARAMETERS:
97#   _L1 -> Primera lista
98#   _L2 -> Segunda lista
99#   sep -> Caracteres de separacion
100#   empty -> Introducimos un primer elemento vacio. 0:False, 1:True
101#   tab -> Tabulamos los elementos. 0:False, 1:True
102#
103# RETURN:
104#
105#///////////////////////////////////////////////////////////////////////////
106  set lista {}
107  if {$empty} {
108    set lista {""}
109  }
110
111  foreach i $_L1 j $_L2 {
112    if {$tab} {
113      set len [expr 10 - [string length $i]]
114      set elem [format "%-*s %s %s" $len $i $sep $j]
115    } else  {
116      set elem "$i$sep$j"
117    }
118    lappend lista $elem
119  }
120  return $lista
121}
122
123#/////////////////////////////////////////////////////////////////////////////
124proc lsub {_L1 _L2} {
125#
126# PURPOSE: Devuelve el resultado de restar a _L1 _L2
127#
128# PARAMETERS:
129#   _L1 -> Primera lista
130#   _L2 -> Segunda lista
131#
132# RETURN: La listta resultado de la resta
133#
134#/////////////////////////////////////////////////////////////////////////////
135 
136  foreach i $_L2 {
137    set ini [lsearch $_L1 $i]
138    if { $ini != -1 } {
139          set _L1 [lreplace $_L1 $ini $ini ]
140    }
141  }
142
143  return $_L1
144}
145
146#/////////////////////////////////////////////////////////////////////////////
147proc ltraspose {_L} {
148#
149# PURPOSE: transpone los valores de una lista.
150#   NOTA. SOLO FUNCIONA SI LAS LISTAS SON TODAS DE LA MISMA DIMENSION O LA
151#   PRIMERA ES MAYOR O IGUAL QUE LAS DEMAS
152#
153# PARAMETERS:
154#   _L -> lista original
155#
156# RETURN: la lista transpuesta
157#
158#///////////////////////////////////////////////////////////////////////////
159  # lista a devolver
160  set lst ""
161  # comprobamos que la lista no esta vacia, numero de columnas resultado
162  set r [llength $_L]
163  if {$r} {
164    #set c [llength [lindex $_L $row]]
165    set c [llength [lindex $_L 0]]
166    if {$c} {
167      for {set col 0} {$col < $c} {incr col} {
168        set laux ""
169        for {set row 0} {$row < $r} {incr row} {
170          set dt [lindex [lindex $_L $row] $col]
171          lappend laux $dt
172          #append [lindex $lst $row] [lindex [lindex $_L $row] $col]
173            }
174        lappend lst $laux
175      }
176    }
177  }
178  return $lst
179}
180
181#/////////////////////////////////////////////////////////////////////////////
182proc lfilter {_L first skip} {
183#
184# PURPOSE: Filtra por indice los valores de una lista:
185#
186# PARAMETERS:
187#   _L -> lista original
188#   first -> Primer valor que se devuelve, a partir de 1.
189#   skip -> Número de valores que no se muestran en cada salto
190#
191# RETURN: la lista transpuesta
192#
193#///////////////////////////////////////////////////////////////////////////
194  # lista a devolver
195  set lst ""
196  incr skip
197  # comprobamos que la lista no esta vacia, numero de columnas resultado
198  set r [llength $_L]
199  if {$r} {
200    for {set i $first} {$i < $r} {incr i $skip} {
201      lappend lst [lindex $_L $i]
202    }
203  }
204  return $lst
205}
206
207#/////////////////////////////////////////////////////////////////////////////
208proc lmaximo {_L} {
209#
210# PURPOSE: Busca el elemento mayor de la lista
211#
212# PARAMETERS:
213#   _L -> lista original
214#
215# RETURN: el elemento mayor
216#
217#///////////////////////////////////////////////////////////////////////////
218  # elemento
219  set e [lindex $_L 0]
220  # comprobamos que la lista no esta vacia, numero de columnas resultado
221  foreach ele $_L {
222    if {[expr $ele>$e]} {
223      set e $ele
224    }
225  }
226  return $e
227}
228
229#/////////////////////////////////////////////////////////////////////////////
230proc lminimo {_L} {
231#
232# PURPOSE: Busca el elemento menor de la lista
233#
234# PARAMETERS:
235#   _L -> lista original
236#
237# RETURN: el elemento menor
238#
239#///////////////////////////////////////////////////////////////////////////
240  # elemento
241  set e [lindex $_L 0]
242  # comprobamos que la lista no esta vacia, numero de columnas resultado
243  foreach ele $_L {
244    if {[expr $ele<$e]} {
245      set e $ele
246    }
247  }
248  return $e
249}
Note: See TracBrowser for help on using the repository browser.