Fórum como criar arquivo texto #750

25/11/2008

0

2ª DÚVIDA: Tenho que criar esse lay-out abaixo e não sei como fazer. Tenho que pegar o Pedido do meu sistema e criar um arquivo texto, sendo o nome do arquivo o próprio número do pedido, conforme está descrito abaixo:   A - Alfanumérico - Conteúdo em Caixa Alta (Letras Maiúsculas) N – Numérico O – Obrigatório   OBS:   OS CAMPOS NÃO OBRIGATÓRIOS PREENCHER COM ESPAÇO EM  BRANCO.   CLIENTE:   POSIÇÃO   NOME DO CAMPO   TAMANHO DO CAMPO   EXEMPLO     A     N     O   01  a   01 CÓD.IDENTIF.REG. 01 C X     X 02  a   11 N. CLIENTE 10 0000000001       X X 12  a   51 NOME 40   X   X 52  a   76 APELIDO 25   X   X 77  a   96 CPF-CGC 20   X   X 97  a  116 RG 20   X   X 117 a 118 TIPO CLIENTE 02 A1  E ( A4-BLOQUEADA A VENDA ) X   X 119 a 133 VLRLIMCOMP 15     X X 134 a 173 ENDEREÇO        40   X   X 174 a 193 BAIRRO 20   X   X 194 a 200 BRANCO 07                 ITENS:     POSIÇÃO   NOME DO CAMPO   TAMANHO DO CAMPO   EXEMPLO     A     N     O   01  a   16 C.DE BARRA 16 123456----------           (ESP.EM BRANCO) X       17  a   31 QUANTIDADE (SEM VÍRGULA E PONTO) 15 000000000001000   (03 CASAS DECIMAIS)   X X 32  a   46 PREÇO (SEM VÍRGULA E PONTO) 15 000000000000125   (02 CASAS DECIMAIS)   X X               VALOR DO DESCONTO:     POSIÇÃO   NOME DO CAMPO   TAMANHO DO CAMPO   EXEMPLO     A     N     O   01  a   01 CÓD.IDENTIF.REG. 01 D X     X 02  a   16 DESCONTO (SEM VÍRGULA E PONTO) 15 000000000000125   (02 CASAS DECIMAIS)   X X                 OBS :   1-    O NOME DO ARQUIVO,É O PRÓPRIO Nº DO PEDIDO COM A EXTENÇÃO.TXT. 2-    CRIAR UMA PASTA : EXEMPLO( C:\PEDPDV\ ).CASO NÃO QUEIRA INFORMÁ O CLIENTE É SÓ NÃO INFORMÁ A LINHA “C”. COMO TAMBÉM O DESCONTO NA LINHA “D”
Fabio Gauna

Fabio Gauna

Responder

Posts

25/11/2008

Guinther Pauli

Arnoldo,  Os arquivos texto, devem ser montado concatenando várias variáveis, cada variável deve receber o valor especificado já com a formatação definida. Para iniciarmos vc precisar criar o arquivo texto e prepara-lo para a escrita. Para isso faça o seguinte: Declare uma variável chamada Arq do tipo Text File, o NomeArq é uma variável tipo string que irá receber o numero do pedido mais o caminho onde deve ser criado o mesmo. Var   Arq: TextFile;  NomeArq : String;                       NomeArq := ‘c:\PEDPDV’  + NumeroPedido; O numeroPedido vc pega de uma query ou de onde vc receber o mesmo.                             AssignFile(Arq, NomeArq + .TXT);           Rewrite(Arq); //abre o arquivo para escrita             Feito isso podemos começar a gravar escrever dentro do arquivo, como mostrado na linha abaixo. Declare uma variável para cara campo que vc deve preencher, exemplo: Var N. CLIENTE : String; NOME: String; APELIDO: String; CPFCGC: String RG: String;     Formate as variáveis conforma mostrado no arquivo de Layout. Por exemplo o nome do cliente precisa ter 40 posicoes, vc deve fazer o seguinte: Passe o valor para a variável ,   Nome: valor do nome vindo de uma query   Crie uma função para preencher os espaços com brancos para completar as 40 posicoes como mostrado abaixo   function SpacesA(NS: Integer): String; onde NS var  i : Integer; begin   for i := 1 to NS do    St := St + ;    result := St; end;   Declare uma variável para pegar a qtde de caracteres da string Var QtdeCaracteres: Integer;   QtdeCaracteres := 40 - Length(Nome);  // o método Length retorna a qtde de caracteres de uma string estou diminuindo por 40 pois é o tamanho total que o campo deve ter.   Nome:= SpacesA(QtdeCaracteres); faça a variável nome que já esta com o nome do cliente receber os espacos necessarios para completar os 40.   Após fazer o passo acima com todas as variáveis e formatando-as conforme o arquivo de Layout basta vc ir escrevendo no arquivo. Como mostrado abaixo., o WriterLn sempre insere uma nova linha no arquivo.               WriteLn(Arq, ’01’ +  // CÓD.IDENTIF.REG.                                  Nome +                                  Apelido +                                  CPFCgc);   Apos vc montar todo o arquivo, vc so preciso fechar o arquivo.. CloseFile(Arq) Era isso, vc entendendo a idéia acima consegue montar se arquivo no padrão especificado no Layout.       Aguardamos seu retorno,   abs    
Responder

