FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Es posible unir dos pedazos de codigo ?? algo como include
Posts: 29
Joined: Fri Jan 18, 2008 03:48 PM
Es posible unir dos pedazos de codigo ?? algo como include
Posted: Thu Apr 17, 2008 10:39 PM

Me explico:

Tengo una funcion que tiene unas instrucciones al comienzo y unas instrucciones al final, que siempre son las mismas.

function xxx
local a1,a2,a3,etc

Lo unico que cambia es un conjunto de instrucciones que iria en el medio.

Mi pregunta es si yo puedo hacer algo como usar una funcion de cabecera, e incluir una parte de codigo como si fuera parte de la misma funcion. (es decir que no me toque volver a declarar variables ni nada por el estilo, sino que todo lo que contenga sea como de la funcion principal)

algo asi como usar un include

function xxx1 //abro mi funcion para empezar a trabajar
local a1,a2,a3

bla bla bla
abro bases de datos
bla bla bla

//aqui quiero incluir un pedazo de codigo que me reconozca todo lo hecho en xxx1 sin tener que enviarle parametros, ni declarar las variables como públicas
include codigo01

aqui cierro mi funcion
bla bla bla
cerrar base de datos
bla bla bla
return(.t.)

inicio de codigo01
//aqui trabajo como si lo estuviera haciendo en xxx1
?a1
bla bla bla
?a2
fin de codigo01

voy a especificar un poco mas con otro ejemplo bien pequeño:

Por ejemplo tengo la funcion f1 que me recibe un parametro que me indica que codigo utilizar y otros dos parametros que son los que deberia utilizar el codigo uincluido

function f1(p1,p2,p3)
local a1,a2,a3
a1:=1
a2:=6
do case
case p1==1
include cod001
case p1==2
include cod002
endcase
return(.T.)

cod001
a3:=p2+p3
fin cod001

cod002
a3:=p3-p2

Aqui normalmente, para trabajar con p3 y p2 me tocaría enviarselos a cod001 y a cod002 tambien como parámetros o hacer una declaracion private o public, que es justamente lo que quiero evitar

Es un ejemplito breve para explicar lo que quiero lograr, pero en la vida real tengo funciones bastante largas y con muchos parámetros. Es por eso que no quiero tener que manipular mas parámetros.
Alguna sugerencia ??

Gracias de antemano

Posts: 299
Joined: Mon Oct 22, 2007 03:03 PM
Es posible unir dos pedazos de codigo ?? algo como include
Posted: Thu Apr 17, 2008 11:38 PM

NO HAS INTENTADO ALMACENAR LOS PARAMETROS EN UN ARREGLO Y PASARLO (Y RETORNARLO SI ES NECESARIO) ????

ASI COMO

aDatos:={ "algo",23,45678.89,aVector}

aDatos:=Pepe(aDatos)

.
.
.
.
FUNCTION Pepe(aDatos)
.
.
.

RETURN aDatos

O SI NO, LO PASAS POR REFERENCIA:
POR EJEMPLO:

PEPE(@aDatos)

NO SE SI TE SIRVA LA IDEA :roll:

Saludos



Angel, Valencia, Venezuela



xH .997 - FW 7.9 - BCC55 - WorkShop - MySql
Posts: 299
Joined: Mon Oct 22, 2007 03:03 PM
Es posible unir dos pedazos de codigo ?? algo como include
Posted: Thu Apr 17, 2008 11:43 PM

YO LO QUE HAGO NORMALMENTE ME CREO UNA CLASE CON LOS DATOS
Y ENTONCES ES MAS FACIL EL PASE DE PARAMETROS


CLASS TCLIENTE // Clase para DATA DE CLIENTES


DATA      cNombre             INIT Space(40)
DATA      cDenom              INIT Space(40)
DATA      cApellido           INIT space(40)
DATA      cCedula             INIT space(10)
DATA      cCedLetra           INIT space(1)
DATA      cRifNat             INIT space(10)
DATA      cRifNatLetra        INIT space(1)
DATA      cRifLetra           INIT space(1)
DATA      cRif                INIT space(10)
DATA      cNit                INIT space(10)
DATA      nTpoCliente         INIT 1
DATA      nTpoEstadoCivil     INIT 0
DATA      nTpoGenero          INIT 0
DATA      nTpoNacionalidad    INIT 0
DATA      nTpoActividad       INIT 0
DATA      nTpoClienteRegistro INIT 0
DATA      nIdDtsBanco         INIT 0
DATA      dFechaRegistro      INIT DATE()
DATA      dFechaNacimiento    INIT cTod("  /  /     ")
DATA      cTelefonoMovil      INIT space(50)
DATA      cEmail              INIT space(30)
DATA      cWeb                INIT space(45)
DATA      cCodigoCuenta       INIT space(25)
DATA      cStatAct            INIT "ACTIVO"
DATA      cStatusActivo       INIT "1"

METHOD New() CONSTRUCTOR

METHOD NOTNULL()

ENDCLASS

//******************************************************************
//
METHOD New(aData) CLASS TCLIENTE
//*******************************************************************

