Importar para dbf e depois gerar novo txt

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

paulooc
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 25 Fev 2014 08:27
Localização: Vitoria de Santo antao -PE

Importar para dbf e depois gerar novo txt

Mensagem por paulooc »

Bom dia sou novo no clipper e estou com dificuldade para importar um txt com tamanho de campo variável delimitado por "|" .

é o seguinte tenho um arquivo enorme que precisa ser importado para outro sistema. quem desenvolveu não colocou par importar por período.
então tive a brilhante ideia de importar para um dbf indexar por data e hora e depois exportar para txt no mesmo formato apenas o período desejado.

consegui importar a linha toda para o dbf. mas gostaria de importar campo a a campo.

Segue exemplo do txt o origem

[1] JB - EXPORTAÇÃO CELPE|4502.399795532227|18/02/2014 01:30:00
[1] JB - EXPORTAÇÃO CELPE|3863.999824523926|18/02/2014 01:45:00
[1] JB - EXPORTAÇÃO CELPE|3964.799819946289|18/02/2014 02:00:00
[1] JB - EXPORTAÇÃO CELPE|2839.199871063232|18/02/2014 02:15:00
[1] JB - EXPORTAÇÃO CELPE|1562.399929046631|18/02/2014 02:30:00
[1] JB - EXPORTAÇÃO CELPE|2822.399871826172|18/02/2014 02:45:00
[1] JB - EXPORTAÇÃO CELPE|2906.399868011475|18/02/2014 03:00:00
[1] JB - EXPORTAÇÃO CELPE|3729.599830627441|18/02/2014 03:15:00
[1] JB - EXPORTAÇÃO CELPE|0.000000000000|18/02/2014 03:30:00
[1] JB - EXPORTAÇÃO CELPE|0.000000000000|18/02/2014 03:45:00
[1] JB - EXPORTAÇÃO CELPE|0.000000000000|18/02/2014 04:00:00
[1] JB - EXPORTAÇÃO CELPE|0.000000000000|18/02/2014 04:15:00
[1] JB - EXPORTAÇÃO CELPE|0.000000000000|18/02/2014 04:30:00
[1] JB - EXPORTAÇÃO CELPE|0.000000000000|18/02/2014 04:45:00
[1] JB - EXPORTAÇÃO CELPE|0.000000000000|18/02/2014 05:00:00

Alguém poderia me ajudar ?
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Importar para dbf e depois gerar novo txt

Mensagem por Eolo »

Paulo, me passe seu email.
Não estou conseguindo publicar uma resposta no Fórum...
paulooc
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 25 Fev 2014 08:27
Localização: Vitoria de Santo antao -PE

Importar para dbf e depois gerar novo txt

Mensagem por paulooc »

Meu email é Paulooc@hotmail.com
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Importar para dbf e depois gerar novo txt

Mensagem por Eolo »

Paulo, mandei pro seu email.

Se tiver algum MODERADOR no ar, por favor dê uma olhada: não consigo postar (a não ser pequenas mensagens).
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Importar para dbf e depois gerar novo txt

Mensagem por alxsts »

Olá!

Recentemente estava dando o erro "Forbidden..." quando se postava código, principalmente com a palavra FOpen() mas agora coloquei e não deu erro. O Alexandre Simões teve problemas semelhantes também.

O Toledo havia aberto um chamado onde ele faz o hosting do site. Devem estar ajustando.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Importar para dbf e depois gerar novo txt

Mensagem por Toledo »

Eolo escreveu:Se tiver algum MODERADOR no ar, por favor dê uma olhada: não consigo postar (a não ser pequenas mensagens).
Eolo, acho que o servidor onde o fórum está hospedado passou por algumas configurações de segurança, então algumas palavras estava provocando um erro de permissão "Forbidden...". Na semana passada, se no conteúdo da mensagem ou arquivo anexo continha as palavras FOPEN e cmd.exe, provocava este erro.

Tenho um chamado em aberto com o suporte do servidor, então se você puder enviar o arquivo para o meu e-mail suporte [a] pctoledo.com.br, vou tentar descobrir qual comando está provocando este erro.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Importar para dbf e depois gerar novo txt

Mensagem por Eolo »

Coloquei todas as funções f() com espaços no meio do nome. Vamos ver se passa.

Código: Selecionar todos

arqh=fopen('c:\arquivo.txt',2) // mude o path e nome do arquivo
if !arqh>0 // erro abertura
  quit
endi
tamanho=fseek(arqh,0,2)
fseek(arqh,0)
bufer=space(1)
estru:={}
aadd(estru,{"campo1","C",50,0})
aadd(estru,{"campo2","C",50,0})
aadd(estru,{"campo3","C",50,0})
dbcreate("C:\ARQUIVO",estru) // idem
use c:\arquivo excl
campo:=1
pedaco:=""
for n=1 to tamanho
  fread(arqh,@bufer,1)
  if bufer="|"
    if campo=1
      appe blan
      repl campo1 with pedaco
      campo++
      pedaco:=""
    elseif campo=2
      repl campo2 with pedaco
      campo++
      pedaco:=""
    endi
  elseif (bufer=chr(13) .or. bufer=chr(10))
    if campo=3
      repl campo3 with pedaco
      campo:=1
      pedaco:=""
    endi
  else
    pedaco=pedaco+bufer
  endi
  fseek(arqh,n,0)
next
use
fclose(arqh)
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Importar para dbf e depois gerar novo txt

