Importar dados de um HTML e gravar em DBF

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

trooper7
Usuário Nível 2
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

Mensagem por trooper7 »

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!
"É comum vermos os homens zombarem do que não podem compreender." (Goethe)
Avatar do usuário
rochinha
Administrador
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

Mensagem por rochinha »

Amiguinho,

Veja se este aplicativo te ajuda em algo.
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.
trooper7
Usuário Nível 2
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

Mensagem por trooper7 »

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
"É comum vermos os homens zombarem do que não podem compreender." (Goethe)
Avatar do usuário
rochinha
Administrador
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

Mensagem por rochinha »

Amiguinho,

Dê uma olhada neste tópico aqui

Este forum é uma verdadeira biblioteca xBase.
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.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Importar dados de um HTML e gravar em DBF

Mensagem por Jairo Maia »

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.
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)
trooper7
Usuário Nível 2
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

Mensagem por trooper7 »

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:

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
A tabela que estou usando para importar é exatamente essa:

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>
Não consigo ver o que pode estar errado...

De qualquer forma, obrigado mais uma vez.

Abraços!
"É comum vermos os homens zombarem do que não podem compreender." (Goethe)
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Importar dados de um HTML e gravar em DBF

Mensagem por Jairo Maia »

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?
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)
trooper7
Usuário Nível 2
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

Mensagem por trooper7 »

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!
"É comum vermos os homens zombarem do que não podem compreender." (Goethe)
Responder