This function (FnParValor) provides the hability to work with a unlimmited number of parameters...
Example:
cParam = ''
cParam = cParam + 'MESS:Hasta la vista!;'
cParam = cParam + 'ROWPOS:5;'
cParam = cParam + 'COLPOS:10;'
cParam = cParam + 'COLOR:w/n;'
=fScreenOut(cParam)
FUNCTION fScreenOut
*-
PARAMETER cInParam
*-
PRIVATE cText, nRow, nCol, cColor
*-
cText = FnParValor(cInParam,'MESS' )
nRow = VAL( FnParValor(cInParam,'ROWPOS') )
nCol = VAL( FnParValor(cInParam,'COLPOS') )
cColor = FnParValor(cInParam,'COLOR' )
*-
*-- Defaults
*-
cText = IIF(EMPTY(cText),"WAIT",cText)
nRow = IIF(nRow=0,10,nRow)
nCol = IIF(nCol=0,37,nCol)
cColor = IIF(EMPTY(cColor),"W/N",cColor)
*-
....
....
....
The function:
*----------------------------------------------------------
*- Funcion: FnParValor
*--
*- Objeto: Funci¢n que manipula los parametros de tipo
*- extendido.
*-
*- Cabe aclarar que en los parametros extendidos
*- los datos pueden venir en cualquier orden.
*- (Ej. "BASE:TalBD;INDEX:TalIdx" ¢
*- "INDEX:TelIdx;BASE:TalBD"
*--
*- Parametros:
*- cTexto -> String. Por este par metro se pasa el string
*- completo.
*- cValor -> String. Se pasa el tipo de valor que se desea
*- obtener (Pej. "BASES"
. Este dato se
*- debe pasar sin ningun tipo de
*- especial incluido, de ello se encarga
*- la funci¢n.
*- cIni -> String. Opcional, valor por defecto ":". Este
*- es el marcador que separa el parametro
*- del valor.
*- cFin -> String. Opcional, valor por defecto ";". Este
*- es el marcador que indica el final
*- del valor.
*--
*- Retorno:
*- Retorna el valor solicitado en mayusculas, de no haber
*- hallado el valor indicado returna un string nulo.
*-
*----------------------------------------------------------
*-
*---
FUNCTION FnParValor
*---
*----
PARAMETER cTexto, cValor, cIni, cFin
*-
PRIVATE cAuxT, cAuxP, nLargo, cRet, cProc, nAcum, lFinDo, ;
nParam, cAucO
*-
*-- Parametros
*-
nParam = PARAMETERS()
DO CASE
CASE nParam = 2
cIni = ":"
cFin = ";"
CASE nParam = 3
cFin = ";"
ENDCASE
*-
*-- Inicio de variables
*-
cAuxT = UPPER(ALLTRIM(cTexto))
nLargo = LEN(cAuxT)
cAuxP = UPPER(ALLTRIM(cValor))
cRet = ""
cProc = ""
nAcum = 0
lFinDo = .T.
*-
*-- Inicia proceso
*--
*--- Si los valores no son vacios continuar
*--
IF nLargo>0 .AND. .NOT. EMPTY(cAuxP)
*-
*-- Si existe el parametro requerido continuar
*-
IF cAuxP $ cAuxT
*-
*-- Elimino todo el string anterior al valor solicitado
*-
cProc = SUBSTR(cAuxT,AT(cAuxP+cIni,cAuxT)+LEN(cAuxP+cIni),LEN(cAuxT))
*-
*-- Busco el final del valor. Marcado con ";" o por Nulo
*-
cProc = cProc + IIF(RIGHT(cProc,1)=cFin,"",cFin)
nLargo = LEN(cProc)
*-
DO WHILE nAcum<nLargo .AND. lFinDo
*-
nAcum = nAcum + 1
IF .NOT. SUBSTR(cProc,nAcum,1)=cFin
cRet = cRet + SUBSTR(cProc,nAcum,1)
ELSE
lFinDo = .F.
ENDIF
*-
ENDDO
*-
ENDIF
ENDIF
*-
cRet = ALLTRIM(cRet)
*-
RETURN cRet
Example:
cParam = ''
cParam = cParam + 'MESS:Hasta la vista!;'
cParam = cParam + 'ROWPOS:5;'
cParam = cParam + 'COLPOS:10;'
cParam = cParam + 'COLOR:w/n;'
=fScreenOut(cParam)
FUNCTION fScreenOut
*-
PARAMETER cInParam
*-
PRIVATE cText, nRow, nCol, cColor
*-
cText = FnParValor(cInParam,'MESS' )
nRow = VAL( FnParValor(cInParam,'ROWPOS') )
nCol = VAL( FnParValor(cInParam,'COLPOS') )
cColor = FnParValor(cInParam,'COLOR' )
*-
*-- Defaults
*-
cText = IIF(EMPTY(cText),"WAIT",cText)
nRow = IIF(nRow=0,10,nRow)
nCol = IIF(nCol=0,37,nCol)
cColor = IIF(EMPTY(cColor),"W/N",cColor)
*-
....
....
....
The function:
*----------------------------------------------------------
*- Funcion: FnParValor
*--
*- Objeto: Funci¢n que manipula los parametros de tipo
*- extendido.
*-
*- Cabe aclarar que en los parametros extendidos
*- los datos pueden venir en cualquier orden.
*- (Ej. "BASE:TalBD;INDEX:TalIdx" ¢
*- "INDEX:TelIdx;BASE:TalBD"
*--
*- Parametros:
*- cTexto -> String. Por este par metro se pasa el string
*- completo.
*- cValor -> String. Se pasa el tipo de valor que se desea
*- obtener (Pej. "BASES"
*- debe pasar sin ningun tipo de
*- especial incluido, de ello se encarga
*- la funci¢n.
*- cIni -> String. Opcional, valor por defecto ":". Este
*- es el marcador que separa el parametro
*- del valor.
*- cFin -> String. Opcional, valor por defecto ";". Este
*- es el marcador que indica el final
*- del valor.
*--
*- Retorno:
*- Retorna el valor solicitado en mayusculas, de no haber
*- hallado el valor indicado returna un string nulo.
*-
*----------------------------------------------------------
*-
*---
FUNCTION FnParValor
*---
*----
PARAMETER cTexto, cValor, cIni, cFin
*-
PRIVATE cAuxT, cAuxP, nLargo, cRet, cProc, nAcum, lFinDo, ;
nParam, cAucO
*-
*-- Parametros
*-
nParam = PARAMETERS()
DO CASE
CASE nParam = 2
cIni = ":"
cFin = ";"
CASE nParam = 3
cFin = ";"
ENDCASE
*-
*-- Inicio de variables
*-
cAuxT = UPPER(ALLTRIM(cTexto))
nLargo = LEN(cAuxT)
cAuxP = UPPER(ALLTRIM(cValor))
cRet = ""
cProc = ""
nAcum = 0
lFinDo = .T.
*-
*-- Inicia proceso
*--
*--- Si los valores no son vacios continuar
*--
IF nLargo>0 .AND. .NOT. EMPTY(cAuxP)
*-
*-- Si existe el parametro requerido continuar
*-
IF cAuxP $ cAuxT
*-
*-- Elimino todo el string anterior al valor solicitado
*-
cProc = SUBSTR(cAuxT,AT(cAuxP+cIni,cAuxT)+LEN(cAuxP+cIni),LEN(cAuxT))
*-
*-- Busco el final del valor. Marcado con ";" o por Nulo
*-
cProc = cProc + IIF(RIGHT(cProc,1)=cFin,"",cFin)
nLargo = LEN(cProc)
*-
DO WHILE nAcum<nLargo .AND. lFinDo
*-
nAcum = nAcum + 1
IF .NOT. SUBSTR(cProc,nAcum,1)=cFin
cRet = cRet + SUBSTR(cProc,nAcum,1)
ELSE
lFinDo = .F.
ENDIF
*-
ENDDO
*-
ENDIF
ENDIF
*-
cRet = ALLTRIM(cRet)
*-
RETURN cRet