Gerar um arquivo TXT.

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Maurício Elias
Usuário Nível 3
Usuário Nível 3
Mensagens: 304
Registrado em: 12 Mai 2005 08:48

Gerar um arquivo TXT.

Mensagem por Maurício Elias »

Olá pessoal.

Alguém saberia me dizer como consigo gerar um arquivo TXT a partir de um DBF qualquer, sem ser pelo SDF ?
Acontece que, o SDF, gera cada linha do TXT com os espaços em branco a direita, e eu preciso que o arquivo fique sem esses espaços, o mais enxuto possível.
Ouví dizer q dá prá fazer usando as fçs de baixo nível (FCreate, FOpen, ...) mas eu ñ sei como...

Abraços.

_______
Maurício
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Tche, uma maneira automatica eu não sei....mas se vc fizer uma leitura do DBF e usar o SET PRINTER TO TEXTO.TXT ele vai gerar o TXT da maneira que vc quiser.....

Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Agora que você falou, me dei conta de que devo ter usado esse tipo de exportação pelo Clipper uma ou no máximo duas vezes na vida. :)

Além da alternativa que o Leonardo já deu, usando a impressão para um arquivo, usar as funções de baixo nível do Clipper é igualmente simples. Você só precisa criar o arquivo destino e, dentro de um looping, criar uma string para o registro apontado, gravando-a neste arquivo. Ao final, basta fechá-lo. Exemplo (não testei):

Código: Selecionar todos

function Export()
local cStr
local cFile := "c:\teste.txt"
local nHandle

if (nFHandle := FCreate(cFile)) > 0
   use origem // se for indexar, abra o índice
   while !EoF()
      // Formando a string com todos os campos
      cStr := ""
      for i := 1 to FCount()
          cStr += if(i=1, "", ",")
          xVar := FieldGet(1)
          // A conversão será feita conforme o campo
          if     ValType(xVar) = "N" ; cStr += LTrim(Str(xVar,18,2))
          elseif ValType(xVar) = "D" ; cStr += DtoS(xVar)
          elseif ValType(xVar) = "L" ; cStr += if(xVar,"1","0")
          elseif ValType(xVar) = "M" ; cStr += "<MEMO>"
          end
          FWrite(nHandle,cStr+Chr(13)+Chr(10))
      next
      skip
   end
   close
else
   // Erro na criação do arquivo
end
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Gerar um arquivo TXT opção DELIMETERS

Mensagem por Pablo César »

Maurício Elias escreveu:gerar um arquivo TXT a partir de um DBF qualquer, sem ser pelo SDF ? Acontece que, o SDF, gera cada linha do TXT com os espaços em branco a direita, e eu preciso que o arquivo fique sem esses espaços, o mais enxuto possível.
Só para complementar, Mauricio. Não sei sea sua necessidade é importar os dados para outro DBF novamente, porque o COPY TO com opção DELIMITERS você irá gerar o arquivo entre aspas separados por vírgulas e os campos que não são do tipo caracter não são utilizados a vírgulas, isto é mantém o padrão conforme o tipo do campo para posterior IMPORTAÇÃO (podendo ser através do APPEND FROM). A utilização do COPY TO com opção DELIMITERS também cria o arquivo de forma exuta (sem os espaços em brancos), porém com vírgulas quando caracter.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Responder