close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 14 years ago

Last modified 14 years ago

#1171 closed enhancement

TableColumns() — at Initial Version

Reported by: Javier Gallardo Owned by: Víctor de Buen Remiro
Priority: lowest Milestone: Mantainance
Component: Various Version: head
Severity: trivial Keywords:
Cc:

Description

La función ahora permite más de tres campos por fila.


Set TableColumns(Anything qry_OR_cto){

Real enOtroCaso = 1;

Text qry_OR_cto.gram = Grammar(qry_OR_cto);

Set ctoDatos = Case(
------------

qry_OR_cto.gram=="Text",
DBTable(qry_OR_cto),

------------

qry_OR_cto.gram=="Set",
qry_OR_cto,

------------

enOtroCaso,

{

WriteLn("<E>ERROR TableColumns: gramática de qry_OR_cto, '"+

qry_OR_cto.gram +
"' no contemplada</E>");

Empty

});

---------------------------
Text toText(Anything algo){
---------------------------

""<< algo

};
---------------------------

---------------------------
Real posicion(Set cto, Text elto){
---------------------------

Real card = Card(cto);
Real cont = Copy(1);
Text elto_i = Copy(cto[cont]);
Real condicion = And(elto_i!=elto, LT(cont, card));

Real While(condicion,
{

Real (cont := cont+1);
Text (elto_i := Copy(cto[cont]));
Real (condicion := And(elto_i!=elto, LT(cont, card)));
1

});
If(elto_i==elto, Copy(cont), 0)

};
---------------------------

Real card = Card(ctoDatos);

Set indices = {

Set c01 = Extract(ctoDatos, 2);
Set c02 = For(1, card, Text(Real i){

toText(c01[i][1])

});
Set c03 = Unique(c02);
Sort(c03, Real(Text t1, Text t2){ Compare(t1, t2) })

};

Set prefijos = {

Set c01 = Extract(ctoDatos, 1);
Set c02 = For(1, card, Text(Real i){

toText(c01[i][1])

});
Set c03 = Unique(c02);
Sort(c03, Real(Text t1, Text t2){ Compare(t1, t2) })

};

Set prefijos_indices = For(1, Card(indices), Set(Real i){

Set cto = For(1, Card(prefijos), Text(Real j){ Copy("") });
cto

});

Set EvalSet(ctoDatos, Real(Set reg){

Text reg_pre = toText(reg[1]);
Text reg_ind = toText(reg[2]);
Text reg_dat = {

Set subCto = ExtractByIndex(reg, Range(3, Card(reg), 1));
If(Eq(Card(subCto), 1),

toText(subCto[1]),
toText(subCto)

)

};

Real pos_i = posicion(indices, reg_ind);
Real pos_j = posicion(prefijos, reg_pre);
Text elto = reg_dat;
Text (prefijos_indices[pos_i][pos_j] := Copy(elto));

1

});

Set ctoIndices = EvalSet(indices, Set(Text t){ SetOfText(t) });

Set ctoPrefijos = SetOfSet(SetOfText("indices / prefijos") << prefijos);

ctoPrefijos << (ctoIndices | prefijos_indices)

};

PutDescription("
Dada una consulta que devuelve al menos tres campos, crea un conjunto-tabla
donde las columnas serán el primer campo (prefijo), y las filas serán el
segundo (índice).
La primera fila del Set resultante tendrá los nombres de los prefijos.
La primera columna del Set resultante tendrá los nombres de los índices.
¡¡¡ TODO lo que se devuelve dentro del conjunto es de tipo Text !!!, por lo
tanto, el orden que se sigue tanto en los prefijos como en los índices es el
lexicográfico.
Las máscaras utilizadas en FormatReal() y en FormatDate() son las que usa Tol
por defecto.
", TableColumns);

Change History (0)

Note: See TracTickets for help on using tickets.