quarta-feira, 17 de agosto de 2011

Data por extenso

Por vezes surge a necessidade de escrever uma data por extenso,  por exemplo na emissão de documentos como cheques, relatórios, etc.

A procedure abaixo, realiza esta tarefa de forma simples e rápida, permitindo inclusive retornar o dia da semana.


procedure TForm1.Button1Click(Sender: TObject);

var nrdia: Integer;
    diasemana: array[1..7] of String;
    meses: array[1..12] of String;
    dia, mes, ano: Word;
begin


   {Preenchendo o array diasemana com os dias da semana ...}
   diasemana[1]:= 'Domingo';
   diasemana[2]:= 'Segunda-feira';
   diasemana[3]:= 'Terça-feira';
   diasemana[4]:= 'Quarta-feira';
   diasemana[5]:= 'Quinta-feira';
   diasemana[6]:= 'Sexta-feira';
   diasemana[7]:= 'Sábado';


   {Preenchendo o array meses com dos meses do ano ... }
   meses[1]:= 'Janeiro';
   meses[2]:= 'Fevereiro';
   meses[3]:= 'Março';
   meses[4]:= 'Abril';
   meses[5]:= 'Maio';
   meses[6]:= 'Junho';
   meses[7]:= 'Julho';
   meses[8]:= 'Agosto';
   meses[9]:= 'Setembro';
   meses[10]:= 'Outubro';
   meses[11]:= 'Novembro';
   meses[12]:= 'Dezembro';


   {Decodificando a data }
   DecodeDate(DateTimePicker1.Date ,ano,mes,dia);
   nrdia:= DayOfWeek(DATE);


   {Exibindo a data por extenso em uma Edit }
   Edit1.Text:= diasemana[nrdia]+', '+INTTOSTR(dia)+' de '+meses[mes]+' de '+INTTOSTR(ano);
end;

Esta é um a dica super simples, mas bastante funcional:

Abraço e até o próximo post.

segunda-feira, 18 de julho de 2011

Importando arquivo CSV (Texto Delimitado)

A procedure abaixo listada permite ler qualquer arquivo de texto delimitado, quer seja por virgula, ponto e vírgula ou qualquer outro delimitador. Para tanto basta informar corretamente o delimitador na função aninhada MontaValor.
No exemplo abaixo as informações contidas no arquivo texto serão gravadas em dois ClientDataSet.

procedure TForm1.ImportarCSV;
var ArquivoCSV : TextFile;
    Contador, I : Integer;
    Linha : String;


  // Lê Linha e Monta os valores
  function MontaValor : String;
  var ValorMontado : String;
  begin
     ValorMontado := '';
     inc(I);
     While Linha[I] >= ' ' do
     begin
        If Linha[I]= ';' then  // vc pode usar qualquer delimitador ... eu estou usando o ";"
        break;
        ValorMontado := ValorMontado + Linha[I];
        inc(I);
     end;
     result := ValorMontado;
  end;


begin
   // Carregando o arquivo ...
   AssignFile(ArquivoCSV, 'c:\Nome_do_Arquivo');


   try
      Reset(ArquivoCSV);
      Readln(ArquivoCSV, Linha);
      Contador := 1;


      while not Eoln(ArquivoCSV) do
      begin
         if Contador = 1 then  // Primeira Linha do arquivo (Pedido);
         begin
            I := 0;
            cdsPedido.Append;
            cdsPedidoCodigoCliente.AsString  := MontaValor;
            cdsPedidoNomeDoCliente.AsString := MontaValor;
            cdsPedido.Post;
         end
         else
         begin
            // Demais Linhas (Itens do Pedido )
            I := 0;


            cdsItensDoPedido.Append;
            cdsItensDoPedidoCodigoProduto.AsString := MontaValor;
            cdsItensDoPedidoNomeDoProduto.AsString := AnsiUpperCase(MontaValor);
            cdsItensDoPedidoQuantidade.AsFloat     := StrToFloat(MontaValor);
            cdsItensDoPedidoPreco.AsCurrency       := StrToCurr(MontaValor);
            cdsItensDoPedido.Post;
         end;


         Readln(ArquivoCSV, Linha);
         Contador := Contador + 1;
      end;


   finally
      CloseFile(ArquivoCSV);
   end;


end;


Um grande abraço e até o próximo post.