Como mostrar un Archivo Texto Plano

Como mostrar un Archivo Texto Plano

Postby lubin » Wed Jul 22, 2009 5:15 pm

Buenas Tardes
Tengo la necesidad de mostrar un archivo Texto "listado.txt" que puede ser bastante grande, la idea es abrir una ventana para poderlo leer desde Fivewin o tal vez llamar desde Fivewin a otro programa externo que se encarge de visualizarlo(que programa podria ser???) , El punto es que solo se pueda mostrar , NO SE PUEDA MODIFICAR, por ello descarte llamar al Block de Notas por ejemplo, pues en el se puede modificar.

Les agradesco cualquier idea

Lubin
User avatar
lubin
 
Posts: 439
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru

Re: Como mostrar un Archivo Texto Plano

Postby acuellar » Wed Jul 22, 2009 6:55 pm

Lubin

Tendrías que pasarlo a una DBF temporal con un solo campo de caracter con un ancho de 140
Luego el DBF mostrarlo en un browse

algo asi:
USE REPORTE ALIAS REPORTE NEW EXCLUSIVE
ZAP
APPE FROM LISTADO.TXT SDF
El browse
DEFINE DIALOG oDlg FROM 0,0 TO 800,600 PIXEL TITLE "Vista Preliminar de: LISTADO.TXT"

oBrw1 := TXBrowse():New( oDlg )
oBrw1:nMarqueeStyle := MARQSTYLE_HIGHLROW

oCol := oBrw1:AddCol()
oCol:bStrData := { || REPORTE->LINEA }

oBrw1:CreateFromCode()

ACTIVATE DIALOG oDlg ON INIT (oBrw1:Move(33,0,( oDlg:nRight-oDlg:nLeft)-26,(oDlg:nBottom-oDlg:nTop)-75))

Espero te sirva

Saludos

Adhemar
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1593
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Como mostrar un Archivo Texto Plano

Postby Willi Quintana » Wed Jul 22, 2009 7:11 pm

Hola sr.
Levanta el texto en un array y luego lo visualizas con un listbox....

aTexto := LeerTxt("listado.txt")

If LEN(aTexto) = 0
Return(Nil)
EndIf

... aqui ya lo tratas el array que s
@10,10 LISTBOX oLista ........

Salu2

Code: Select all  Expand view


//------------------------------------------------------------------------------------
Function LeerTxt(cFile,nModo)
local oFile,cLinea := "", aLinea := {}, nRec, nCont
DEFAULT cFile := ""
DEFAULT nModo := 0
If Empty(cFile) .OR. !File(cFile)
  Return({})
EndIf
oFile := TTxtFile():New( cFile )
nRec  := oFile:RecCount()
Do while !oFile:EOF()
  cLinea := oFile:ReadLine()   //cLine
  cLinea := STRTRAN(cLinea, CHR(13), "")
  cLinea := STRTRAN(cLinea, CHR(10), "")
  AaDd(aLinea, cLinea)
  oFile:Skip()
EndDo
oFile:End()

Return(aLinea)

 
User avatar
Willi Quintana
 
Posts: 1002
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: Como mostrar un Archivo Texto Plano

Postby lubin » Wed Jul 22, 2009 8:42 pm

Hola Willi como veras volviendo al barrio ...
Gracias por la respuesta,,, solo una aclaracion...
y q me comentas de la capacidad del array.. para un texto bastante grande .. unas 200 paginas..??
Lubin
User avatar
lubin
 
Posts: 439
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru

Re: Como mostrar un Archivo Texto Plano

Postby lubin » Wed Jul 22, 2009 8:48 pm

Gracias por tu respuesta Adhemar

Podria ser una alternativa, Le dare una probada, pues el texto puede ser bastante grande y ancho, casi siempre unas 200 a 300 paginas de 240 carac. de ancho.

q tal manejara esto el Browse.???

Lubin
User avatar
lubin
 
Posts: 439
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru

Re: Como mostrar un Archivo Texto Plano

Postby Willi Quintana » Wed Jul 22, 2009 10:14 pm