IF aData<>nil
  ::nTpoCliente         := aData[6]
  ::cNombre             := IIf(::nTpoCliente=1,aData[1],"")
  ::cDenom              := IIf(::nTpoCliente<>1,aData[1],"")
  ::cApellido           := aData[2]
  ::cCedLetra           := Substr(adata[5],1,1)
  ::cCedula             := iif(len(alltrim(aData[5]))>0,Substr(adata[5],3,13),space(10))
  ::cNit                := aData[4]
  ::cRifLetra           := IIF(::nTpoCliente<>1,Substr(adata[3],1,1)," ")
  ::cRif                := IIF(::nTpoCliente<>1,iif(len(alltrim(aData[3]))>0,Substr(adata[3],3,13),space(10)),"")
  ::cRifNat             := IIf(::nTpoCliente=1,iif(len(alltrim(aData[3]))>0,Substr(adata[3],3,13),space(10)),"")
  ::cRifNatLetra        := IIF(::nTpoCliente=1,Substr(adata[3],1,1)," ")
  ::nTpoEstadoCivil     := aData[7]
  ::nTpoGenero          := aData[8]
  ::nTpoNacionalidad    := aData[9]
  ::nTpoActividad       := aData[10]
  ::nTpoClienteRegistro := aData[11]
  ::nIdDtsBanco         := aData[12]
  ::dFechaRegistro      := aData[13]
  ::dFechaNacimiento    := aData[14]
  ::cTelefonoMovil      := aData[15]
  ::cEmail              := aData[16]
  ::cWeb                := aData[17]
  ::cCodigoCuenta       := aData[18]
  ::cStatAct            := IIF(aData[19],"ACTIVO","INACTIVO")
  ::cStatusActivo       := IIF(aData[19],"1","0")
ELSE
  ::cCedula             := space(10)

ENDIF

RETURN self

//*******************************************************************
//
METHOD NOTNULL() CLASS TCLIENTE
//*******************************************************************
LOCAL lOk:=.t.
IF ::nTpoCliente=1
  IF len(alltrim(::cNombre        ))= 0 .OR.;
     len(alltrim(::cApellido      ))= 0 .OR.;
     len(alltrim(::cCedLetra      ))= 0 .OR.;
     len(alltrim(::cCedula        ))= 0 .OR.;
     ::nTpoEstadoCivil = 0 .OR.;
     ::nTpoGenero      = 0 .OR.;
     ::nTpoActividad   = 0
    lOk:=.F.
  ENDIF
  IF ::nTpoEstadoCivil = 1 .OR.;
     ::nTpoGenero      = 1 .OR.;
     ::nTpoActividad   = 1
    lOk:=.F.
  ENDIF
ELSE
  IF len(alltrim(::cDenom   ))= 0 .OR.;
     len(alltrim(::cRif     ))= 0 .OR.;
     len(alltrim(::cRifLetra))= 0
    lOk:=.F.
  ENDIF
ENDIF
RETURN lOk
Saludos



Angel, Valencia, Venezuela



xH .997 - FW 7.9 - BCC55 - WorkShop - MySql
Posts: 299
Joined: Mon Oct 22, 2007 03:03 PM
Es posible unir dos pedazos de codigo ?? algo como include
Posted: Thu Apr 17, 2008 11:45 PM

DE ESA FORMA SI NECESITO ACCESAR AL NOMBRE DE UN CLIENTE LO HAGO ASI:

oCliente:cNombre

Saludos



Angel, Valencia, Venezuela



xH .997 - FW 7.9 - BCC55 - WorkShop - MySql
Posts: 1445
Joined: Mon Oct 10, 2005 02:38 PM
Re: Es posible unir dos pedazos de codigo ?? algo como inclu
Posted: Fri Apr 18, 2008 06:31 AM

Se puede perfectamente.

include "mifichero.loquesea"

Saludos
Carlos G.

Un Saludo

Carlos G.



FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 652
Joined: Wed Oct 19, 2005 12:03 PM
Es posible unir dos pedazos de codigo ?? algo como include
Posted: Fri Apr 18, 2008 11:21 AM

Yo utilizo mucho la clase tarray de Hernan Diego Ceccarelli, en muchísimos casos lo bueno que tiene es que la podés usar como una dbf o bien para almacenar datos ej:

  DEFINE STRUCT aVar
     STRUCT FIELD "npro" INIT 0
     STRUCT FIELD "napea" INIT space(35)
 STRUCT FIELD "nRrec" INIT 0
     STRUCT FIELD "dfec" INIT date()
     STRUCT FIELD "ntotal" INIT 0
     STRUCT FIELD "nTotfac" INIT 0
     STRUCT FIELD "nTdeu" INIT 0
     STRUCT FIELD "nResta" INIT 0 
 STRUCT FIELD "aFactura" INIT array(0)
 STRUCT FIELD "aFpaga" INIT array(0) 
   ///

  END STRUCT

declaras aVar como static, local o como desees

lo llamas así aVar:napea := "Luis"
o bien aadd(aVar:aFactura,{"","",ctod(" "),ctod(" "),0,0})
Si lo querés pasar como parámetro con sólo pasar aVar, pasas todo lo que contiene.

Sólo uso CLASS al principo del programa para declarar unas pocas variables públicas.

Espero que te sirva

Luis

Continue the discussion