Gostei + 0

26/11/2008

Arnoldo Lima

Arq: TextFile;  NomeArq : String;            NomeArq := ‘c:\PEDPDV’  + NumeroPedido; O numeroPedido vc pega de uma query ou de onde vc receber o mesmo.           O que eu estou entendendo  é que eu pegarei o número do pedido a partir da pasta ‘c:\PEDPDV’ , mas eu quero é fazer o contrário. Eu quero é gerar um arquivo texto no momento em que eu confirmar o Pedido. Daí pegar o número desse pedido e gravar dentro dessa pasta ‘c:\PEDPDV’  para ele irem acumulando dentro dela. Porque a partir daí eu quero pegar esse pedido e puxar para o sistema de TEF, ou seja, sistema de cartão de crétido do qual não é meu, é de outra pessoa.           Qual procedimento então?           Entrar no sistema dele "TEF" e pegar o pedido gravado em arquivo texto e gerar o CUPOUM FISCAL, para que o caixa não possa digitar o pedido novamente.                      COMO É A PRIMEIRA VEZ QUE FAÇO CONSULTORIA, EU ME PERDI UM POUCO. NA REALIDADE ESSA SERIA MINHA SEGUNDA DÚVIDA. EU GOSTARIA, SE POSSÍVEL, COMEÇAR COM A OUTRA DÚVIDA QUE POSTEI, QUE PARA MIM É MAIS IMPORTANTE EU PODER CONECTAR LOGO MEU BANCO VIA INTERNET.            Aguardo respostas.            Arnoldo Nunes.
Responder

Gostei + 0

26/11/2008

Guinther Pauli

Arnoldo,              Vc vai pegar o número do pedido de onde quiser, pode ser depois da confirmação do pedido, so vai mudar onde vc vai chamar a função que gera o arquivo texto.              Se vc entendeu a resposta anterior que era como montar um arquivo texto, nos confirme que está OK por favor e fechamos esse chamado que continua aberto.
 
          Qto a sua outra dúvida precisamos da sua gentileza em abrir um outro chamado (regras do sistema que gerencia os chamados), ai poderemos auxiliá-lo     Contamos com sua compreensão,
             Aguardo seu retorno,     abs
Responder

Gostei + 0

26/11/2008

Arnoldo Lima

Olá GUINTHER.
Obrigado por sua atenção.
Não, eu não entendi tudo que me passou para criar o arquivo texto.
Talvez algum exemplo fosse melhor.
Quanto ao "Se vc entendeu a resposta anterior que era como montar um arquivo texto, nos confirme que está OK por favor e fechamos esse chamado que continua aberto".   Não sei como funciona aqui ainda por isso não entendo quando diz "por favor e fechamos esse chamado que continua aberto".   Passar pra próxima se não resolvi ainda isso?   Grato Arnoldo
Responder

Gostei + 0

26/11/2008

Guinther Pauli

Arnoldo, Preparamos mais um exemplo para você, veja:     Criar um arquivo texto, passos básicos:
 
var
    F:TextFile; Begin
   AssignFile(f,c:\PEDPDV);
   Rewrite(f); //abre o arquivo para escrita    Writeln(f,Testando); escreve no arquivo e desce uma linha    Write(f,CampoFormatado); //escreve no arquivo sem descer a linha
   Closefile(f); //fecha o arquivo
End; ///Rotina para ler de um arquivo texto: var
   f:TextFile;
   linha:String; begin
   AssignFile(f,c:\PEDPDV);
   Reset(f); //abre o arquivo para leitura;    While not eof(f) do begin
     Readln(f,linha); //le do arquivo e desce uma linha. O conteúdo lido é transferido para a variável linha
     Memo1.lines.add(linha);
   End;    Closefile(f);
end;    Aguardamos seu retorno,   abs
Responder

Gostei + 0

26/11/2008

Guinther Pauli

Olá Arnoldo,   Mais alguma dúvida neste chamado ?     Se não ficou claro é só dizer.       Precisamos de seu retorno, ok ?     abs
Responder

Gostei + 0

27/11/2008

Arnoldo Lima

Estou testando por parte o último exemplo que me enviou. Ah! Ficou melhor assim.   Primeiro estou tentando criar o arquivo texto.   procedure TForm1.BitBtn1Click(Sender: TObject);
Var
F:TextFile;
begin
   AssignFile(F,c:\PEDPDV);
   rewrite(F); //abre o arquivo para escrita
   writeln(F,Testando); //escreve no arquivo e desce uma linha
   //write(F,CampoFormatado); //escreve no arquivo sem descer a linha
   closefile(F); //fecha o arquivo
end;
    Coloquei o código acima num BitBtn para testar, mas dá uma mensagem "File acces denied"       O que eu entendi:     - Com esse código é para ser criado um arquivo texto de nome F dentro da pasta c:\PEDPDV.     o comando rewrite(F) abre esse arquivo criado "F" e escreve a palavra "Testando" dentro dele.     Depois o fecha com CloseFile(F).     Sei também que se eu tivesse criado uma variável conforme abaixo daria certo    var    Caminho: String;   onde       Caminho := c:\PEDPDV;      Poderia ter subitituído por:    AssignFile(F,Caminho);           Está certo?
         Até aí beleza.     Mas este: "write(F,CampoFormatado);". Que variável é essa: "CampoFormatado".     E quanto ao erro: "File acces denied" ?      Aguardo respostas    Arnoldo Nunes
Responder

Gostei + 0

27/11/2008

Guinther Pauli

Arnoldo, -> AssignFile(F,Caminho);           Está certo? Resposta: Certo, e o erro esta ocorrendo por q vc não deve ter a pasta C:\PEDPDV;     -> Até aí beleza.
    Mas este: "write(F,CampoFormatado);". Que variável é essa: "CampoFormatado".
    E quanto ao erro: "File acces denied" ?   Resposta:O campo formatado significa as variáveis que irão receber os valores, vc lembra que
No outro post eu coloquei la as variáveis com o nome dos campos do seu arquivo
De layout que deve seguir? Enfim é o que vc precisa escrever no arquivo texto.     Aguardamos seu retorno para encerrarmos esse chamado,   abs    
Responder

Gostei + 0

27/11/2008

Arnoldo Lima

Eu tenho sim a pasta "c:\PEDPDV". Primeiro a criei no Explorer, depois fiz o procedimento. O erro continua. Não sei o que há.   Arnoldo
Responder

Gostei + 0

27/11/2008

Guinther Pauli

Anoldo,   Fiz os testes aqui se vc montou assim:
 
Var
F:TextFile;
begin
   AssignFile(F,c:\PEDPDV);
   rewrite(F); //abre o arquivo para escrita
   writeln(F,Testando); //escreve no arquivo e desce uma linha
   //write(F,CampoFormatado); //escreve no arquivo sem descer a linha
   closefile(F); //fecha o arquivo
end;

Adicione uma barra e nome do arquivo exemplo
 
Var
F:TextFile;
begin
   AssignFile(F,’c:\PEDPDV\teste.txt’);
   rewrite(F); //abre o arquivo para escrita
   writeln(F,Testando); //escreve no arquivo e desce uma linha
   //write(F,CampoFormatado); //escreve no arquivo sem descer a linha
   closefile(F); //fecha o arquivo
end;  
 
Funciona perfeitamente.       Aguardo seu retorno para encerrarmos o chamado,   abs
Responder

Gostei + 0

28/11/2008

Arnoldo Lima

ASSIM FUNCIONOU   Var
F:TextFile;
begin
   AssignFile(F,’c:\PEDPDV\teste.txt’);
   rewrite(F); //abre o arquivo para escrita
   writeln(F,Testando); //escreve no arquivo e desce uma linha
   //write(F,CampoFormatado); //escreve no arquivo sem descer a linha
   closefile(F); //fecha o arquivo
end;   Estava faltando era especificar o nome do arquivo, no caso "teste.txt"   Agora, quanto ao "CampoFormatado" ? Como posso fazer?   Tenho uma query com nome DM.TbPedido e nela tem os campos: CLIENTE VALORTOTAL DESCONTO etc semelhante ao layout acima.   Como pego dessa query para formatar e gravar nesse arquivo texto conforme layout?   Aguardo Arnoldo Nunes
Responder

Gostei + 0

28/11/2008

Guinther Pauli

Arnoldo,   Declare uma variável para cada campo que vc precisa preencher no arquivo. Exemplo:
 
Var
 Cliente : String[40]; // aqui o 40 significa que a string não vai passar desse tamanho, se for maior do que isso ele corta.
 ValorTotal : String;
 Desconto: String;
 
Depois disso associe o a variável com o valor que vêm na Query
 
Cliente := Dm.TblPedidoNomeDoCampoQueTemONomeDoCliente.asString;
ValorTotal := FloatToStr(Dm.TblPedidoNomeDoCampoQueTemOValorTotal.asFloat);
Desconto := FloatToStr(Dm.TblPedidoNomeDoCampoQueTemODesconto.asFloat);
 
Feito isso basta formatar como a definição do Layout.
Por exemplo:
 
Crie uma função para preencher com espaços em branco para finalizar o tamanho do campo como mostrado abaixo
 
function AcresEspacosADireita(Valor: String;  Qtde: Integer): String;
var
 Tam: Integer;
Begin
 
 Tam:= 0;
 Valor:= Trim(Valor);     /// Aqui tira qualquer espaço em branco que posso ter na variável cliente
 Tam:= Length(Trim(Valor)); /// Aqui pega o tamanho da string
 
 if Tam > 0 then
  Qtde:= Qtde - Tam;  // Aqui diminui o tamanho com o que precisa acrescentar
 
 for I := 1 to Qtde do
  begin
    Valor:= Valor + ; // Aqui acrescenta o espaço a direita. Se for para acrescentar a esquerda so mude para Valor:=  ‘ ‘ + Valor;
  end;
 Result:= Valor;
end;
 
Cliente:= AcresEspacosADireita(Cliente, 40); faça a variável Cliente que já esta com o nome do cliente receber os espacos necessarios para completar os 40.
E era isso, se vc precisar adiconar Zeros ao invés de espaços, crei outra função igualzinha a acima mas ao invés de acrescentar espaços colocar o Ex:  Valor:= Valor + 0;
A formatação de cada campo esta definida no seu arquivo de Layout, basta seguir campo a campo e depois Concatenar tudo no arquivo texto como mostrado abaixo.
WriteLn(F, Cliente +
                  ValorTotal +
                   Desconto);
 
Vc pode fazer assim: WriteLn(F, Cliente + ValorTotal + Desconto) so coloquei abaixo para facilitar a visualização.      Aguardo seu retorno, para finalizarmos o chamado.   abs  
Responder

Gostei + 0

28/11/2008

Guinther Pauli

Arnoldo,   Alguma dúvida sobre este assunto ?     Podemos encerrar o chamado ?   abs    
Responder

Gostei + 0

29/11/2008

Arnoldo Lima

Obrigado por sua atenção. Só peço que aguarde só mais um pouco enquanto faço alguns testes. Pode surgir alguma dúvida. Arnoldo
Responder

Gostei + 0

30/11/2008

Guinther Pauli

Arnoldo,   Preciso de sua definição se podemos encerrar o chamado,   Somos cobrados pelo tempo em que o chamado está em aberto,   Grato pela sua compreensão,   abs    
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar