Jueves, 06 de noviembre de 2014

En uno de los campos de batalla del ámbito laboral nos encontramos con el siguiente problema: 

Tenemos un archivo de texto que define una estructura jerárquica (estructura de archivos múltiples REDATAM [1] General-Record-Field) hablando en terminos mundanos General es como la raíz, que puede tener varios registros (Records) y cada registro varios compos (Fields), para ello se me ocurrió hacer una clase de cada sección.

Sin embargo dado a que un campo (Field) pudiera tener varios valores (VL) y ya no quería hacer una clase para algo que solo tiene 2 atributos, mi primera solución fue hacer un arreglo de Strings y para aprovechar el método Sort() de la clase List pensé en esa solución. La idea de usar esta clase es que la aplicación que construye los archivos que definen la estructura (.ddf) se desordenan y la idea es darles el orden correcto según su llave. Aquí un ejemplo de las etiquetas VL's.

ValueLabels=3
VL1=2 No
VL2=9 No especificado
VL3=1 Sí

Como el dato de la llave (el número inicial de la cadena) esta dentro de la cadena, pensé que el método Sort() lo resolvería y para unos casos efectivamente si lo hace. Tenemos una clase que obtiene la parte derecha de este par de valores siendo su delimitador el signo igual (=). Por lo que tendríamos lo siguiente:

Y como vemos pudieramos cantar victoria...

Pero que pasa si tenemos más de 9 valores como es el caso de un catalogo de parentesco.

ValueLabels=14
VL1=1 Jefe(a)
VL2=2 Esposo(a) o compañero(a)
VL3=3 Hijo(a)
VL4=4 Nieto(a)
VL5=5 Yerno/nuera
VL6=6 Hermano(a)
VL7=7 Sobrino(a)
VL8=8 Padre o madre
VL9=9 Suegro(a)
VL10=10 Cuñado(a)
VL11=11 Otros parientes

Aplicaríamos nuevamente la solución...

Pero como podemos ver el ordenamiento no funciona como nosotros deseamos...

Como desarrollador de la vieja guardia empezamos a exprimir y a alucinar hasta las soluciones más descabelladas, pero recordé el Map de Java, que en C# se llama hashtable, que es una combinación de llave-valor que representaría un catalogo como queremos, sin embargo al consultar en nuestro glorioso Google...¡Eureka! nos encontramos con SortedDictionary, que va ordenando conforme va insertando - un agradecimiento al que colocó dicha información ahora si no lo anote.

Solo que con eso tenemos que hacer un método a nuestra clase UtilTexto para extraer los primeros caracteres numéricos Sonrisa. Pero eso será en otro post...diferente a este, digamos que ya quedó, a este método le llamamos ExtraeNumeroParteIzquierda().

.Net tiene ya infinidad de clases con su respectiva funcionalidad en métodos...y aquí la salida de SortedDictionary...

Y pues se ha solucionado otra problemita.

[1] Página de la CELADE, división de Población CEPAL http://www.cepal.org/redatam/
 


Publicado por neofito69 @ 12:50  | .NET - C#
Comentarios (0)  | Enviar
Comentarios