Leer un archivo de texto

Post Reply
abelcervantes
Posts: 37
Joined: Tue Aug 10, 2010 2:05 pm

Leer un archivo de texto

Post by abelcervantes »

Estimados amigos:

Necesito leer un archivo de texto (.TXT).
Quiero extraer línea por línea su información. Encontré varias opciones, pero quisiera algo bien simple: Abrir, leer y cerrar.

Agradecido de antemano.
George
Posts: 710
Joined: Tue Oct 18, 2005 6:49 pm

Re: Leer un archivo de texto

Post by George »

Abel,
Debes incluir en el PRG el header #include "FileIO.ch".
Y luego usar las funciones para manejo de archivos "low level" como estas:
fOpen(), fRead(), fClose(), fError(), fSeek().

Saludos,

George
User avatar
acuellar
Posts: 1312
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Leer un archivo de texto

Post by acuellar »

Abel aquí un ejemplo

Code: Select all

Function LeerTxt(cFile)
     Local oFile,cLinea:=""
     
     oFile:= TTxtFile():New( cFile )
                  
     Do while !oFile:EOF()
          cLinea :=oFile:ReadLine()
         oFile:Skip()
     EndDo
     oFile:End()

Return
 
Saludos,

Adhemar
Saludos,

Adhemar C.
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Leer un archivo de texto

Post by FranciscoA »

Otro ejemplo:

Code: Select all

local FO_READWRITE:=2, FO_SHARED:=64 , FS_END:=2     //Fileio.ch
local cFile := ".\TuFichero.txt", nHand, cCad:="LoQueVasAEscribir"

if !file(cFile)
  nHand := FCreate( cFile )             // creamos  archivo 
  FWrite(nHand, cCad + CRLF+"")   // escribimos en el
  FClose(nHand)                            // lo cerramos el fichero
else
  nHand := FOpen( cFile, FO_READWRITE + FO_SHARED )  // abriendol fichero lect-escrit-compartido
  FSeek(nHand, 0, FS_END)               // nos colocamos al final
  FWrite(nHand, cCad + CRLF+"")      // escribimos en el 
  FClose(nHand)                               // lo cerramos
endif[i]
 
Saludos
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Leer un archivo de texto

Post by FranciscoA »

abelcervantes wrote:pero quisiera algo bien simple: Abrir, leer y cerrar.
Algo muy sencillo:

Code: Select all

local cFichero:="Ejemplos.txt"

dbCreate("C:\Prueba",{{"TEXTO","C",254,0}})
dbusearea(.t.,,"C:\prueba","prueba",.F.)
dbselectarea("Prueba")
append from &cFichero DELIMITED
prueba->(MyXBrowse(Alias(),"LEYENDO DBF (Desde un Fich de Texto se agrega a una Dbf con APPEND FROM...DELIMITED)"))
prueba->(dbcloseArea())
Ferase("c:\prueba.dbf")
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
abelcervantes
Posts: 37
Joined: Tue Aug 10, 2010 2:05 pm

Re: Leer un archivo de texto

Post by abelcervantes »

Muchas gracias amigos por sus respuestas.
Ya había intentado con las funciones: fOpen(), fRead(), etc., pero no funcionaba. Luego comprobé que mi archivo .TXT estaba en formato UNICODE y las funciones que me sugieren solo leen ANSI, asi que abrí el archivo de texto y lo grabé en formato ANSI.
Entonces pude leer el archivo pero no línea por línea, seguramente estoy cometiendo algún error.
Asi que recurrí a una función antigua (según yo): MemoRead y con MemoLine fue sencillo leer el archivo.
Mi gran duda ahora es ¿podré leer con esta función archivos grandes?. Según leí por algún lado solo puede leer archivos pequeños, de hecho el archivo que abró pesa 56kb.

De todas formas gracias George, Adhemar (maestro), y Francisco.
George
Posts: 710
Joined: Tue Oct 18, 2005 6:49 pm

Re: Leer un archivo de texto

Post by George »

Abel,
Haciendo testing con FWH64 pude usar Memoread() para leer un archivo de mas de 2 GB.

Saludos,

George
User avatar
jrestojeda
Posts: 543
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: Leer un archivo de texto

Post by jrestojeda »

Hola....
Prueba el siguiente código muy sencillo.

Code: Select all

Function CheckFileTxt()

cTexto:=MEMOREAD( "C:\MiFile.txt" )
nLinea:=MLCOUNT(cTexto)

FOR Q=1 TO nLinea
   cLinea:=MEMOLINE(cTexto,255,Q)

   MsgInfo(cLinea)

NEXT

Return nil
 
Espero te sirva la idea.
Saludos,
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
El Loco
Posts: 220
Joined: Fri May 19, 2006 4:08 pm

Re: Leer un archivo de texto

Post by El Loco »

abelcervantes wrote:Muchas gracias amigos por sus respuestas.
Ya había intentado con las funciones: fOpen(), fRead(), etc., pero no funcionaba. Luego comprobé que mi archivo .TXT estaba en formato UNICODE y las funciones que me sugieren solo leen ANSI, asi que abrí el archivo de texto y lo grabé en formato ANSI.
Entonces pude leer el archivo pero no línea por línea, seguramente estoy cometiendo algún error.
Asi que recurrí a una función antigua (según yo): MemoRead y con MemoLine fue sencillo leer el archivo.
Mi gran duda ahora es ¿podré leer con esta función archivos grandes?. Según leí por algún lado solo puede leer archivos pequeños, de hecho el archivo que abró pesa 56kb.

De todas formas gracias George, Adhemar (maestro), y Francisco.
Abel, utilizo muchísimo programas de lectura/conversión de archivos de texto, y solo con funciones FOpen(), FRead(), FSeek(), FCreate(), FWrite(), etc., incluso algunos de ellos debo convertir de EBCDIC a ASCII o viceversa.
Los archivos de texto que leo están por encima de los 4GB y no tienen ningún problema.
Así que quedate tranquilo, es solo tomarle la mano al asunto.

Abrazo. Miguel
Post Reply