Si no va bien con un array,, puedes crear una DBF de un colo campo con 256 caracteres de ancho,,, y le vas haciendo append en vez de AaDd(aLinea, cLinea)
asi lo manejes con un browse, le quitas las lineas de division de cada registro y te parecera un editor de texto,,
Salu2
User avatar
Willi Quintana
 
Posts: 1002
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: Como mostrar un Archivo Texto Plano

Postby rolando » Thu Jul 23, 2009 4:36 pm

Hola, buen día.

Se me ocurre que podrías hacerlo con la TRichedit.

Cargar el archivo de text en el oRich y luego lo hojeas tranquilamente.

Para evitar que sea modificado haces
Code: Select all  Expand view
oRich:lReadOnly:=.t.


Mira los samples de la richedit, ahí encontrarás todo.

Rolando :D
User avatar
rolando
 
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: Como mostrar un Archivo Texto Plano

Postby lubin » Fri Jul 24, 2009 5:15 am

Gracias RolandoCreo que seria posible ante un texto q no fuera muy largo

Veremos como le Va.. y lo cometare mas adeltna

Gracias a ti y a todos los que opinaron,... y a los que intentaron ayudar,, ello vale

Lubin
User avatar
lubin
 
Posts: 439
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru

Re: Como mostrar un Archivo Texto Plano

Postby lubin » Fri Jul 24, 2009 1:27 pm

Buen dia a todos

De Regreseo con el tema para visualizar el Archivo texto,

Logre cargar el texto en el Browse pero cuando es un texto con columnas numericas, salen desalineado las columnas donde van los numeros, algo asi...

vvvvvvvvvvvvvvvvvvvvvvvvvv 455.05
xxxxxxxxxxxxxxxxxxxx 90.09
ppppppppppppppppppp 6778.09



he probado cambiar el Font al Browse pero no me resulta, alguna idea.


Gracias por la ayuda..

Lubin
User avatar
lubin
 
Posts: 439
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru

Re: Como mostrar un Archivo Texto Plano

Postby jrestojeda » Fri Jul 24, 2009 1:43 pm

Hola amigo...
Usa el FONT "Courier New" que es un font proporcional donde todos los caracteres ocupan el mismo espacio.
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
User avatar
jrestojeda
 
Posts: 583
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: Como mostrar un Archivo Texto Plano

Postby Loren » Fri Jul 24, 2009 3:32 pm

Lubin,

cuando programaba en Clipper, lo hacía muy facil. Simplemente llamaba a un 3º programa. LIST.COM

LIST.COM nombrearchivo.txt

... y listo el pollo...

Ya puedes moverte con el cursor por todo el archivo a lo largo y ancho y sin poder modificarlo.
Adjunto te lo envio al email que registras en este foro.

Un saludo.
LORENZO.
Loren
 
Posts: 479
Joined: Fri Feb 16, 2007 10:29 am
Location: Cadiz - España

Re: Como mostrar un Archivo Texto Plano

Postby lubin » Fri Jul 24, 2009 5:55 pm

Hola Lorenzo

Es cierto, yo tambien hacia lo mismo en clipper, e inclusive llegue a encontrar en uno de los foros un textView.obj (hecho en C ) que lo compilabas y enlazabas con el clipper y te mostraba perfectamente un archivo texto sin importar el tamaño, pues ni si quiera lo cargabas en una variable como se hacia con el memoedit ,, (ello te restringia el tamaño del archivo) si no de frente le ponias el Nombre del Archivo como parametro : (TextView("mitexto.txt") ) y listo te abria la ventana... bueno lamentablemente con FiVeWin,Harbour no funciona. se cuelga.

He estado buscando y he probado inclusive con el Notepad.exe del Windows mismo. y si funciona, el inconveniente que tambien pueden MODIFICAR el texto, y esto no lo deseo, solo deberian de poder verlo

Gracias por el comentario, y si en caso sabes de algun programa externo que permita leer desde FWH un archivo texto sin posibilidad de editarlo seria de mucha ayuda.

Lubin
User avatar
lubin
 
Posts: 439
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru

Re: Como mostrar un Archivo Texto Plano

Postby jbrita » Fri Jul 24, 2009 8:29 pm

Amigo prueba con esto:

