Creo que no se puede hacer lookup con arrays de estructuras de datos.

En su lugar puedes utilizar la función C bsearch, que realiza la búsqueda comparando los elementos con una función que tu defines:

      *
      * Necesito qc2le por las funciones C que utiliza el programa
      *
     H bnddir('QC2LE')


     D bsearch         PR              *   extproc('bsearch')
     D   Buscar                        *   value
     D   base                          *   value
     D   numElem                     10U 0 value
     D   tamElem                     10U 0 value
     D   fnComparar                    *   procptr value

  • Buscar sería un puntero al elemento de Dades2 que quieres buscar
  • base sería un puntero a Arrayestruc
  • numElem es %elem( Arrayestruc) (nº de registros)
  • tamElem es %size(Dades2 ) (tamaño de un elemento de la DS).
  • fncomparar es un puntero a una función que has de definir tu para comparar datos con el formato de la DS que utilizas. Por ejemplo, para comparar dos enteros sin signo sería así:
P listaDin_compararUns...                                        
P                 B                   export                     
D                 PI            10I 0                            
D   elemento1                   10U 0 const                      
D   elemento2                   10U 0 const                      
 /free                                                           
                                                                 
  select ;                                                       
    when elemento1 < elemento2 ;                                 
      return -1 ;                                                
    when elemento1 > elemento2 ;                                 
      return 1 ;                                                 
    other ;                                                      
      return 0 ;                                                 
  endsl ;                                                        
                                                                 
 /end-free                                                       
P listaDin_compararUns...   
 
                                    

En tu caso, elemento1 y elemento2 serán DS's (likeds(Arrayestruc) o likeds(Dades2))

Por último, para que la búsqueda funcione,
Arrayestruc ha de estar ordenada según los criterios de la función de comparar que crees. Si inicialmente no es así puedes usar la función C qsort para ordenarla:

D qsort           PR                  extproc('qsort')      
D   base                          *   value                 
D   numElem                     10U 0 value                 
D   tamElem                     10U 0 value                 
D   fnComparar                    *   procptr value
         

Todo esto funciona en V5R2 y posteriores. Puede que también en versiones anteriores, pero no lo he probado.

Espero que te sirva.

Saludos.

Fernando Pérez 

Cerámica Saloni. Dpto. Auditoría y Organización



[EMAIL PROTECTED] escribió:

Hola Foro.
Tengo dos estructuras de datos de este tipo:
     DDades2           ds                  occurs(99)qualified
     DCentral                                5  0
     Dkilos                           6     15  2
     DEuros                                10  2
     Dnomcentral                      35

     D Arrayestruc     DS                  qualified Dim(99)
     D Centralcomp                    5  0
     D Nomcomp                       35
     D Kiloscomp                       10  1 dim(2)
     D Euroscomp                       9  1 Dim(2)
La primera la leo secuencialmente con %occurs, y por cada valor de dades2.central hacer un %lookup y comprobar si existe en la segunda tabla,pero no me deja ni compilar.
Lo hago así:
Index2=%lookup(dades2.central:arrayestruc.centralcomp);
Alguna idea de cómo lo puedo hacer? la primera estructura tiene que ser una DS con occurs, pero la segunda tanto la puedo definir con occurs como Dim.
Gracias

__________________________________________________ Forum.HELP400 es un servicio m&amp;#225;s de NEWS/400. &amp;#169; Publicaciones Help400, S.L. - Todos los derechos reservados http://www.help400.es _____________________________________________________

Para darte de baja visita la siguente URL:
http://listas.combios.es/mailman/listinfo/forum.help400
begin:vcard
fn;quoted-printable:Fernando P=C3=A9rez
n;quoted-printable:P=C3=A9rez;Fernando
org;quoted-printable:;Auditor=C3=ADa y Organizaci=C3=B3n
email;internet:[EMAIL PROTECTED]
tel;work:Ext. 627
x-mozilla-html:TRUE
version:2.1
end:vcard

__________________________________________________
Forum.HELP400 es un servicio m&amp;#225;s de NEWS/400.
&amp;#169; Publicaciones Help400, S.L. - Todos los derechos reservados
http://www.help400.es
_____________________________________________________

Para darte de baja visita la siguente URL:
http://listas.combios.es/mailman/listinfo/forum.help400

Responder a