Converter CSV para DBF

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

JSystem
Usuário Nível 3
Usuário Nível 3
Mensagens: 143
Registrado em: 21 Jan 2010 21:10
Localização: Uberaba

Converter CSV para DBF

Mensagem por JSystem »

Pessoal,

Alguém tem informação de algo que converta arquivo CSV para DBF ?

De preferência via linha de comando ou alguma rotina desenvolvida em clipper.

É para converter a tabela do IBPT baixada no site DE OLHO NO IMPOSTO (http://deolhonoimposto.ibpt.org.br/)

Grato.
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Converter CSV para DBF

Mensagem por billy1943 »

O arquivo formato CSV (Comma Separared Values) é mais facilmente convertido para o EXCEL.

Para converter para DBF você teria de criar um banco com os campos necessários e uma rotina que separaria cada elemento entre as vírgulas, para esses campos.

Logicamente você vai ter de usar as funções de baixo nível do Clipper no tratamento de arquivos texto, tais
como FOPEN, FREAD, FREADSTR, FCLOSE, além da AT que indicaria as posições das vírgulas separadoras dos conteúdos a serem gravados no DBF.
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Converter CSV para DBF

Mensagem por rubens »

Caro Jsystem....

Não me lembro agora como fiz... mas vou enviar o arquivo DBF do IBPT, talvez server até você conseguir a conversão aí...

Rubens
Anexos
TABELTI.rar
(30.26 KiB) Baixado 387 vezes
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Converter CSV para DBF

Mensagem por Jairo Maia »

Olá JSystem,

Abaixo a rotina para importar a tabela .CSV do IBPT. Uso com Harbour, mas não vejo nenhuma incompatibilidade com Clipper:

Código: Selecionar todos

Local cArquivoCSV := "IBPTax.CSV"  // coloque aqui o seu arquivo .CSV
Local cArquivoDBF := "IBPTax.DBF"  // coloque aqui o seu arquivo .DBF

Local nPointer := 0
Local nEol, cConteudo, cLinha
Local nRegistro, cBuffer, nLenArq, nLido
Local cEol := Chr( 13 ) + Chr( 10 )
Local nHandle := FOpen( cArquivoCSV, 2 )

Local aEstr := {;
               {"codigo"    ,"C",   8, 0},;
               {"ex"        ,"N",   3, 0},;
               {"tabela"    ,"N",   1, 0},;
               {"descricao" ,"C", 255, 0},;
               {"aliqnac"   ,"N",   5, 2},;
               {"aliqimp"   ,"N",   5, 2};
               }

Private cCampo

DBCreate( cArquivoDBF, aEstr )
Use ( cArquivoDBF ) Shared New

nRegistro := 0
cBuffer := Space( 1200 )                  // se houver linha maior aumente o 1200
nLenArq := FSeek( nHandle, nPointer, 2 )  // pega tamanho arquivo
FSeek( nHandle, nPointer, 0 )             // posiciona o pointer noinicio

nLido := FRead( nHandle , @cBuffer, 1200 )
nEol := AT( cEol, cBuffer )
nPointer += nEol + 1           // vamos ignorar a linha de nomes de campo
FSeek( nHandle, nPointer, 0 )  // posiciona o pointer na segunda linha

Clear Screen

While nEol > 0

 nLido := FRead( nHandle , @cBuffer, 1200 )
 nEol := AT( cEol, cBuffer )

 If nEol > 0
  cLinha := Left( cBuffer, nEol - 1 )
  Append Blank  // cria o registro vazio no dbf

  @ 10, 25 Say "Salvando Registro => " + Str( ++nRegistro )

  For x=1 To FCount()

   cConteudo:=SubSt( cLinha, 0, At( ";", cLinha ) )
   cLinha:= StrTran( cLinha, cConteudo, Nil, 1, 1 )  // remove apenas esta sequencia

   cConteudo:=Left( cConteudo, Len( cConteudo ) - 1 )  // tira o ";" do final
     
   cCampo := Field( x )
   If ValType( &cCampo. ) = "N"
    cConteudo := Val( cConteudo )
   EndIf

   Replace &cCampo. With cConteudo  // salva o campo

  Next

 EndIf
 
 nPointer += nEol + 1            // incrementa o pointer
 If nPointer >= nLenArq          // se fim de arquivo,
  Exit                           // fim...
 Else                            // se nao,
  FSeek( nHandle, nPointer, 0 )  // posiciona o pointer
 EndIf

EndDo

Return Nil
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)
lucimauro
Usuário Nível 3
Usuário Nível 3
Mensagens: 465
Registrado em: 21 Set 2004 21:02
Localização: Sobral-CE

Converter CSV para DBF

Mensagem por lucimauro »

Jairo;
Sua rotima ficou perfeita, rodei aqui e converteu tudo certinho.!

Obrigado.
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Converter CSV para DBF

Mensagem por marcos.gurupi »

Caro Jairo, preciso ler um arquivo CSV e gravar em um DBF mas o arquivo CSV tem mais campos do que o DBF. O exemplo q tem aqui o CSV eh identico ao DBF. Como faria para converter o CVS lendo apenas os campos q desejo ?

O CSV:

Código: Selecionar todos

PlanilhaID; Usuario; Cartorio; DataLivroDiario; Dia; Mes; Ano; Competencia; QTD; Conta; Referencia; De_Para_Referencia; Ato_Historico; Receita; Despesa; Despesas_Dedutiveis; Despesas_nao_Dedutiveis; Total_de_Receitas; Total_de_Despesas; Resultado
O DBF:

Código: Selecionar todos

CODIGO = ID
TIPO = CONSTANTE "ENTRADA"
DATALAN = DataLivroDiario
NCONTA = Uma combinacao de  Conta+Referencia
CADHIST = Conta
HISTORICO = De_Para_Referencia
VALOR = Receita
Marcos Roberto
NetService Software
Josexx
Usuário Nível 1
Usuário Nível 1
Mensagens: 1
Registrado em: 23 Set 2015 14:53
Localização: Tupã/SP

Converter CSV para DBF

Mensagem por Josexx »

Marcos, o modo mais simples seria criar um DBF temporário contendo todos os campos. Posteriormente executar um APPEND no seu arquivo principal.

Ze
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Converter CSV para DBF

Mensagem por Jairo Maia »

Olá Josexx,

Seja Bem vindo ao fórum.

Olá Marcos,
Estive afastado do fórum (e das atividades) por alguns meses, e não vi sua mensagem. Pelo tempo de postagem creio que foi resolvido ou o interesse expirou. Mas usando o exemplo que você se referiu com algumas (pequenas) alterações seria perfeitamente possível, uma vez que a posição dos campos de interesse é conhecida no arquivo CSV.

Não foi desinteresse... espero que entenda.
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)
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Converter CSV para DBF

Mensagem por marcos.gurupi »

Caro Jairo, entendo perfeitamente e tenho certeza que para vc ficar afastado do forum o motivo era importante. Consegui aqui usando gambiaras. Mas obrigado por responder.
Marcos Roberto
NetService Software
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Converter CSV para DBF

Mensagem por rochinha »

Amiguinhos,

Eu ainda não esqueci de tudo mas lembro do velho comando APPEND FROM ... DELIMITED ";"
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.
Responder