Página 1 de 1

Conversao de Programas 5.2 pra HMG

Enviado: 25 Mai 2012 16:19
por ssflavio
Boa Tarde a todos!
Gostaria de iniciar este tópico de ajuda, agradecendo a todos os integrantes deste forum, em especial ao Pablo e ao Maligno, diga-se de passagem esses 2 ja tem o seu lugar reservado lá no céu.
Chega de firulas e vamos ao que interessa.
Depois de ler muito material sobre as conversões de programas e de ter apanhado muito com alguns erros, estou em um momento critico.
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

Minha duvida é: como devo proceder para escrever o seguinte trecho de código que copia linhas de um arquivo para outro:

Código: Selecionar todos

handle1 := fopen("origem.txt")
handle2 := fopen("destino.txt")
do while !feof(handle1)
   LINHA1 := freadline(handle1)
   fwriteline(handle2,LINHA1)
enddo
abraços a todos

Conversao de Programas 5.2 pra HMG

Enviado: 25 Mai 2012 20:14
por Pablo César
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:

Código: Selecionar todos

#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 !

Conversao de Programas 5.2 pra HMG

Enviado: 29 Mai 2012 16:14
por ssflavio
Gostaria de agradecer o apoio recebido do Pablo e pedir desculpas pela demora do post, mas a semana começou daquele jeito!!!

Considero solucionado o problema!

Se o bicho pegar novamente, vou ter que apelar para o conhecimento de vocês!

Abraço a todos e boa programação!