Cantidad variable de parámetros
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Cantidad variable de parámetros
Cuando necesiteis llamar a una función y proporcionarle un número variable de parámetros podeis usar:
function MyFunc( ... )
y entonces llamar a hb_aparams() para obtener un array con todos ellos
function MyFunc( ... )
y entonces llamar a hb_aparams() para obtener un array con todos ellos
Re: Cantidad variable de parámetros
Muchas gracias por la información, Antonio
Un saludo
Fernando González Diez
ALSIS GHE Sistemas Informáticos
Fernando González Diez
ALSIS GHE Sistemas Informáticos
-
- Posts: 988
- Joined: Thu Nov 24, 2005 3:01 pm
- Location: Madrid, España
Re: Cantidad variable de parámetros
Antonio,
En general no es imprescindible indicar ni siquiera que parámetros pasas, a menos que quieras ponerle un nombre , pero si vas a usar hb_aparams, o HB_PValue(), ni siquiera hace falta indicarlo con '...' .
HB_PValue(i) devuelve el parámetro i-ésimo, y sabremos cuantos parámetros hay con PCount().
Por ejemplo:
? Expand( 'Select * from clientes where id = $1', 22 ) -> Select * from clientes where id = 22
FUNCTION Expand( cQuery ) // Aunque escribiendo (cQuery, ... ) hace más obvio que tiene parámetros variables
LOCAL i
i:= PCount()
WHILE i > 1
cQuery:= StrTran( cQuery, '$'+(LTrim(Str(i-1))), ClipValue2SQL( HB_PValue(i) ) )
i--
ENDDO
RETURN cQuery
Se pueden hacer cosas bastante majas...
En general no es imprescindible indicar ni siquiera que parámetros pasas, a menos que quieras ponerle un nombre , pero si vas a usar hb_aparams, o HB_PValue(), ni siquiera hace falta indicarlo con '...' .
HB_PValue(i) devuelve el parámetro i-ésimo, y sabremos cuantos parámetros hay con PCount().
Por ejemplo:
? Expand( 'Select * from clientes where id = $1', 22 ) -> Select * from clientes where id = 22
FUNCTION Expand( cQuery ) // Aunque escribiendo (cQuery, ... ) hace más obvio que tiene parámetros variables
LOCAL i
i:= PCount()
WHILE i > 1
cQuery:= StrTran( cQuery, '$'+(LTrim(Str(i-1))), ClipValue2SQL( HB_PValue(i) ) )
i--
ENDDO
RETURN cQuery
Se pueden hacer cosas bastante majas...
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Cantidad variable de parámetros
Carlos,
gracias por la información
Dudo que Przemek pasará por alto algo asi. Tal vez haya otro uso para "..." que desconocemos.
Si os parece importante lo podemos preguntar en la lista de desarrollo de Harbour
gracias por la información
Dudo que Przemek pasará por alto algo asi. Tal vez haya otro uso para "..." que desconocemos.
Si os parece importante lo podemos preguntar en la lista de desarrollo de Harbour
-
- Posts: 988
- Joined: Thu Nov 24, 2005 3:01 pm
- Location: Madrid, España
Re: Cantidad variable de parámetros
Solo se me ocurre una cuestion de orden y elegancia, una forma de hacer explícito el hecho de que vas a usar parámetros.
Tal vez el pcode generado podría llegar a mostrar alguna diferencia, no se...
Pero en lo personal lo he usado bastante, como en el ejemplo, y como podrás adivinar, con uso intensivo (es en las querys) y va fenomenal.
Y para añadir más cosas a la colección de cositas guapas, por si alguno todavía no lo conoce, van los siguientes #pragmas:
Esto nos permite escribir texto literal, que incluya incluso saltos de línea, como en:
o bien, XML combinado con la funcioncita de Expand
Como te decía, entre SQL, XML y web... lo uso de forma intensiva, y ayuda a hacer la programación muchísimo más clara.
Tal vez el pcode generado podría llegar a mostrar alguna diferencia, no se...
Pero en lo personal lo he usado bastante, como en el ejemplo, y como podrás adivinar, con uso intensivo (es en las querys) y va fenomenal.
Y para añadir más cosas a la colección de cositas guapas, por si alguno todavía no lo conoce, van los siguientes #pragmas:
Code: Select all
#xcommand TEXT INTO <v> => #pragma __cstream|<v>:=%s
#xcommand TEXT INTO <v> ADDITIVE => #pragma __cstream|<v>+=%s
Code: Select all
TEXT INTO cTexto
CREATE TABLE IF NOT EXISTS `validalta` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fechanaci` date,
`nif` varchar(9) DEFAULT NULL,
`mail` varchar(50) DEFAULT NULL,
`cuenta` varchar(4) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `NIF` (`nif`)
);
ENDTEXT
oServer:Command( cTexto )
Code: Select all
TEXT INTO cTransac
<tns:importAbsenceFiles xmlns:tns="http://echange.service.open.server.com">
<tns:absenceFilesToImport>
<tns:absenceFile>
<tns:absenceTypeAbbreviation>VACAC</tns:absenceTypeAbbreviation>
<tns:employeeIdentificationNumber>$1</tns:employeeIdentificationNumber>
<tns:startDate>$2</tns:startDate>
<tns:endDate>$3</tns:endDate>
</tns:absenceFile>
</tns:absenceFilesToImport>
</tns:importAbsenceFiles>
ENDTEXT
cTransac:= Expand( cTransac, oQuery:dni, oQuery:FechaInicio, oQuery:FechaFin )
Last edited by Carlos Mora on Fri Nov 28, 2014 11:10 pm, edited 1 time in total.
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Cantidad variable de parámetros
Carlos,
Muy bueno
Muchas gracias por compartirlo
Muy bueno
Muchas gracias por compartirlo
Re: Cantidad variable de parámetros
Carlos --> Bravo, bonissimo para mi, no lo conocia....
(Copy/paste cagando leches....)
Gracias !!!
(Copy/paste cagando leches....)
Gracias !!!
Salutacions, saludos, regards
"...programar es fácil, hacer programas es difícil..."
https://modharbour.app
https://modharbour.app/compass
https://forum.modharbour.app
"...programar es fácil, hacer programas es difícil..."
https://modharbour.app
https://modharbour.app/compass
https://forum.modharbour.app
Re: Cantidad variable de parámetros
Cada día de aprende algo nuevo!
Gracias tocayo, muy bueno, me serán de bastante utilidad tus ejemplos.
Saludos.
Carlos.
Gracias tocayo, muy bueno, me serán de bastante utilidad tus ejemplos.
Saludos.
Carlos.
Re: Cantidad variable de parámetros
Carlos,
muchísimas gracias por compartir la información y los ejemplos.
Saludos
muchísimas gracias por compartir la información y los ejemplos.
Saludos
Re: Cantidad variable de parámetros
Carlos
Gracias, es muy bueno
Gracias, es muy bueno
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
- AngelSalom
- Posts: 664
- Joined: Fri Oct 07, 2005 7:38 am
- Location: Vinaros (Castellón ) - España
- Contact:
Re: Cantidad variable de parámetros
Uau, uau, uau .. esos #pragma son la repera !!
Angel Salom
http://www.visionwin.com
---------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.0
http://www.visionwin.com
---------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.0
Re: Cantidad variable de parámetros
Carlos, muy, pero que muy bueno
Fácil de leer en el código fuente, facil de copiar y pegar para probar la consulta sql.
Increíble.
Fácil de leer en el código fuente, facil de copiar y pegar para probar la consulta sql.
Increíble.
Un saludo
Fernando González Diez
ALSIS GHE Sistemas Informáticos
Fernando González Diez
ALSIS GHE Sistemas Informáticos
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Cantidad variable de parámetros
Si os parece incluimos esos pragmas en FiveWin.ch
Controlando que sea Harbour, porque imagino que no funcionan en xHarbour
Controlando que sea Harbour, porque imagino que no funcionan en xHarbour
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Cantidad variable de parámetros
Code: Select all
#ifndef __XHARBOUR__
#xcommand TEXT INTO <v> => #pragma __cstream|<v>:=%s
#xcommand TEXT INTO <v> ADDITIVE => #pragma __cstream|<v>+=%s
#endif
- carlos vargas
- Posts: 1421
- Joined: Tue Oct 11, 2005 5:01 pm
- Location: Nicaragua
Re: Cantidad variable de parámetros
Antonio, no se como lo maneja xharbour internamente, pero segun la ayuda
Syntax
TEXT [TO PRINTER] [TO FILE <fileName>]
<text>
ENDTEXT
or
TEXT INTO <varName>
<text>
ENDTEXT
Arguments
TO PRINTER
The text is additionally output to the printer.
TO FILE <fileName>
The text is additionally output to the file <fileName>. It can be specified as a literal file name or as a character expression enclosed in parentheses. The default extension is TXT.
INTO <varName>
This is the symbolic name of the variable to assign <text> to.
<text>
This is a literal text block enclosed in TEXT and ENDTEXT. The text is output to the screen and displayed exactly as written in the PRG source code file. Description
The TEXT...ENDTEXT command outputs a block of literal text to the console. Output can be directed additionally to a printer or a file. When SET CONSOLE is set to OFF, the screen output is suppressed.
ALternatively, the text is assigned as character string to the variable <varName> when the INTO option is used.
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
Carlos Vargas
Desde Managua, Nicaragua (CA)