DEFINE FONT oFont NAME "Courier New" SIZE 0,-10
REPORT oRep CAPTION "Listado de Litros de Petroleo Mensual.." PREVIEW FONT oFont
COLUMN DATA " " SIZE nWidth
END REPORT
oRep:nTitleUpLine:=RPT_NOLINE
oRep:nTitleDnLine:=RPT_NOLINE
oRep:Margin(.25,RPT_LEFT ,RPT_INCHES)
oRep:Margin(.10,RPT_RIGHT ,RPT_INCHES)
oRep:Margin(.30,RPT_TOP ,RPT_INCHES)
oRep:Margin(.20,RPT_BOTTOM,RPT_INCHES)
ACTIVATE REPORT oRep ON INIT SayReport(nWidth,"Litros.txt")
oFont:End()

Return nil


STAT FUNC SayReport(nWidth,cFile)
LOCAL lContinue, cLine, lMore, lEoL, nLeng
LOCAL hPrnt, nBlok, cTxt, nCurr, nLMax
DEFAULT cFile:="Report.Prt"
nLeng:=nWidth+2
lContinue:=.T.
nBlok:=4096
hPrnt:=FOPEN(cFile,0)
nLMax:=FSEEK(hPrnt,0,2)
FSEEK(hPrnt,0)
nCurr:=FSEEK(hPrnt,0,1)
DO WHILE lContinue
SysRefresh()
cTxt=Space(nBlok)
FSEEK(hPrnt,nCurr,0)
IF FREAD(hPrnt,@cTxt,nBlok)<>nBlok
lContinue:=.F.
ENDIF
lMore :=.T.
WHILE lMore
lEoL:=SeekBreak(cTxt,nLeng)
IF lEoL<>0 .AND. nCurr<=nLMax
cLine=Left(cTxt,lEoL)
cTxt=SubStr(cTxt,lEoL+1)
cLine:=ClearBreak(@cLine)
nCurr+=lEoL
oRep:StartLine() // Para TReport
oRep:Say(1,cLine)
oRep:EndLine()
ELSE
lMore:=.F.
ENDIF
ENDDO
IF !lContinue // Finaliza el reporte
oRep:lBreak:=.T.
ENDIF
ENDDO
SysRefresh()
FClose(hPrnt)
RETURN (NIL)



STAT FUNC SeekBreak(cTxt,nLeng) // Busca caracteres de terminaci¢n
LOCAL cFF:=AT(Chr(12),cTxt)
LOCAL cLF:=AT(Chr(10),cTxt)
LOCAL cLine:=0
IF cFF>0 .AND. cLF>0
cLine:=Min(Min(cFF,cLF),nLeng)
ELSEIF cFF>0 .OR. cLF>0
cLine:=Min(Max(cFF,cLF),nLeng)
ELSEIF Len(cTxt)>=nLeng
cLine:=nLeng
ENDIF
RETURN (cLine)

STAT FUNC ClearBreak(cLine) // Elimina caracteres de terminaci¢n
cLine=StrTran(cLine,Chr(10),' ') // LF
cLine=StrTran(cLine,Chr(12),' ') // FF
cLine=StrTran(cLine,Chr(13),' ') // CR
cLine=StrTran(cLine,Chr(26),' ') // EOF
cLine=StrTran(cLine,Chr(27),' ') // ESC
RETURN (cLine)
Saludos
jbrita
 
Posts: 486
Joined: Mon Jan 16, 2006 3:42 pm

Re: Como mostrar un Archivo Texto Plano

Postby ACC69 » Mon Jul 27, 2009 3:46 pm

lubin wrote:Hola Lorenzo

Es cierto, yo tambien hacia lo mismo en clipper, e inclusive llegue a encontrar en uno de los foros un textView.obj (hecho en C ) que lo compilabas y enlazabas con el clipper y te mostraba perfectamente un archivo texto sin importar el tamaño, pues ni si quiera lo cargabas en una variable como se hacia con el memoedit ,, (ello te restringia el tamaño del archivo) si no de frente le ponias el Nombre del Archivo como parametro : (TextView("mitexto.txt") ) y listo te abria la ventana... bueno lamentablemente con FiVeWin,Harbour no funciona. se cuelga.

He estado buscando y he probado inclusive con el Notepad.exe del Windows mismo. y si funciona, el inconveniente que tambien pueden MODIFICAR el texto, y esto no lo deseo, solo deberian de poder verlo

Gracias por el comentario, y si en caso sabes de algun programa externo que permita leer desde FWH un archivo texto sin posibilidad de editarlo seria de mucha ayuda.

Lubin


Hola Lubin buenos dias como esta amigo, les dejo unas funciones que a mi me sirvio de mucho en clipper 5.3, que se puede leer el texto y visualizarlo y asi como tambien enviar a la impresora , espero que les sirva de mucho y lo puedan adaptar al FWH, que yo no he tenido tiempo de adaptarlo y asi como tambien un ejemplo de como llamar de un archivo texto.
Code: Select all  Expand view



/***
* Fbrwsdef.ch
*
* Translates para simular la sub-clase del browse de ficheros
*/


#xtranslate :fileHandle   => :cargo\[1\]
#xtranslate :fileLine     => :cargo\[2\]
#xtranslate :lineOffset   => :cargo\[3\]

* Futils.ch
// Posici¢n actual del fichero
#xtranslate FTell(<fHandle>) => FSeek(<fHandle>, 0, 1)

IF SINO = 1
            FIN_REP()

            IF !EMPTY(ARCH_EXP)
                bDEVICE = SET(20)
                COPY FILE (VER_REP) TO (ARCH_EXP)+".TXT"
                MENSAJE("SE CREO EL ARCHIVO "+ALLTRIM(ARCH_EXP)+".TXT"+" "+"EN EL DIRECTORIO "+CURDIR())
            ENDIF

            VER(VER_REP, 0,0,22,79)
        ELSE
           
            RUN NODOSIMP &WREPORTE
           
            CERRAR('R_ANTSDO')
        ENDIF                
       
        SELECT 99
        USE
           
        FERASE(NEWDBF1)
        FERASE(NEWNTX1)
        FERASE(VER_REP)
    ENDIF

**************************************************************
*--------- FUNCION QUE LEE ARCHIVOS ASCI A 64 BITS ----------*
**************************************************************
#include "Fbrwsdef.ch"

// El nombre del fichero es pasado como par metro
*-----------------------------------------
FUNCTION VER(cFname, LIN1,COL1, LIN2,COL2)
 LOCAL COLORc:=SetColor('W/N ,N/W,,,W/B')
 LOCAL oTbr, oTbc
 LOCAL lExitRequested := .F.
 LOCAL cSearcher, nSavefPos
 LOCAL nKey
 LOCAL GetList := {}

 SET SCOREBOARD OFF

 IF cFname == NIL .OR. !File(cFname)
     Alert("Sintaxis: FBTest <cFileName>")
     QUIT
 ENDIF

 SUBSTm:='P_'+SUBSTR(cFNAME,3,10)
*COPY FILE (cFNAME) TO (SUBSTm)

* @ 23,1 SAY "F2-B£squeda adelante  F3-B£squeda atr s  Pgup-Arriba   PgDn-Abajo           " COLOR 'N/W'

 CAJACONV(LIN1,COL1,LIN2,COL2,'W+/W','N/W','')
 
 @ 23,1 SAY "F2-B£squeda adelante  F3-B£squeda atr s  Pgup-Arriba   PgDn-Abajo           " COLOR 'N/W'

 IF (oTbr := FBrowseNew()) != NIL
     FBrowseOpen(oTbr, cFname)
     oTbr:nTop    := 1
     oTbr:nLeft   := 1
     oTbr:nBottom := 21
     oTbr:nRight  := 78
     oTbc:= TBColumnNew(, {|| SubStr(oTbr:fileLine, oTbr:lineOffset) })
     *oTbr:colorSpec ="G/N,W+/R,N,N,B/W,R/B,B/R,R/B,B/R"
     oTbr:colorSpec ="W/B,W+/R,N,N,B/W,R/B,B/R,R/B,B/R"
     oTbc:width := 78
     oTbr:addColumn(oTbc)

     cSearcher := Space(20)
     DO WHILE !lExitRequested
         DO WHILE !oTbr:stabilize()
         ENDDO

         SET CURSOR OFF

         nKey := InKey(0)
         DO CASE
            CASE nKey == 27
                  lExitRequested := .T.

            CASE nKey == 19 //IZQUIERDA
                  IF oTbr:lineOffset > 1
                      oTbr:lineOffset--
                      oTbr:refreshall()
                  ENDIF

            CASE nKey == 4  // DERECHA
                  IF oTbr:lineOffset < len(oTbr:fileLine)
                      oTbr:lineOffset++
                      oTbr:refreshall()
                  ENDIF

            CASE nKey == 1  // INICIO
                  oTbr:lineOffset := 1
                  oTbr:refreshall()

            CASE nKey == 6  // FIN
                  oTbr:lineOffset := Max(1, Len(oTbr:fileLine) - oTbc:width + 1)
                  oTbr:refreshAll()

            CASE nKey == 9  // TABULADOR
                  IF oTbr:lineOffset <= Len(oTbr:fileLine) - 10
                      oTbr:lineOffset += 10
                      oTbr:refreshAll()
                  ENDIF

            CASE nKey == 271 // TABULADOR
                  oTbr:lineOffset := MAX(1, oTbr:lineOffset - 10)
                  oTbr:refreshall()

            CASE nKey == -1  // F2
                  SET CURSOR ON
                  @ 24, 0
                  @ 24, 10 SAY "Introduzca la clave de b£squeda hacia delante" GET cSearcher PICT '@K'
                  READ

                  @ 24, 0
                  IF FrwdSrch(oTbr, Trim(cSearcher))
                      oTbr:refreshAll()
                  ELSE
                      MENSAJE('No Encontrado')
                  ENDIF

            CASE nKey == -2  // F3
                  SET CURSOR ON
                  @ 24, 0
                  @ 24, 10 SAY "Introduzca la clave de b£squeda hacia atras" GET cSearcher PICT '@K'
                  READ

                  @ 24, 0
                  IF BkwdSrch(oTbr, Trim(cSearcher))
                      nSavefPos := FilePos(oTbr)
                      oTbr:refreshAll()

                      DO WHILE !oTbr:stabilize()
                      ENDDO

                      DO WHILE FilePos(oTbr) != nSavefPos
                          oTbr:up()
                          DO WHILE !oTbr:stabilize()
                          ENDDO
                      ENDDO
                  ELSE
                      MENSAJE('No Encontrado')
                  ENDIF

           *CASE nKey == -4  // F5
                 *TYPE (SUBSTm) TO PRINTER

           *CASE nKey == -8  // F9
           *      LB_CALCULADORA()

            OTHERWISE
                  IF StdMeth(oTbr, nKey)
                     //  Manejador est ndar de teclas
                  ELSE
                    // Se ignoran otras
                  ENDIF
            ENDCASE
     ENDDO  

*    FERASE(SUBSTm)
     SET CURSOR ON
     SETCOLOR(COLORc)
     CLEAR SCREEN
     SET PRINTER TO
 ENDIF
 RETURN NIL

*--------------------
FUNCTION FilePos(oTbr)
 RETURN FTell(oTbr:fileHandle)

*-------------------
FUNCTION FBrowseNew
 LOCAL oTbr := TBrowseNew()

 oTbr:cargo := Array(3)
 oTbr:lineOffset := 1
 oTbr:goTopBlock    := {| | FileGoFirst(oTbr) }
 oTbr:goBottomBlock := {| | FileGoLast(oTbr)  }
 oTbr:skipBlock     := {|n| FileSkip(n, oTbr) }
 RETURN (oTbr)

*------------------------------------
FUNCTION FBrowseOpen(oTbr, cFileName)
 LOCAL fHandle := FOpen(cFileName)

 IF fHandle >= 0
     oTbr:fileHandle := fHandle
     FileGoFirst(oTbr)
 ENDIF
 RETURN ( fHandle > 0 )


// Ir a la primera l¡nea del fichero y leerla en oTbr:fileLine
*----------------------------------
STATIC PROCEDURE FileGoFirst(oTbr)
 LOCAL cLine
 LOCAL fHandle := oTbr:fileHandle

 FSeek(fHandle, 0, 0)
