¿Hay un bug en el ADDITIVE del TEXT...ENDTEXT?

502 views
Skip to first unread message

Walter R. Ojeda Valiente

unread,
Dec 4, 2011, 7:48:01 PM12/4/11
to publice...@googlegroups.com
Hola a todos

¿Alguien sabe si hay un bug en el comando TEXT ... ENDTEXT del Visual FoxPro 9 cuándo se quiere agregar líneas a un archivo de texto?

Porque lo hice de las dos formas que muestra la ayuda:

    SET TEXTMERGE [ON | OFF] [TO [FileName] MEMVAR VarName [ADDITIVE]]

    TEXT [TO VarName [ADDITIVE]]

y no funcionó de ninguna de las maneras, directamente ignoró a la cláusula ADDITIVE. Ya lo resolví enviando los datos directamente a un archivo de texto con las funciones bajo nivel, pero me quedó la duda.

Saludos.

Walter.

Luis Maria Guayan

unread,
Dec 5, 2011, 6:11:56 AM12/5/11
to publice...@googlegroups.com
En la ayuda del TEXT .. ENDTEXT está esta nota:

If the contents of TO  VarName is not a string, Visual FoxPro always overwrites the contents in VarName.

Si el contenido de TO VarName no es una cadena, Visual FoxPro siempre sobrescribe el contenido de VarName.

Lo que puedes hacer es utilizar una variable de memoria, y luego hacer un STRTOFILE()


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Walter R. Ojeda Valiente

unread,
Dec 5, 2011, 12:01:42 PM12/5/11
to publice...@googlegroups.com
Después de tener el problema leí la ayuda, leí esa nota y la apliqué, pero el problema continuó, por eso usé las funciones FCREATE(), FOPEN(), FSEEK(), FPUTS(), FCLOSE() y por supuesto allí funcionó bien, como yo quería.

Saludos.

Walter.




Date: Mon, 5 Dec 2011 08:11:56 -0300
From: luism...@gmail.com
To: publice...@googlegroups.com
Subject: Re: [vfp] ¿Hay un bug en el ADDITIVE del TEXT...ENDTEXT?

Luis Maria Guayan

unread,
Dec 5, 2011, 12:32:44 PM12/5/11
to publice...@googlegroups.com
No te sirve utilizar STRTOFILE() con los parámetros para añadir y no sobreescribir el archivo? Digo, lo veo mas sencillo que utilizar las funciones de bajo nivel.

Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________


Walter R. Ojeda Valiente

unread,
Dec 5, 2011, 12:50:24 PM12/5/11
to publice...@googlegroups.com
Sí, claro que sirve, pero la función que escribí es muy sencilla, solamente registra el logueo y como yo vengo del Lenguaje C estoy acostumbrado a usar las funciones de bajo nivel.

Saludos.

Walter.




Date: Mon, 5 Dec 2011 14:32:44 -0300

Baltazar Moreno

unread,
Dec 5, 2011, 6:30:16 PM12/5/11
to publice...@googlegroups.com
¿Y era necesario re-inventar la rueda?

Baltazar Moreno
VFP9SP2 - Win7
Guadalajara, Jalisco, México

Marco Plaza

unread,
Dec 5, 2011, 7:14:22 PM12/5/11
to Comunidad de Visual Foxpro en Español

Hola Walter, puedes hacerlo de la siguiente forma, usando la variable
de sistema _text
( se omite el manejo de errores ):

_text= fopen("nombre.txt",2)

fseek(_text,0,2) && mover el puntero al fin del archivo

text

lo que desees hacer aqui etc..

endtext

fclose(_text)


Saludos
Marco


On 5 dic, 19:30, Baltazar Moreno <bmore...@gmail.com> wrote:
> ¿Y era necesario re-inventar la rueda?
>

> Baltazar Morenohttp://disxii.com

Walter R. Ojeda Valiente

unread,
Dec 5, 2011, 7:55:04 PM12/5/11
to publice...@googlegroups.com
Gracias Marco, ya lo resolví en una forma similar cuando el TEXT...ENDTEXT falló.

Saludos.

Walter.



> Date: Mon, 5 Dec 2011 16:14:22 -0800
> Subject: [vfp] Re: ¿Hay un bug en el ADDITIVE del TEXT...ENDTEXT?
> From: stma...@gmail.com
> To: publice...@googlegroups.com

Carlos Miguel FARIAS

unread,
Dec 6, 2011, 7:11:35 AM12/6/11
to publice...@googlegroups.com
Las funciones esas de bajo nivel, hace rato que estan disponibles y son un avion.
Por supuesto que con strtofile o su inversa es mas simple, pero hay que ver cual es la carga de memoria de una y otras.
El conjunto F(ALGO) de bajo nivel lo uso desde Foxdino y con maquinas muy chicas y son asombrosamente rápidas.