Mensagem por Eolo »

Toledo, tentei isolar só o F O P E N, mas continuou dando o "Forbidden". Agora, coloquei espaço em todos nomes das funções F() e passou...
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Importar para dbf e depois gerar novo txt

Mensagem por Toledo »

Eolo, o comando que está dando o erro é o F R E A D().

Obs.: editei sua mensagem corrigindo os demais comandos. Tirei os espaços.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Importar para dbf e depois gerar novo txt

Mensagem por Eolo »

Toledo: o F W R I T E e/ou FCREATE está causando também o Forbidden.
Paulo, acabei esquecendo do retorno (DBF pra TXT).

Tem um comando ou função que exporta direto, mas eu nunca usei. Prefiro ir "na unha", aí sei o que está sendo exportado.

A propósito: precisa confirmar como é feita a quebra de linha no TXT original, se é chr(13), chr(13)+chr(10), chr(10)+chr(13) ou chr(10)... Precisa fazer igual neste retorno, já que o TXT vai ser importado pelo outro sistema. Se o outro sistema espera chr(13)+chr(10) e você usar só o chr(13), pode dar pau.

Além disso, este exemplo também inclui um chr(13) na última linha. De novo, precisa confirmar se o outro sistema não vai achar ruim.

Código: Selecionar todos

* DBF para TXT
arqh=fcreate('c:\arquivo2.txt',0)
if !arqh>0 // erro criação
  quit
endi
use c:\arquivo excl
go top
do whil !eof()
  txt=campo1+"|"+campo2+"|"+campo3+chr(13)
  * veja observação acima
  gravou=fwrite(arqh,txt)
  if !gravou=len(txt) // erro de gravação
    quit
  endi
  skip
endd
use
fclose(arqh)
Observação [Toledo]: Eolo o problema já foi resolvido, os comandos FWRITE() e FREAD() já são aceitos.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Importar para dbf e depois gerar novo txt

Mensagem por JoséQuintas »

O arquivo TXT que colocou está completo com todos os campos?
Precisa separar pelo dia/mês/ano?
Então esqueça qualquer programa, e use apenas o sistema operacional.

TYPE seuarquivo.txt | FIND "18/02/2014" > novoarquivo.txt

explicação:
TYPE lista na tela
o | faz com que o texto ao ínvés de ir pra tela vá para o FIND.EXE
FIND "18/02/2014" vai deixar passar somente a linha que contiver esse texto
> novoarquivo.txt vai gravar o resultado em novoarquivo.txt

E se quiser o resultado em ordem alfabética, ainda pode direcionar para o SORT.EXE... rs

E se quiser sumir com alguma coisa, também dá, é só acrescentar /v.

Supondo que fosse pra sumir com um CNPJ:

TYPE seuarquivo.txt | FIND /v "22.222.222/2222-11" > novoarquivo.txt

Testei agora aqui no Windows 7 64 bits, que também tem isso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Importar para dbf e depois gerar novo txt

Mensagem por Eolo »

José Quintas, essa eu não conhecia. Bacana.
Mas faltou um detalhe.

O problema do Paulo:
quem desenvolveu não colocou par importar por PERÍODO
A sua dica do FIND pega só um dia.
Como fazer o FIND selecionar um PERÍODO?
FIND "18/02/2014" vai deixar passar somente a linha que contiver esse texto
Além disso, tem alguma opção pra definir como será a quebra de linha no arquivo destino?
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Importar para dbf e depois gerar novo txt

Mensagem por JoséQuintas »

pra pegar o mês é só colocar o mês: FIND "02/2014"

O fim de linha deve ser o padrão do Windows.

E se precisar pra várias datas, a saída vai ser usar um BAT

Código: Selecionar todos

FOR %%A IN (01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31) do TYPE arquivo.txt | find "%%a/02/2014" > dia%%a.txt
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Importar para dbf e depois gerar novo txt

Mensagem por JoséQuintas »

Dá pra ir longe, é só ir combinando comandos.
Pra pegar do dia 1 a 5 também dá, com BAT.
> direciona pra um arquivo, apagando
>> acrescenta a um arquivo

INTERVALO.BAT pra escolher dias:

Código: Selecionar todos

del seleção.txt
FOR %%A IN (01 02 03 04 05) do TYPE arquivo.txt | find "%%a/02/2014" >> selecao.txt
dependendo da necessidade, é mais prático do que fazer programa.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Importar para dbf e depois gerar novo txt

Mensagem por JoséQuintas »

Fugindo um pouco do tópico, mas no assunto do find, antigamente eu usava isto pra procurar coisas nos fontes:

Código: Selecionar todos

@echo off
if "%1" == "" goto :help
if "%2" == "" goto :video
if exist %2 del %2
echo Pesquisa efetuada >> %2
echo %1 >> %2
echo. >> %2
for %%a in (*.prg *.ch) do find /i /n "%1" %%a >> %2
goto :fim
:video
for %%a in (*.prg *.ch) do find /i /n "%1" %%a
goto :fim
:help
echo.
echo seek texto destino
echo.
goto :fim
:fim

o resultado era uma lista na tela ou arquivo, separada pelo nome do fonte, com as linhas onde há o texto, e numeradas.
Tem até help no bat.

Explicação:
find /i é pra ignorar maiúsculas/minúsculas
find /n é pra sair com o número da linha
%1 é o primeiro parâmetro digitado na linha
%2 é o segundo
%%A é a variável usada no for
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder