Obrigado amigo pelos seus elogios, por falar do Maligno, ele está em falta. Saudades do colega. Mas saiba aqui tem muitos outros colegas com maior know-how e muita predisposição também que sempre irão ajudar sem medir esforços.
Utilizo algumas funções para manusear arquivos binários (texto) da biblioteca Funcky, os dois principais são:
1) feof() - verifica o final do arquivo
2) freadline() - le uma linha completa
Gostei da sua colocação dos dados, bem objetivo e completo. Bom o ideal seria conseguir tais funções equivalentes e daà não terias que mudar quase nada.
Eis o código que irá funcionar:
#include <hmg.ch>
#include "fileio.ch"
#xcommand DEFAULT <v1> TO <x1> [, <vn> TO <xn> ] => ;
IF <v1> == NIL ; <v1> := <x1> ; END ;
[; IF <vn> == NIL ; <vn> := <xn> ; END ]
REQUEST HB_GT_WIN_DEFAULT
Function Main
If File("origem.txt")
handle1 := fopen("origem.txt",FO_READ)
Else
Alert("Arquivo origem.txt, nao existe !")
Endif
If File("destino.txt")
handle2 := fopen("destino.txt",FO_READWRITE)
Fseek( handle2, 0, FS_END ) /* Posiciona até o final do arquivo para adicionar caso que queira que sobre-escreva: anular a linha */
Else
handle2 := fcreate("destino.txt",FC_NORMAL)
Endif
do while !feof(handle1)
LINHA1 := freadline(handle1)
altd()
fwriteline(handle2,LINHA1)
enddo
fclose(handle1)
fclose(handle2)
Return
Function feof( nHandle )
Local BLOCK_SIZE := 1
Local cBuffer := Space( BLOCK_SIZE )
Local nRead := 0
Local lEof := .T.
nRead := FRead( nHandle, @cBuffer, BLOCK_SIZE )
IF nRead == BLOCK_SIZE
fseek( nHandle, -BLOCK_SIZE, FS_RELATIVE )
lEof:= .F.
ELSE
lEof:= .T.
ENDIF
Return lEof
Function FReadLine(pFileHandle,nMaxLen)
Local cBuffer:=""
DEFAULT nMaxLen := 512
HB_FReadLine( pFileHandle , @cBuffer , Nil , nMaxLen )
Return cBuffer
Function FWriteLine( nHandle, cString )
Fwrite( nHandle, cString )
Fwrite( nHandle, chr(13) )
Fwrite( nHandle, chr(10) )
Return Nil
Fiz alguma melhoras espero que goste !