Mario Alfredo

unread,
Dec 15, 2011, 5:10:05 PM12/15/11
to Comunidad de Visual Foxpro en Español
busque en google que quiere decir foxdino

y no encontre

que es foxdino

On Dec 6, 6:11 am, Carlos Miguel FARIAS <carlosmiguelfar...@gmail.com>
wrote:


> Las funciones esas de bajo nivel, hace rato que estan disponibles y son un
> avion.
> Por supuesto que con strtofile o su inversa es mas simple, pero hay que ver
> cual es la carga de memoria de una y otras.
> El conjunto F(ALGO) de bajo nivel lo uso desde Foxdino y con maquinas muy
> chicas y son asombrosamente rápidas.
>
> El 5 de diciembre de 2011 21:55, Walter R. Ojeda Valiente

> <w...@hotmail.com>escribió:


>
>
>
>
>
>
>
> >  Gracias Marco, ya lo resolví en una forma similar cuando el
> > TEXT...ENDTEXT falló.
>
> > Saludos.
>
> > Walter.
>
> > > Date: Mon, 5 Dec 2011 16:14:22 -0800
> > > Subject: [vfp] Re: ¿Hay un bug en el ADDITIVE del TEXT...ENDTEXT?

> > > From: stmapw...@gmail.com

Samuel SMH

unread,
Dec 15, 2011, 5:56:33 PM12/15/11
to publice...@googlegroups.com
Walter, esto se maneja de forma sencilla asi:

*Esto crea tu archivo de texto
THISFORMSET.Nombretxt = 'Log_ViajerosCXP.TXT'
STRTOFILE('',THISFORMSET.Nombretxt,0)  

*Por cada linea o registro que deseas leer y agregar al archivo de texto, haces esto:
lcLinealog  = lcCampo01+'|'+lcCampo02+'|'+lcCampo03+'|'+lcCampo04+'|'+lcCampo05+;
            '|'+lcCampo06+'|'+lcCampo07+'|'+lcCampo08+'|'+lcCampo09+'|'+lcCampo10+chr(13)+chr(10)           
STRTOFILE(lcLinealog,THISFORMSET.Nombretxt,1)

Es importante el salto de linea siempre al final de los campos:  chr(13)+chr(10)

Siempre utilizo esto para mis Logs y no e tenido problemas; tambien usando TETX TO ADDITIVE puedes hacerlo
Saludos.

Luis Maria Guayan

unread,
Dec 15, 2011, 7:01:47 PM12/15/11
to publice...@googlegroups.com
:-D no creo que encuentres FoxDino jaja, es una mezcla de FoxPro para DOS con Dinosaurio, o sea un lenguaje prehistórico (con el que muchos de aquí comenzamos a programar) :-P


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________


Walter R. Ojeda Valiente

unread,
Dec 15, 2011, 10:05:41 PM12/15/11
to publice...@googlegroups.com
Samuel, esa no era la pregunta.

Sé muy bien como grabar datos en un archivo de texto, hace muchos años que lo hago, es historia antigua. Mi pregunta era si la cláusula ADDITIVE del comando TEXT ... ENDTEXT tenía un bug porque no conseguía grabar en disco de esa manera. Si sabes como hacer eso (grabar en disco usando TEXT ... ENDTEXT y la cláusula ADDITIVE) te agradeceré la información.

Saludos.

Walter.




Date: Thu, 15 Dec 2011 14:56:33 -0800
From: ssan_m...@hotmail.com
To: publice...@googlegroups.com

Subject: [vfp] Re: ¿Hay un bug en el ADDITIVE del TEXT...ENDTEXT?

Jose Antonio Blasco

unread,
Dec 16, 2011, 5:56:59 AM12/16/11
to publice...@googlegroups.com
Walter, te mando un extracto de un codigo que utilizo para subir
archivos via FTP.
No se si te refieres a esto, si no es así disculpa:

***************
* CREAR SCRIPT
***************
If lSegur = .T.
*
* Para paginas protegidas
*
TEXT TO lcDatos NOSHOW TEXTMERGE PRETEXT 3
PROT P
TYPE ascii

ENDTEXT
*
Else
*
* Para paginas sin proteccion
*
TEXT TO lcDatos NOSHOW TEXTMERGE PRETEXT 3
TYPE binary

ENDTEXT
*
Endif

*-----------------------------------------------------
* Entrar en directorio (si procede)
*-----------------------------------------------------
If !Empty(cDir)
TEXT TO lcDatos NOSHOW TEXTMERGE PRETEXT 3 ADDITIVE
cd <<LOWER(cDir)>>