* * FReadLn(fHandle, @cline, 256)  *  ( * MODIFICADO ADRIANO * )
 FReadLn(fHandle, @cline, 512)
 oTbr:fileLine := cLine
 FSeek(fHandle, 0, 0)
 RETURN NIL

// Ir a la £ltima l¡nea del fichero y leerla en oTbr:fileLine
*--------------------------------
STATIC PROCEDURE FileGoLast(oTbr)
 FSeek(oTbr:fileHandle, 0, 2)
 GoPrevLn(oTbr)
 RETURN NIL


// Salta n l¡neas en el fichero. n puede ser positivo o negativo.
// Devuelve el n£mero de l¡neas que se ha movido
*---------------------------------
STATIC FUNCTION FileSkip(n, oTbr)
 LOCAL nSkipped := 0

 SET COLOR TO 'G/N'
 IF n > 0
     DO WHILE nSkipped != n .AND. GoNextLn(oTbr)
         nSkipped++
     ENDDO
 ELSE
     DO WHILE nSkipped != n .AND. GoPrevLn(oTbr)
         nSkipped--
     ENDDO
 ENDIF
 RETURN (nSkipped)


// Intenta moverse a la siguiente l¡nea del fichero
// Devuelve .T. si lo consigue, sino .F.
// Tiene que ser p£bica por la rutina de b£squeda
*-----------------------
FUNCTION GoNextLn(oTbr)
 LOCAL fHandle := oTbr:fileHandle
 LOCAL nSavePos := FTell(fHandle), cBuff := "", lMoved, nNewPos

 FSeek(fHandle, Len(oTbr:fileLine) + 2, 1)
 nNewPos := FTell(fHandle)
* * IF FReadLn(fHandle, @cBuff, 256) *  ( * MODIFICADO ADRIANO * )
 IF FReadLn(fHandle, @cBuff, 512)
     lMoved := .T.
     oTbr:fileLine := cBuff
     FSeek(fHandle, nNewPos, 0)
 ELSE
     lMoved := .F.
     FSeek(fHandle, nSavePos, 0)
 ENDIF
 RETURN (lMoved)


// Tiene que ser p£blica por las rutinas de b£squeda
*----------------------
FUNCTION GoPrevLn(oTbr)
 LOCAL fHandle := oTbr:fileHandle
 LOCAL nOrigPos := FTell(fHandle), nMaxRead, nNewPos, ;
           lMoved, cBuff, nWhereCrLf, nPrev, cTemp

 IF nOrigPos == 0
     lMoved := .F.
 ELSE
     lMoved := .T.
     //  Comprobar los 2 caracteres precedentes para CR / LF
     FSeek(fHandle, -2, 1)
     cTemp := Space(2)
     FRead(fHandle, @cTemp, 2)
     IF cTemp == CHR(13)+CHR(10)
         FSeek(fHandle, -2, 1)
     ENDIF
     nMaxRead := MIN(512, FTell(fHandle))

     cBuff := Space(nMaxRead)
     nNewPos := FSeek(fHandle, -nMaxRead, 1)
     FRead(fHandle, @cBuff, nMaxRead)
     nWhereCrLf := Rat(CHR(13)+CHR(10), cBuff)
     IF nWhereCrLf == 0
         nPrev := nNewPos
         oTbr:fileLine := cBuff
     ELSE
         nPrev := nNewPos + nWhereCrLf + 1
         oTbr:fileLine := SubStr(cBuff, nWhereCrLf + 2)
     ENDIF

     FSeek(fHandle, nPrev, 0)
 ENDIF
 RETURN (lMoved)


// Devuelve si lo encotr¢ o no - busca hacia adelante
// Si lo encuentra, asigna a cLine la l¡nea actual y
// coloca el puntero al comienzo de lo encontrado
// Si no se encuentra, no hay cambios
*-------------------------------
FUNCTION FrwdSrch(oTbr, cString)
 LOCAL fHandle := oTbr:fileHandle
 LOCAL lFound := .F.
 LOCAL nSavePos := FTell(oTbr:fileHandle)
 LOCAL cSavecLine := oTbr:fileLine

 DO WHILE !lFound .AND. GoNextLn(oTbr)
     lFound := cString $ oTbr:fileLine
 ENDDO

 IF !lFound
     FSeek(fHandle, nSavePos, 0)
     oTbr:fileLine := cSavecLine
 ENDIF
 RETURN (lFound)


