Página 1 de 1
Converter HTML para Texto
Enviado: 03 Fev 2012 10:15
por asimoes
Pessoal,
Como não achei nada na internet e falta de tempo mesmo, acabei criando uma função para isso:
Qualquer sugestão fiquem a vontade para melhorar a função, a principio está me atendendo.
Uso: Html2Texto(cArquivo)
Código: Selecionar todos
FUNCTION Html2Texto(cArq)
LOCAL cTexto:="", cLinha:="", nLinha, nPosIni, nPosFim, cChar
FT_FUSE( cArq )
DO WHILE !FT_FEOF()
cLinha:=FT_FREADLN()
cLinha:=StrTran( cLinha, Chr(12)) // Elimina caracter EJECT
cLinha:=StrTran( cLinha, Chr(13))
FOR nLinha:=1 TO Len(cLinha)
nPosIni:=At('<', cLinha)
nPosFim:=At('>', cLinha)
cChar:=SubStr(cLinha,nPosIni,nPosFim)
cLinha:=StrTran(cLinha,cChar)
//? cLinha, nPosIni, nPosFim
//inkey(0)
IF nPosIni == 0 .AND. nPosFim == 0
EXIT
ENDIF
NEXT
cTexto+=cLinha
FT_FSKIP()
ENDDO
FT_FUSE()
//HTML exemplo:
/*<html>
<body>
<center><b><font color="#0000FF">Email enviado com sucesso</font></b></center>
</body>
</html>*/
RETURN cTexto
Converter HTML para Texto
Enviado: 03 Fev 2012 13:57
por Pablo César
Parece haver algum erro, não está retornando corretamente o conteúdo até o final de arquivo. Vou verificar mais tarde e posto o resultado. O uso das funções FT_* tinham um bug, que foi consertado, não sei ao certo ainda se é isso. Mas vou ver mais tarde...
Converter HTML para Texto
Enviado: 03 Fev 2012 15:20
por Pablo César
Na sua função, de interpretar linha a linha, falta elaborar mais fim de interpretar por exemplo:
- As tags <br /> <br /> para desdobrar as quebras de linhas do próprio texto do html.
- As macros do próprio php &?acute; os ç para transformar em acentos, c cedilhas do texto do html
Enfim um série de tags que podem compor um html.
Na minha opinião, a utilização da função oActiveX:ExecWB() que marca e copia para a área de transferência é mais fácil de obter o mesmo ou quase o mesmo resultado. Exemplo dessa utilização eu faço no módulo WebGets.prg do
Aplicativo para alterar data e hora na inicialização-Windows onde capturo a tela, copio na área de transferência e leio em forma de string o seu conteúdo em texto.
Converter HTML para Texto
Enviado: 03 Fev 2012 16:01
por asimoes
Olá Pablo,
Se você olhar no final da função tem um exemplo de html que é o objeto do meu problema.
A função já funcionou comigo usando as funções FT* e tudo que está entre < > inclusive é eliminado do texto.
ficando somente o texto do exemplo: Email enviado com sucesso
A função que eu fiz não é solução definitiva, pode ser melhorada.
*/<html>
<body>
<center><b><font color="#0000FF">Email enviado com sucesso</font></b></center>
</body>
</html>*/
Converter HTML para Texto
Enviado: 03 Fev 2012 16:30
por Pablo César
Pois é... pra mim não deu muito certo não. Gravei esta página deste tópico em htm e quis ver o resultado mas abortou quando encontrou o primeiro tag <head>
Converter HTML para Texto
Enviado: 03 Fev 2012 17:17
por asimoes
Pablo,
Eu estou usando o harbour baixado pelo svn.
Meu programa de teste que funcionou. ou melhor está funcionando. acabei de testar.
Código: Selecionar todos
FUNCTION MAIN
CLS
IF Inetestaconectada()=.F.
alert("para testar essa função você deve ter acesso a internet, favor vereficar")
RETURN Nil
ENDIF
Consulta()
RETURN Nil
FUNCTION Consulta
LOCAL oPg :=Win_OleCreateObject("Microsoft.XMLHTTP")
oPg:Open("GET",'http://xxxxxxx.xxx.xx.xxx.br/cgi-bin/EnviaEmail_CGI.exe?Nome=Teste&Assunto=Teste de email Harbour&Destinos=[]Equipe03&CC=[]Equipe07&BCC=asimoesluz@gmail.com&ResponderPara=&Origem=hhelpdes@smf.com&EhErro=F&Html=F&Corpo="Testando envio de email com o Harbour"')
oPg:Send()
DelayResposta(3)
cBuf:=oPg:responseText
IF File("resposta.txt")
FErase("resposta.txt")
ENDIF
EscreveLinha(cBuf,"resposta.txt")
cResposta:=Html2Texto("resposta.txt")
IF Empty(cResposta)
alert("Email não enviado.")
ELSE
alert(cResposta)
ENDIF
quit
RETURN Nil
FUNCTION DelayResposta(nDelay)
FOR I:=1 TO nDelay
Inkey(1)
NEXT
RETURN Nil
FUNCTION Html2Texto(cArq)
LOCAL cTexto:="", cLinha:="", nLinha, nPosIni, nPosFim, cChar
FT_FUSE( cArq )
DO WHILE !FT_FEOF()
cLinha:=FT_FREADLN()
cLinha:=StrTran( cLinha, Chr(12)) // Elimina caracter EJECT
cLinha:=StrTran( cLinha, Chr(13))
FOR nLinha:=1 TO Len(cLinha)
nPosIni:=At('<', cLinha)
nPosFim:=At('>', cLinha)
cChar:=SubStr(cLinha,nPosIni,nPosFim)
cLinha:=StrTran(cLinha,cChar)
//? cLinha, nPosIni, nPosFim
//inkey(0)
IF nPosIni == 0 .AND. nPosFim == 0
EXIT
ENDIF
NEXT
cTexto+=cLinha
FT_FSKIP()
ENDDO
FT_FUSE()
/*<html>
<body>
<center><b><font color="#0000FF">Email enviado com sucesso</font></b></center>
</body>
</html>*/
RETURN cTexto
FUNCTION inetestaconectada( cAddress )
LOCAL aHosts, cName
InetInit()
IF cAddress == NIL
cAddress := "www.google.com.br"
ENDIF
aHosts := InetGetHosts( cAddress )
IF aHosts == NIL .OR. Len(aHosts)=0
InetCleanup()
RETURN .F.
ENDIF
InetCleanup()
RETURN .T.
FUNCTION AbreLinha(nLinha,cArq)
LOCAL I
DEFAULT nLinha TO 1
FOR I:=1 TO nLinha
StrFile(""+HB_OsNewLine(),cArq,.T.)
NEXT
RETURN Nil
FUNCTION EscreveLinha(cVar,cArq)
StrFile(cVar,cArq,.T.)
RETURN Nil
Converter HTML para Texto
Enviado: 03 Fev 2012 19:24
por asimoes
Pablo,
Vi que você está usando activex, tem como adaptar pro exemplo que postei?
Converter HTML para Texto
Enviado: 05 Fev 2012 13:44
por Pablo César
Mas a questão que teria que exibir a página, posicionar-se e aí capturar, entendeu ? Seria o caso diferente do que você fez. Pois deveria baixar página, não sei se daria de copiar sem exibir...
Converter HTML para Texto
Enviado: 05 Fev 2012 20:10
por rochinha
Amiguinhos,
Voces poderia tentar com esta função:
Código: Selecionar todos
FUNCTION CleanHTML( cfile )
LOCAL oExplorer := TOLEAuto():New( "InternetExplorer.Application" )
oExplorer:Navigate2( cfile )
DO WHILE oExplorer:ReadyState <> 4
HB_IDLESLEEP( 1 )
ENDDO
cINNText := oExplorer:Document:Body:InnerText
MemoWrit( "t.txt", cINNText )
MemoEdit( MemoRead( "t.txt" ) )
oExplorer:Quit()
RETURN NIL
Passando no parametro o URL.
Converter HTML para Texto
Enviado: 06 Fev 2012 10:13
por rochinha
Amiguinhos,
Por favor me informem qual a biblioteca do HARBOUR que possui as funções FT_*.
Tenho uma porrada de bibliotecas e duzentas versões de Harbour aqui mas não encontrei.
Obrigado.
Converter HTML para Texto
Enviado: 06 Fev 2012 11:55
por Pablo César
Por favor me informem qual a biblioteca do HARBOUR que possui as funções FT_*.
É da contrib hbnf Rochinha.
Converter HTML para Texto
Enviado: 06 Fev 2012 11:59
por rochinha
Amiguinho,
Valeu, vou acrescenta-la agora, apesar de ter olhado internamente a procura das funções.
Converter HTML para Texto
Enviado: 06 Fev 2012 14:00
por asimoes
Olá Rochinha,
O seu exemplo funcionou perfeitamente.
A biblioteca ft* é a hbnf
Converter HTML para Texto
Enviado: 05 Set 2018 14:54
por clodoaldomonteiro
Boa tarde,
Retomando esse tópico, pergunto se tem como pegarmos um HTML e transformarmos em Dados, como por exemplo, separado por vírgula .CSV?