source: tol/toltcl/doc/toltableset.txt @ 85745be

1941-docker-image-to-testdevel
Last change on this file since 85745be was 6d7779d, checked in by Jorge Pérez <josp.jorge@…>, 18 years ago

initial import

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

  • Property mode set to 100755
File size: 6.0 KB
Line 
1/* mode: -*- c++ -*- */
2-------------------- Especificacion TCL -------------------------------
3
4tol::tableset create tablename SetReference
5 
6tol::tableset destroy tablename
7
8 
9tablename info
10
11 name
12
13    nombre de la referencia del conjunto
14 
15 datarows
16
17    numero de filas (subconjuntos) incluyendo conjuntos vacios. La
18    existencia de un conjunto vacio == el conjunto no es graficable, a
19    menos que se pueda escojer como eje X al conjunto de indices
20    [0..row-1], pero esto ya se trataria en tcl.  columns: numero de
21    columnas, correspondiente al cardinal del subconjunto de mayor
22    cantidad de elementos.
23
24
25 rowsnames
26 
27    lista con los nombres de los elementos del conjunto.
28
29 header
30
31    como se determino el header de las columnas, puede ser : struct|
32    row | generic. En caso de retornar firstRow tambien retorna
33    la cantidad de columnas explicitas(ya me explicare mejor).
34
35 
36 columns
37
38    Para cada columna retoran una lista con su informacion, que
39    incluye:
40
41      name     
42        nombre de la columna
43
44      type
45
46        tipo de datos (inferido) de la columna. Hay que definir,
47        por ahora tenemos general|real|date. Si tipo es real entonces
48        contendra informacion adicional sobre reales extendidos como ? o
49        INF: {unknown yes|no INF yes|no}.
50
51        eje,  {type real unknown yes INF no} 
52
53 grpname data get i j
54   
55    retorna el elemento que esta en la fila i column j
56 
57 grpname data apply all script
58
59   - ejecuta 'script' para cada elemento de la tabla
60   - concatena al script 'i j value' (fila, columna y valor)
61 
62 grpname data apply row idx script
63
64   - ejecuta 'script' para cada elemento de la fila 'idx'
65   - concatena al script 'j value' (columna valor)
66
67 grpname data apply column idx script
68
69   - ejecuta 'script' para cada elemento de la columna 'idx'
70   - concatena al script 'i value' (fila valor)
71
72 grpname data column idx
73 
74   retorna los datos de la column idx si. Si el tipo de la columna no
75   es real retorna una lista con todos sus valores. Si el tipo de la
76   columna es real retorna una lista que contiene vectores blt y
77   posiblemente valores desconocidos,  ej, {Y1 Y2 {} {} Y3 *INF*
78
79
80 grpname data names
81
82   retorna una lista con los nombres de los subconjuntos que forman el
83   set. Que hacemos cuando algun 'subset' no sea set?, cuando no sea
84   sea estamos asumiendo que es un conjunto de un elemento, asi que
85   siempre tomaremos el name del syntaxobject. Aunque, por que no
86   retornar esta informacion en el subcomando 'info rows'
87
88------------------- Especificacion implementacion C++ -----------------
89
90JAVIER !!!! vamos a serpara la especificacion del comando en TCL de
91la especificacion de la implementacion en C.
92
93
94
95// Estructura de la información que se puede guardar:
96struct Tol_SetData {
97  int rows
98  int cols
99  header (de donde se ha obtenido)
100  struct Tol_ColumnData {
101    char *name
102    // lista de datos o
103    // lista de vectores Blt
104    (definir esto en C)
105    int type
106  }
107}
108
109// ¿Como guardo los datos?
110//  A) como listas siempre y si me lo piden como vectores lo transformo
111//  B) como listas y siempre que pueda como vectores (el saber si puedo
112// o no lo se al final de recorrer el conjunto
113 
114}
115
116
117/*
118 El numero de filas lo obtengo del set directamente. (Si los nombres
119 de las columnas se obtienen del primer subconjunto,¿le quitamos uno
120 al numero de filas? SI
121
122 Si tiene estructura el numero de filas, columnas y el tipo me lo da la
123 propia estructura, no tengo apenas problemas.
124 
125
126 El número de columnas no me lo da el primer subconjunto. --> Es un
127 problema para ir añadiendo a la estructura Tol_ColumnData, p.ejem:
128
129  A   B   C
130  3   4   5
131  4   3
132  6   2   1   5
133  1   3   3
134
135--> <--
136 Si en TOL puedo pedir el numero de elementos que tiene el subconjunto
137 que mas elementos tiene (valga la redundancia) seria genial. NO SE PUEDE
138
139--> Ademas para este conjunto, ¿el nombre de las columnas seria de
140 firstRow: ['A', 'B', 'C', ''] o mixto entre generico y firstRow
141 ['A', 'B', 'C', 'Col4'] ?
142 MIXTO, NO PUEDE HABER UN NOMBRE DE COLUMNA VACIO
143
144
145Algoritmo para recoger datos:
146 
147  //  Cuando se trate cada subConjunto hay que tener en cuenta
148  // que se puede aumentar el número de columnas, en cuyo caso
149  // hay que actualizar la información que se tenga hasta entonces
150  // con vacios (para datos) y con nombres genericos (para nombres
151  // de columna)
152
153  cols  // las columnas que tiene el conjunto
154
155proc Main { } {
156  set structured 1
157  set rowData -1
158  set cols     0
159  set rows  [setRef->subItems]
160
161
162  set sub1Set (Primer subcjto de setRef)
163  set structure [sub1Set->structure]
164  if sub1Set->type == "Text" {
165    GetSubSetInfoAsLabel sub1Set &cols
166    incr rows -1
167    set rowData 0
168  } else {
169    set rowData 0
170    GetSubSetInfoAsData sub1Set &rowData &cols
171  }
172 
173
174  foreach subSet (menos el primero) setRef {
175      set structured [expr structured && (subSet->structure == structure)]
176      GetSubSetInfoAsData subSet &rowData &cols
177    }
178  }
179  if structured {
180    if (He cogido inf de header) {
181      meterla como datos
182    }
183  }
184  elseif (No he cogido inf de header) {
185    Meter nombres genericos
186  }
187}
188 
189 
190  proc GetSubSetInfoAsData (subSet &rowData &cols) {
191    set col 0
192    foreach it subSet {
193      if (col > cols ) {
194        set cols col
195        UpdateInfoRowsAnteriores
196      }
197      if (it->Type == "Real") {
198         if (it->Data == '?')  {
199           SetColType col Real?
200         } elseif (it->Data == Inf) {
201           SetColType col RealInf
202         } else {
203           SetColType col Real
204         }
205      } else {
206        SetColType col it->Type
207      }
208      SetColData col rowData it->Data
209      incr col
210    }
211    for (i=col; col < cols; i++) {
212      SetColData i rowData ""
213    }
214    incr rowData
215  }
216
217
218  proc UpdateInfoRowsAnteriores {
219    //Para cada columna que ya exista ir introduciendo vacios hasta llegar
220    //al numero de fila actual.
221  }
222
223
224  proc GetSubSetInfoAsLabel (subSet &cols) {
225    set col 0
226    foreach it subSet {
227      SetColName col it
228      incr col
229    }
230    set cols col
231  }
232
233
234 
235  SetColData col row data
236  SetColType col type
237  SetColName col name
Note: See TracBrowser for help on using the repository browser.