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!