Página 1 de 1

Gerar um arquivo TXT.

Enviado: 19 Jun 2007 16:15
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

Enviado: 19 Jun 2007 18:49
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

Enviado: 19 Jun 2007 19:04
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

Gerar um arquivo TXT opção DELIMETERS

Enviado: 20 Jun 2007 08:30
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.