FoxPro/Visual FoxPro - Leer Archivo de texto

 
Vista:

Leer Archivo de texto

Publicado por J09seM (2 intervenciones) el 19/04/2012 09:24:00
Muy Buenas:

Tengo un pequeño problema. Quiero leer un archivo de texto, linea por linea y recoger en una variable los 10 primeros caracteres de cada linea. El texto tiene lineas muy largas y cuando se pone a leer es como si las dividiera. A continuación pongo el Codigo

LOCAL Lector
LOCAL Linea

Lector = FOPEN('texto.txt')

IF Lector >-1
DO WHILE NOT FEOF(Lector)

Linea = left(FGETS(Lector),10)
MESSAGEBOX(linea)

ENDDO

FCLOSE(lector)
ENDIF
Un saludo y muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 309
Bronce
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Leer Archivo de texto

Publicado por santiago (551 intervenciones) el 19/04/2012 16:00:29
Hola, yo he hecho esto en forma diferente, espero te sirva:

1.- guardo el texto en un campo memo de una tabla temporal.
2.- capturo los 10 primeros caracteres con substr(texto,1,10)

ejemplo:

info_a = space(1)
info_b = space(10)

use tabla && tabla temporal
info_a = campoM && campo memo
info_b = substr(info_a,1,10) && captura los 10 primeros caracteres


Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 309
Bronce
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Leer Archivo de texto

Publicado por santiago (551 intervenciones) el 19/04/2012 16:05:56
Hola Nuevamente, veo que no solo quieres la primera linea, sino también los 10 primeros caracteres de cada linea.

Aparte de lo ya mencionado, podrías también guardar la data en un archivo (dbf), en un campo tipo c (caracter), en cada registro una linea, de forma tal que después haces un barrido de toda la tabla, capturando los 10 primeros caracteres de cada registro del campo en la tabla.

Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 29
Ha aumentado su posición en 3 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Leer Archivo de texto

Publicado por Javier (271 intervenciones) el 20/04/2012 20:25:41
Hola, fijate si te sirve:

CREATE TABLE TEMPORAL ( Linea C( 200 ) )
* 200 o un numero adecuado a la cantidad de caracteres maximos que tenga la tabla

SELECT TEMPORAL
APPEND FROM (cTuArchivoTXT ) SDF

GO TOP
DO WHILE ! EOF()

cLinea10 = LEFT( TEMPORAL.LINEA, 10 ) && aqui obtienes los 10 prim. caract de cada linea.


? cLinea10


SKIP


ENDDO

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Leer Archivo de texto

Publicado por Juan Manuel Cruzq (512 intervenciones) el 24/04/2012 17:15:11
Si no le das un segundo argumento a la función FGETS, asumirá solo los primeros 255 caracteres de la línea a leer.

De ahí viene tu problema.

Revisa la sintaxis completa de dicha función en la ayuda del VFP. Tod está ahí.



FGETS(nFileHandle [, nBytes])

Parameters
nFileHandle: Specifies the numeric file handle of the file or communication port from which FGETS( ) returns data.

nBytes: Specifies the number of bytes FGETS( ) returns. FGETS( ) returns nBytes bytes unless a carriage return is encountered first. FGETS( ) returns data between the starting file-pointer position and the carriage return if a carriage return is encountered within nBytes bytes.

FGETS( ) returns a maximum of 8192 bytes. If you omit nBytes, FGETS( )returns 254 bytes by default.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Leer Archivo de texto

Publicado por elguapo (1 intervención) el 04/10/2014 01:33:46
puedes ponerle 8192 a los caracteres al FGETS.

por que si encuentra un fin de linea o asea el chr(13) o fin de archivo EOF().

se detiene y solo te trae lo largo de cada linea.

NOTA: aguas por que los saltos de linea, o sea line feed, chr(10) son ignorados.


pudiento estas sobrepasar los 254 que tiene x default.

m.tcDocumento_cRuta= 'Cliente.xml'

m.lnFile_xml = Fopen(m.tcDocumento_cRuta,0) && Solo Lectura (RO).

Select 0
Create Cursor _xml ( linea m)

Do While .T.

m.lcLinea_xml = Fgets(m.lnFile_xml, 8192) && se detiene al encontrar un chr(13) ó EOF()

If !Empty(m.lcLinea_xml)

Append Blank

Replace _xml.linea With m.lcLinea_xml

Endif
If FEOF(m.lnFile_xml)

Fclose(m.lnFile_xml)

Exit

Endif
Enddo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Leer Archivo de texto

Publicado por osbaldo (27 intervenciones) el 15/10/2014 19:56:18
despues de ponerlo en el _xml como haces para mandarlo timbrar. estoy intentando con diverza por metodo de prueba
con token

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar