Conversao de Programas 5.2 pra HMG

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

ssflavio
Usuário Nível 2
Usuário Nível 2
Mensagens: 86
Registrado em: 10 Jul 2008 09:57
Localização: São Paulo / SP

Conversao de Programas 5.2 pra HMG

Mensagem 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
Editado pela última vez por Pablo César em 25 Mai 2012 21:10, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Flávio dos Santos Szelbracikowski
ssflavio@osite.com.br
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Conversao de Programas 5.2 pra HMG

Mensagem 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 !
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
ssflavio
Usuário Nível 2
Usuário Nível 2
Mensagens: 86
Registrado em: 10 Jul 2008 09:57
Localização: São Paulo / SP

Conversao de Programas 5.2 pra HMG

Mensagem 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!
Flávio dos Santos Szelbracikowski
ssflavio@osite.com.br
Responder