// Devuelve si lo encotr¢ o no - busca hacia atras
// Si lo encuentra, asigna a cLine la l¡nea actual y
// coloca el puntero al comienzo de lo encontrado
// Si no se encuentra, no hay cambios
*--------------------------------
FUNCTION bkwdSrch(oTbr, cString)
 LOCAL lFound := .F.
 LOCAL fHandle := oTbr:fileHandle
 LOCAL nSavePos := FTell(fHandle)
 LOCAL cSavecLine := oTbr:fileLine

 DO WHILE !lFound .AND. GoPrevLn(oTbr)
     lFound := cString $ oTbr:fileLine
 ENDDO

 IF !lFound
     FSeek(fHandle, nSavePos, 0)
     oTbr:fileLine := cSavecLine
 ENDIF
 RETURN (lFound)

/***
* FReadLn(fHandle, cBuffer, nMaxLine)
*
*   --> Lógico  - .T. Si se ha leido total o parcialmente.  
*                 .F. implica fin de fichero
*
* fHandle       - El devuelto por FOpen()
* cBuffer       - Buffer para la l¡nea (pasado por referencia)
* nMaxLine      - Longitud de la l¡nea m s larga
*
* La funci¢n intenta leer una l¡nea del fichero especificado
* por fHandle. Supone que la l¡nea esta terminada por un CR/LF.
* Devuelve la l¡nea en el par metro cBuffer, que debe ser
* pasado por referencia. Esta versi¢n utiliza un buffer para
* mejorar el rendimiento.
*/

*--------------------------------------------
FUNCTION FReadLn(fHandle, cBuffer, nMaxLine)
 LOCAL cLine, nEol, nNumRead, nSavePos

 cLine   := Space(nMaxLine)
 cBuffer := ""

 // Guardar la posici¢n actual para b£squeda posterior
 nSavePos := FTell(fHandle)

 nNumRead := FRead(fHandle, @cLine, nMaxLine)

 IF (nEol := At(CHR(13)+CHR(10), SubStr(cLine, 1, nNumRead))) == 0
     cBuffer := cLine
 ELSE
     cBuffer := SubStr(cLine, 1, nEol - 1)  // Copiar hasta fin de l¡nea
     // Nos posicionamos en la siguiente l¡nea (saltamos LF)
     FSeek(fHandle, nSavePos + nEol + 1, 0)

 ENDIF
 RETURN (nNumRead != 0)    //NOTA: Si no se pudo leer la £ltima l¡nea, eof

*---------------------------
FUNCTION StdMeth(oTbr, nKey)
 LOCAL lKeyHandled := .T.

 DO CASE
    CASE nKey == 24;  oTbr:down()
    CASE nKey ==  5;  oTbr:up()
    CASE nKey ==  3;  oTbr:pageDown()
    CASE nKey == 18;  oTbr:pageUp()
    CASE nKey == 31;  oTbr:goTop()
    CASE nKey == 30;  oTbr:goBottom()
    CASE nKey ==  4;  oTbr:right()
    CASE nKey == 19;  oTbr:left()
    CASE nKey ==  1;  oTbr:home()
    CASE nKey ==  6;  oTbr:end()
    CASE nKey == 26;  oTbr:panLeft()
    CASE nKey ==  2;  oTbr:panRight()
    CASE nKey == 29;  oTbr:panHome()
    CASE nKey == 23;  oTbr:panEnd()
    OTHERWISE;        lKeyHandled := .F.
 ENDCASE
 RETURN lKeyHandled



Atte: Adrian C. C.
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

Re: Como mostrar un Archivo Texto Plano

Postby lubin » Tue Jul 28, 2009 4:59 pm

Hola Adrian,

Gracias por la publicacion, creo q si sera posible aplicarlo, dejame darle una revisada y les comento

Lubin
User avatar
lubin
 
Posts: 439
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 60 guests