In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Como sustituir FParseEx() de xHarbour

Foro público de Xailer en español
Responder
PEDRO DE LEON RODAS[3]
Mensajes: 266
Registrado: Mar Oct 28, 2008 4:41 am

Como sustituir FParseEx() de xHarbour

Mensaje por PEDRO DE LEON RODAS[3] »

Buen dia a todos.
Estoy haciendo las prueba con Xailer 3.0 y harbour y MinGW, y en uno de mis
formularios uso lo siguiente:
cDatos := FParseEx('archivo.txt',","), de esta manera obtengo el contenido
del archivo txt delimitado por una coma.
Esto es con xHarbour y me hizo el favor de darme este ejemplo el Sr. Pedro
Amaro. (gracias)
Pero ahora como hacer esto mismo con Harbour
De antemano, gracias.
Saludos
martindelangel
Mensajes: 47
Registrado: Jue Mar 21, 2013 11:26 pm

Como sustituir FParseEx() de xHarbour

Mensaje por martindelangel »

Hola Pedro:
usa esta función que me paso José Lalin:
FUNCTION FileToArray( cFile, cLineSep )
LOCAL cText := MemoRead( cFile )
DEFAULT cLineSep TO CRLF
RETURN HB_ATokens( cText, cLineSep )
PEDRO DE LEON RODAS[3]
Mensajes: 266
Registrado: Mar Oct 28, 2008 4:41 am

Como sustituir FParseEx() de xHarbour

Mensaje por PEDRO DE LEON RODAS[3] »

Gracias por tu respuesta Martin.
Desafortunadamente con esto obtengo solo las columnas del archivo.
Con FParseEx() obtenia la fila y la columna.
Alguna manera de obtener el total de filas (lineas) del archivo txt ?
Saludos
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Como sustituir FParseEx() de xHarbour

Mensaje por jfgimenez »

Pedro,
> Desafortunadamente con esto obtengo solo las columnas del archivo.
> Con FParseEx() obtenia la fila y la columna.
¿Qué hace exactamente esa función? ¿O qué es lo que necesitas
exactamente? Quizás se pueda hacer una similar sin mucha complicación.
> Alguna manera de obtener el total de filas (lineas) del archivo txt ?
nFilas := MLCount( hb_MemoRead( "fichero.txt" ), 99999 )
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
PEDRO DE LEON RODAS[3]
Mensajes: 266
Registrado: Mar Oct 28, 2008 4:41 am

Como sustituir FParseEx() de xHarbour

Mensaje por PEDRO DE LEON RODAS[3] »

Gracias Jose.
Lo que hago con esta funcion es obtener los datos del archivo de texto y
hacer una validacion de uno de los datos con mysql
Logicamente este archivo esta delimitado con una coma.
Te pongo el codigo como lo hago con FParseEx.
Local Archivo,archivo_final,archivo_a_grabar
Local cDatos,nContador,cConsulta,fEmision,cAgente,cPoliza,nServici o
Archivo='produccion.txt'
cDatos := FParseEx(Archivo,",")
IF LEN(cDatos) == 0 ; RETURN .t. ; ENDIF
FOR nContador:=1 TO LEN(cDatos)
cPoliza=cDatos[nContador,1]
fEmision=ctod(cDatos[nContador,2])
cAgente=cDatos[nContador,3]
nServicio=cDatos[nContador,4]
If Empty(nServicio)
Loop
Endif
cConsulta=AppData:Base:Query("Select poliza,emision,servicio,agente,id
from produccion where servicio='"+nServicio+"' ")
cConsulta:Open()
If cConsulta:Reccount()>0
Loop
Endif
If cConsulta:Reccount()=0
cConsulta:FastAddNew()
cConsulta:Poliza=cDatos[nContador,1]
cConsulta:Emision=ctod(cDatos[nContador,2])
cConsulta:Agente=ctod(cDatos[nContador,3])
cConsulta:Servicio=Val(cDatos[nContador,4])
cConsulta:FastUpdate()
Loop
Endif
NEXT
De echo encontre una forma usando dbf.
use .datosprueba exclusive alias mientras
zap
append from "produccion.txt" sdf
go top
Do while .not. Eof()
cPoliza= HB_ATokens( mientras->campo, "|")[1]
fEmision=ctod(HB_ATokens( mientras->campo, "|")[2])
cAgente=HB_ATokens( mientras->campo, "|")[3]
cServicio=HB_ATokens( mientras->campo, "|")[4]
MsgInfo(cPoliza+" "+DToC(fEmision)+" "+cAgente+" "+cServicio)
Skip
Enddo
Y de esta forma tambien obtengo los resultados.
Pero si hay otra forma sin usar dbf, estarí­a excelente.
Saludos.
Responder