ENDTEXT
Endif

*-----------------------------------------------------
* Controlar ficheros a copiar
*-----------------------------------------------------
cPath = JUSTPATH(cFiles)
IF !EMPTY(cPath)
cPath = LOWER(ADDBS(cPath))
Endif
*
nFiles = Adir(cArchi,cFiles)
If nFiles = 0
Return nOK
Endif

For x=1 To nFiles
*
TEXT TO lcDatos NOSHOW TEXTMERGE PRETEXT 3 ADDITIVE
put <<cPath+LOWER(ALLTRIM(cArchi(x,1)))>>

ENDTEXT
*
Endfor

*-----------------------------------------------------
* Salir
*-----------------------------------------------------
TEXT TO lcDatos NOSHOW TEXTMERGE PRETEXT 3 additive
quit
ENDTEXT
*************
* FIN SCRIPT
*************

*-----------------------------------------------------
* Convertir script a fichero
*-----------------------------------------------------
Strtofile(lcDatos,"subirftp.txt")


Un saludo Walter.


El día 16 de diciembre de 2011 04:05, Walter R. Ojeda Valiente
<wr...@hotmail.com> escribió:

--
Jose A. Blasco
Zaragoza - España

Jose Antonio Blasco

unread,
Dec 16, 2011, 5:59:05 AM12/16/11
to publice...@googlegroups.com
Se me olvidó comentarte Walter. Verás que hay lineas en blanco en
cada bloque de instrucciones TEXT..ENDTEXT. No son un error, se
necesitan.

De nuevo saludos.


El día 16 de diciembre de 2011 11:56, Jose Antonio Blasco
<jabl...@gmail.com> escribió:

Marco Plaza

unread,
Dec 16, 2011, 11:42:59 AM12/16/11
to Comunidad de Visual Foxpro en Español
Hola Walter , creo que le pasaste por encima a la solución que te dí.
Como ya comprobaste, y lo acotó Luis María en la ayuda,
additive no aplica cuando el destino se refiere a un archivo
preexistente, ese era el problema.

Si no necesitas realmente las capacidades del comando text-endtext,
bueno lo hacías como dices con fopen etc o simple strtofile.

Ahora, como lo demuestran los ejemplos en la ayuda mas abajo, si
necesitas añadir contenido a un archivo usando text-endtext,
el procedimiento es abrir el archivo con fopen y asignar el handler a
la variable de sistema _text. ( parcialmente resuelto )

Lo único que no dice la ayuda es que el puntero se coloca al inicio,
por eso coloqué el fseek(_text,0,2) para que vaya al final y la salida
se añada al fichero.

De esa forma puedes obtener el beneficio del textmerge y demás
capacidades del comando TEXT-ENDTEXT,
cosa que no logras usando solo los comandos de manejo de archivos de
bajo nivel, si era lo que necesitas.

Saludos.

Marco

Saludos.

Marco

On 15 dic, 23:05, "Walter R. Ojeda Valiente" <w...@hotmail.com> wrote:
> Samuel, esa no era la pregunta.
>
> Sé muy bien como grabar datos en un archivo de texto, hace muchos años que lo hago, es historia antigua. Mi pregunta era si la cláusula ADDITIVE del comando TEXT ... ENDTEXT tenía un bug porque no conseguía grabar en disco de esa manera. Si sabes como hacer eso (grabar en disco usando TEXT ... ENDTEXT y la cláusula ADDITIVE) te agradeceré la información.
>
> Saludos.
>
> Walter.
>

> Date: Thu, 15 Dec 2011 14:56:33 -0800

> From: ssan_migu...@hotmail.com

Walter R. Ojeda Valiente

unread,
Dec 16, 2011, 4:39:58 PM12/16/11
to publice...@googlegroups.com
Hola Marco

Hace muchos años que vengo usando las funciones de bajo nivel FCreate(), FOpen(), FSeek(), etc., porque antes de usar VFP ya hacía mis buenos programas en lenguaje C y las funciones de bajo nivel del VFP son copia de las funciones similares en lenguaje C.

También sé que en lugar de usar las antedichas funciones de bajo nivel puedo usar StrToFile() y FileToStr(), algo que también suelo hacer regularmente.

Ahora, como normalmente uso TEXT ... ENDTEXT para asignarles valores a las variables de tipo caracter que son un poco extensas quise hacer uso de su cláusula ADDITIVE, cosa que no funcionó. Pero no hay problema, ya lo resolví de otra manera.

Saludos.

Walter.



> Date: Fri, 16 Dec 2011 08:42:59 -0800

> Subject: [vfp] Re: ¿Hay un bug en el ADDITIVE del TEXT...ENDTEXT?
Reply all
Reply to author
Forward
0 new messages