Comparar Dos Estructuras

Comparar Dos Estructuras

Postby leandro » Fri Jul 03, 2015 5:42 pm

Buenas Tardes para Todos

Lo que pasa es que he estado intentando comparar las estructuras de dos dbf... lo que pasa es que requiero importar información de un dispositivo móvil. Pero pues antes de realizar el proceso debo comparar que por los menos las dos dbf tenga la estructtura correcta. Lo he intentado de la siguiente manera. Pero Siempre me dice que son diferentes. Que hago mal?

Code: Select all  Expand view
IF FILE (".\dbfs\lamsys\corte.DBF")
  USE ".\dbfs\lamsys\corte" ALIAS d_maestr NEW EXCLUSIVE
  SELE d_maestr
  vEst1 := dbstruct()
  xbrowse(vEst1)
  d_maestr->(DBCloseArea())
ENDIF

vGruta:=cGetFile("*.dbf","Seleccione Archivo")
If !Empty(vGruta)
  If !FILE (vGruta)
    MsgAlert("Archivo No Encontrado"+CRLF+;
             "Intente Nuevamente",oLamcla:mDato)
  Else
    USE &vGruta ALIAS d_corte NEW EXCLUSIVE
    SELE d_corte
    vEst2 := dbstruct()
    xbrowse(vEst2)
    if vEst1==vEst2
      msginfo("Correcto")
    else
      MsgAlert("Dbf Incorrecta, La estructura No"+CRLF+;
               "Coincide Intente Nuevamente",oLamcla:mDato)
    endif
    d_corte->(DBCloseArea())
  Endif
Endif
 


Es mas muestro en pantalla las dos estructuras con un xbrowse() y veo que son exactamente iguales.
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1482
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Comparar Dos Estructuras

Postby hmpaquito » Fri Jul 03, 2015 6:01 pm

Dos cosas,

Primero. Los arrays (tablas, matrices, arreglos, etc), su contenido, *no* se compara con ninguno de los operadores de comparacion. El operador de comparacion aplicado a arrays creo que devuelve .f. si las dos variables no son el mismo array. Para comparar dos arrays, su contenido, hay que "bajar", con una funcion de comparacion (recursiva) a sus elementos. Es probable que aqui en el foro haya alguna.

Segundo. Yo tendria en cuenta que los campos pueden no estar en el mismo orden, tambien que pueden no tener la misma longitud de campo, que por ejemplo en numericos puede no ser ningun problema. Tambien contemplaria la posibilidad de que en algunos casos no importa que los campos no existan en las dos tablas: se copiarian solo los que si existieran: ello posibilitaria un margen para no tener que tener todo actualizado al dia. Evidentemente no hablo de campos clave.

Un saludo.
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Comparar Dos Estructuras

Postby RSalazarU » Sat Jul 04, 2015 1:07 pm

Leandro:

yo uso la siguiente funcion para casos similares
Code: Select all  Expand view

//-----------------------------------------------------------------//
Function aIgual(a1,a2,lExact)
//compara 2 arreglos a1 y a2
//lExact=.T. => LEN(a1)=LEN(a2)
//lExact=.F. => LEN(a1)puede ser <= LEN(a2) y solo comparamos hasta LEN(a1)
local i, lIgual := .T.

   default lExact := .F.

   if valtype(a1)="A" .AND. valtype(a2)="A"

      if LEN(a1)==LEN(a2) .OR. (!lExact .AND. LEN(a1) < LEN(a2)) //si lExact=.F. solo comparamos hasta LEN(a1)
         for i=1 to len(a1)
            if valtype(a1[i])="A"
               if !aIgual(a1[i],a2[i],lExact)
                  lIgual := .F.
              exit
           endif
            else
               if !(a1[i]==a2[i])
                  lIgual := .F.
              exit
               endif
            endif
         next
      else
         lIgual := .F.
      endif
   else
      lIgual := .F.
   endif

return lIgual
 


Espero te sirva.

Atentamente,

Rolando
Cochabamba, Bolivia
RSalazarU
 
Posts: 211
Joined: Wed Jul 16, 2008 12:59 pm
Location: Cochabamba-Bolivia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 10 guests