Mezclando listas anidadas con D3 – Uso de READNEXT

En ocasiones exigencias del guión obligan a trabajar con listas dentro de listas; esto, provoca que tengamos que controlar muy ben de donde tira nuestro readnext si no queremos sorpresas y errores de logica.

Me explico, supongamos que hacemos un select de un fichero y luego del resultado que recorremos secuencialmente debemos hacer un nuevo select para recorrer secuencialmente otra lista. Que lio no !!!

Pondre un ejemplo mas claro. Imaginar que tenemos que sacar una lista de colores grbada previamente y que de cada color de la lista debemos sacar los articulos que tienen ese color con un selecc de articulos con color =»X» para sacar finalmente un listado de ellos.

Si hacemos este codigo : (pongo solo las lineas afectadas)

execute «lista colores»
loop
readnext color
execute «selecc articulos con color =»:color
loop
readnext itemarticulo
….. sentencias con itemarticulo …
until eof do repeat
until eof do repeat

Tendremos el problema de que se mezclan los readnext de ambas sentencias selecc y no funcionara correctamente, para eso usamos el asignar a una variable una lista de forma que podamos usarla focalizada en el readnext.

Usamos la sentencia rntlist de execute y la cosa quedaria asi, mas o menos :

execute «lista colores» rtnlist lista1
loop
readnext color from lista1
execute «selecc articulos con color =»:color rtnlist lista2
loop
readnext itemarticulo from lista2
….. sentencias con itemarticulo …
until eof do repeat
until eof do repeat

De esa sencilla forma se pueden anidar listas y ejecuciones selecc sin preocuparnos de que se mezclen punteros y por tanto resultados.