Página 1 de 1

Como sustituir FParseEx() de xHarbour

Publicado: Jue Mar 21, 2013 12:59 am
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

Como sustituir FParseEx() de xHarbour

Publicado: Jue Mar 21, 2013 11:32 pm
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 )

Como sustituir FParseEx() de xHarbour

Publicado: Vie Mar 22, 2013 8:04 pm
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

Como sustituir FParseEx() de xHarbour

Publicado: Sab Mar 23, 2013 12:18 pm
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

Como sustituir FParseEx() de xHarbour

Publicado: Sab Mar 23, 2013 6:39 pm
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.