Importar dados de um HTML e gravar em DBF
Moderador: Moderadores
-
trooper7
- Usuário Nível 2

- Mensagens: 53
- Registrado em: 19 Fev 2010 12:22
- Localização: Ribeirão Preto/SP
Importar dados de um HTML e gravar em DBF
Olá amigos, boa tarde!
Gostaria de saber a melhor maneira de pegar os dados existentes nesta tabela HTML: http://201.16.219.99/relatorio.html e gravá-los em um arquivo DBF, com os determinados campos da tabela. Notei que através da função FOPEN() eu consigo abrir o arquivo para trabalhar em cima dele, mas após isso não sei bem como proceder.
Agradeço desde já pela ajuda e atenção.
Abraços!
Gostaria de saber a melhor maneira de pegar os dados existentes nesta tabela HTML: http://201.16.219.99/relatorio.html e gravá-los em um arquivo DBF, com os determinados campos da tabela. Notei que através da função FOPEN() eu consigo abrir o arquivo para trabalhar em cima dele, mas após isso não sei bem como proceder.
Agradeço desde já pela ajuda e atenção.
Abraços!
"É comum vermos os homens zombarem do que não podem compreender." (Goethe)
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Importar dados de um HTML e gravar em DBF
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
-
trooper7
- Usuário Nível 2

- Mensagens: 53
- Registrado em: 19 Fev 2010 12:22
- Localização: Ribeirão Preto/SP
Importar dados de um HTML e gravar em DBF
Bom dia, amigo!
Dei uma olhada e acredito que a manipulação do arquivo HTML que este programa faz seja mais ou menos o que eu preciso. Existe a codificação dele pare que eu dê uma olhada?
Preciso varrer o arquivo buscando os atributos "<td>" e "</td>" para localizar os conteúdos e gravá-los em uma variável temporária, por exemplo.
Assim, no final do laço, eu gravaria estes conteúdos em um arquivo DBF. Só estou me embanando em como fazer esta varredura.
Mas de qualquer forma, obrigado pela dica.
Abraços
Dei uma olhada e acredito que a manipulação do arquivo HTML que este programa faz seja mais ou menos o que eu preciso. Existe a codificação dele pare que eu dê uma olhada?
Preciso varrer o arquivo buscando os atributos "<td>" e "</td>" para localizar os conteúdos e gravá-los em uma variável temporária, por exemplo.
Assim, no final do laço, eu gravaria estes conteúdos em um arquivo DBF. Só estou me embanando em como fazer esta varredura.
Mas de qualquer forma, obrigado pela dica.
Abraços
"É comum vermos os homens zombarem do que não podem compreender." (Goethe)
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Importar dados de um HTML e gravar em DBF
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Importar dados de um HTML e gravar em DBF
Olá,
Dentro do raciocínio de ler por tags como mencionado pelo rochinha, adaptei um exemplo a sua tabela, veja se ajuda.
Nota: O que não sei é se o Clipper pode ler nomes de arquivos diferentes de 8x3. Testei o exemplo em Harbour, se não conseguir ler o arquivo com nome longo: Relatorio.html, faça o ajuste do exemplo.
Espero ter ajudado.
Dentro do raciocínio de ler por tags como mencionado pelo rochinha, adaptei um exemplo a sua tabela, veja se ajuda.
Nota: O que não sei é se o Clipper pode ler nomes de arquivos diferentes de 8x3. Testei o exemplo em Harbour, se não conseguir ler o arquivo com nome longo: Relatorio.html, faça o ajuste do exemplo.
Espero ter ajudado.
- Anexos
-
RELHTML.ZIP- (1.06 KiB) Baixado 214 vezes
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
-
trooper7
- Usuário Nível 2

- Mensagens: 53
- Registrado em: 19 Fev 2010 12:22
- Localização: Ribeirão Preto/SP
Importar dados de um HTML e gravar em DBF
Bom dia, amigos!
rochinha, muito obrigado pela ajuda! Dei uma olhada no tópico sobre xBase e consegui ter uma boa noção agora.
E Jairo, obrigado ainda mais pela contribuição! A partir deste código, acho que consigo alguma coisa...
Estranho que compilei o mesmo, tanto no xHarbour quanto no Harbour 3.0, e não consegui puxar os dados. Ele cria o arquivo DBF com os campos corretos, mas não puxa os dados. O que pode ser? Troquei o nome do arquivo HTML para "rela.html", por exemplo, como você sugeriu, mas mesmo assim não deu.
Tentei então apenas mostrar os dados na tela, mas ele não mostra nada, o que me parece ser um problema na puxada dos dados mesmo...
Enfim, vou continuar fuçando por aqui.
EDIT*
Jairo, consegui fazer a importação dos dados para o DBF. Porém, em uma tabela com apenas 4 linhas, estão vindo 11 registros, sendo que alguns campos não estão sendo puxados.
Segue o código depois de algumas alterações minhas:
A tabela que estou usando para importar é exatamente essa:
Não consigo ver o que pode estar errado...
De qualquer forma, obrigado mais uma vez.
Abraços!
rochinha, muito obrigado pela ajuda! Dei uma olhada no tópico sobre xBase e consegui ter uma boa noção agora.
E Jairo, obrigado ainda mais pela contribuição! A partir deste código, acho que consigo alguma coisa...
Estranho que compilei o mesmo, tanto no xHarbour quanto no Harbour 3.0, e não consegui puxar os dados. Ele cria o arquivo DBF com os campos corretos, mas não puxa os dados. O que pode ser? Troquei o nome do arquivo HTML para "rela.html", por exemplo, como você sugeriu, mas mesmo assim não deu.
Tentei então apenas mostrar os dados na tela, mas ele não mostra nada, o que me parece ser um problema na puxada dos dados mesmo...
Enfim, vou continuar fuçando por aqui.
EDIT*
Jairo, consegui fazer a importação dos dados para o DBF. Porém, em uma tabela com apenas 4 linhas, estão vindo 11 registros, sendo que alguns campos não estão sendo puxados.
Segue o código depois de algumas alterações minhas:
Código: Selecionar todos
function main()
n := 0
flinha := chr(10) //estou usando pelo linux
arq := "teste.html"
x1 := FOpen( arq, 2 )
if ferror() != 0
alert("ERRO! Nao foi possivel abrir: " + arq )
quit
else
if !file( "relatorio.dbf" )
xestru := {;
{"Sacado" ,"C", 50, 0},;
{"Ocorrencia" ,"C", 30, 0},;
{"NTitulo" ,"C", 10, 0},;
{"Tp" ,"C", 10, 0},;
{"Bord_Ord" ,"C", 15, 0},;
{"DtVencto" ,"D", 8, 0},;
{"DtBaixa" ,"D", 8, 0},;
{"Valor" ,"N", 10, 2},;
{"Desconto" ,"N", 10, 2},;
{"Juros" ,"N", 10, 2},;
{"Total" ,"N", 10, 2};
}
dbcreate("relatorio", xestru)
endif
USE relatorio EXCLUSIVE NEW
// Zap
endif
do while .t.
cBuffer := space(2048) // le 2048 bytes de cada vez
fseek( x1, n, 1 ) // posiciona o pointer para leitura
nLido := fread( x1 , @cBuffer, 2048 )
nEol := at(flinha,cBuffer)
if nEol <= 0 // fim de arquivo
exit
else
cBuffer := upper(cBuffer) // coloca o q foi lido em maisculo
endif
do while ( "TR BGCOLOR" $ cBuffer ) .and. ( "</TR>" $ cBuffer ) // uma linha da tabela
nIni := at( "TR BGCOLOR", cBuffer )
nFim := at( "</TR>", cBuffer )
cBloco := substr( cBuffer, nIni, nFim ) // pega um bloco
nLinhas := MLCount( cBloco )
nCampo := 0
for lin = 1 to nLinhas
cLinha := alltrim(memoline( cBloco, 255, lin+1 ))
if ( "</TR>" $ cLinha ) // fim de bloco
exit
elseif ( "</TD>" $ cLinha ) //.and. ( ") // se for linha de dados...
if nCampo = 0
APPEND BLANK
endif
nIni := at( '>', cLinha )
nFim := at( "</TD>", cLinha )
cDados := substr( cLinha, nIni+1, nFim - 1 )
@ 09,00 say "CONTEUDO: "+cDados
inkey(0)
cDados := strtran( cDados, "</TD>" )
@ 10,00 say "DEPOIS CONTEUDO: "+cDados
inkey(0)
nCampo++
cCampo := field( nCampo )
do case
case ValType( &cCampo. ) = "C"
replace &cCampo. with cDados
@ 11,00 say "TIPO: CARACTERE"
inkey(0)
case ValType( &cCampo. ) = "D"
replace &cCampo. with ctod(cDados)
@ 11,00 say "TIPO: DATA"
inkey(0)
case ValType( &cCampo. ) = "N"
replace &cCampo. with val(cDados)
@ 11,00 say "TIPO: NUMERICO"
inkey(0)
endcase
cls
endif
next
cBuffer := strtran( cBuffer, cBloco ) // remove o bloco processado
enddo
n -= Len( cBuffer ) // acerta o Pointer
enddo
Código: Selecionar todos
<table id="zoomA" border="0" width="870px" align="center" style="font-Size: 10px">
<tbody>
<tr>
<td width="180" class="tit_table">Sacado</td>
<td width="140" class="tit_table">Ocorrência</td>
<td width="60" class="tit_table">NºTit.</td>
<td width="60" class="tit_table">TP</td>
<td width="30" class="tit_table">Bord./Ord.</td>
<td width="50" class="tit_table">Dt.Vencto</td>
<td width="50" class="tit_table">Dt.Baixa</td>
<td width="50" class="tit_table">Valor</td>
<td width="30" class="tit_table">Desc.</td>
<td width="40" class="tit_table">Juros</td>
<td width="45" class="tit_table">Total</td>
</tr>
<tr bgcolor="#E8E8E8">
<td align="left">NOME DE CLIENTE NUMERO 1 </td>
<td align="left">01-Pagamento em dia</td>
<td align="center">008544-5</td>
<td align="center" title="Convencional - Duplicata">CV-DP</td>
<td align="left">136063/20</td>
<td align="center">06/06/2013</td>
<td align="center">07/06/2013</td>
<td align="right">974,85</td>
<td align="right">0,00</td>
<td align="right">0,00</td>
<td align="right">974,85</td>
</tr>
<tr bgcolor="#F2F2F2">
<td align="left">NOME DE CLIENTE NUMERO 2 </td>
<td align="left">01-Pagamento em dia</td>
<td align="center">066734-1</td>
<td align="center" title="Convencional - Duplicata">CV-DP</td>
<td align="left">136709/136</td>
<td align="center">06/06/2013</td>
<td align="center">07/06/2013</td>
<td align="right">22196,26</td>
<td align="right">0,00</td>
<td align="right">0,00</td>
<td align="right">22196,26</td>
</tr>
<tr bgcolor="#E8E8E8">
<td align="left">NOME DE CLIENTE NUMERO 3 </td>
<td align="left">01-Pagamento em dia</td>
<td align="center">008544-5</td>
<td align="center" title="Convencional - Duplicata">CV-DP</td>
<td align="left">412444/20</td>
<td align="center">26/06/2013</td>
<td align="center">17/06/2013</td>
<td align="right">12334,85</td>
<td align="right">0,00</td>
<td align="right">0,00</td>
<td align="right">33224,85</td>
</tr>
<tr bgcolor="#F2F2F2">
<td align="left">NOME DE CLIENTE NUMERO 4 </td>
<td align="left">01-Pagamento em dia</td>
<td align="center">066734-1</td>
<td align="center" title="Convencional - Duplicata">CV-DP</td>
<td align="left">16778869/136</td>
<td align="center">13/06/2013</td>
<td align="center">23/06/2013</td>
<td align="right">9292,26</td>
<td align="right">0,00</td>
<td align="right">0,00</td>
<td align="right">22236,26</td>
</tr>
<tr>
<td align="left" colspan="7"><b>Subtotal:</b></td>
<td align="right" style="border-top: 1px solid #000">244.019,17</td>
<td align="right" style="border-top: 1px solid #000">0,00</td>
<td align="right" style="border-top: 1px solid #000">462,49</td>
<td align="right" style="border-top: 1px solid #000">244.481,66</td>
</tr>
</tbody>
</table>
De qualquer forma, obrigado mais uma vez.
Abraços!
"É comum vermos os homens zombarem do que não podem compreender." (Goethe)
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Importar dados de um HTML e gravar em DBF
Olá,
Realmente o exemplo não estava funcionando. Refiz o exemplo e testei, e agora está funcionando. Dê uma olhada que agora acho que vai.
Nota: Usei meu exemplo anterior e testei em Windows. Assim, faça os ajustes para o Linux, ok?
Realmente o exemplo não estava funcionando. Refiz o exemplo e testei, e agora está funcionando. Dê uma olhada que agora acho que vai.
Nota: Usei meu exemplo anterior e testei em Windows. Assim, faça os ajustes para o Linux, ok?
- Anexos
-
RELHTML.ZIP- (1.08 KiB) Baixado 210 vezes
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
-
trooper7
- Usuário Nível 2

- Mensagens: 53
- Registrado em: 19 Fev 2010 12:22
- Localização: Ribeirão Preto/SP
Importar dados de um HTML e gravar em DBF
Maravilha, Jairo! Agora está 100%!
Fiz as alterações necessárias e adaptei ao meu programa, está tudo funcionando!
Muito obrigado pela atenção e pela ajuda!
Grande abraço!
Fiz as alterações necessárias e adaptei ao meu programa, está tudo funcionando!
Muito obrigado pela atenção e pela ajuda!
Grande abraço!
"É comum vermos os homens zombarem do que não podem compreender." (Goethe)