Espaços em arquivo CSV

06/08/2008

2

Bom Dia Galera,


Tenho que fazer um programa aki no trampo p eliminar espaços em um arquivo csv, mas estou travado nas ideias.
Vou explicar com exemplo:


2002; JOAO BATISTA      ; MERCEDEZ-BENZ    ;
2002; MARIA BIA            ; FORD                     ;
2003; HENRIQUE CESAR  ; CHEVROLET            ;



Preciso excluir os espaços duplos, triplos, apenas deixar [b:cd8e069423]1 [/b:cd8e069423]entre as strings, mas nao alterando a posição, ficaria assim:


2002; JOAO  BATISTA     ; MERCEDEZ-BENZ    ;
2002; MARIA   BIA          ; FORD                     ;
2003; HENRIQUE CESAR  ; CHEVROLET            ;




Responder

Posts

06/08/2008

Shion86

Bom Dia Galera, Tenho que fazer um programa aki no trampo p eliminar espaços em um arquivo csv, mas estou travado nas ideias. Vou explicar com exemplo:

2002; JOAO BATISTA      ; MERCEDEZ-BENZ    ;
2002; MARIA BIA            ; FORD                     ;
2003; HENRIQUE CESAR  ; CHEVROLET            ;

Preciso excluir os espaços duplos, triplos, apenas deixar [b:1d82125a59]1 [/b:1d82125a59]entre as strings, mas nao alterando a posição, ficaria assim:

2002; JOAO  BATISTA     ; MERCEDEZ-BENZ    ;
2002; MARIA   BIA          ; FORD                     ;
2003; HENRIQUE CESAR  ; CHEVROLET            ;




ops, eu tentei colocar o codigo na tag CODE, mas acabou bagunçando tudo.

bom, o ponto-e-virgula é embaixo do outro.

01; Fernando Almeida ; Jose Carlos;
02; Joao Flores ; Ricardo ;

Após a execução do programa:

01; Fernando Almeida ; Jose Carlos ;
02; Joao Flores ; Ricardo ;

ou seja, ele tem que excluir os espaços duplos entre as strigns e adicionar no final dela o espaço retirado para que o arquivo CSV nao altere as posições.


Responder

06/08/2008

Misael

Amigo, importa esses registro para um banco dados e depois gera outro txt, acho que é o jeito mais facil e rapido de fazer isso


Responder

07/08/2008

Shion86

Oi Misael,

O problema é esse, eu tenho que importar ele pro banco, mas nao posso que seja dessa forma que ele vem, portanto tem que manipular o arquivo sempre.

a explicação acima fico ruim, pq os espaços aki nao aparecem, portanto vou usar _ no lugar dos espaços. Exemplo:

2002;JOAO_BATISTA______; MERCEDEZ-BENZ_;
2002;MARIA_BIA_________; FORD___________;
2003;HENRIQUE__CESAR__; CHEVROLET_____;

devo excluir o espaço duplo que existe entre o henrique cesar, mas nao posso tirar a formatação do arqivo, pq ele segue uma ordem


Responder

07/08/2008

Aroldo Zanela

Colega,


Não consegui fazer de imediato um exemplo mais simples, mas este aqui também resolve:

var Arquivo, Palavras: TStringList;
    Linha, NovaLinha: string;
    I, // Laço for para o arquivo
    N, // Qtde registros do arquivo
    Y: Integer; // Posição do ; na linha
begin
  Arquivo   := TStringList.Create;
  Palavras  := TStringList.Create;

  Arquivo.LoadFromFile(´D:\DADOS\ARQUIVO.TXT´);

  N := Arquivo.Count-1;

  Palavras.Delimiter := ´ ´;

  for I := 0 to N do
  begin
    Linha     := Arquivo.Strings[I];
    NovaLinha := ´´;

    repeat
      Y                       := Pos(´;´, Linha);
      Palavras.DelimitedText  := Copy(Linha, 1, Y-1);
      Linha                   := Copy(Linha, Y+1, Length(Linha));
      if Y>0 then
      begin
        NovaLinha := NovaLinha + Format(´¬-´+IntToStr(Y-1)+´s´,[Palavras.DelimitedText])+´;´;
      end;

    until Y = 0;

    Arquivo.Strings[I] := NovaLinha;

  end;

  Arquivo.SaveToFile(´D:\DADOS\ARQUIVO.TXT´);

  Palavras.Free;
  Arquivo.Free;
end;



Responder

07/08/2008

Shion86

Aroldo,

Cara mto OBRIGADOOOO mesmo!! Estou aprendendo mto com seus exemplos e agradeço pela força!!
Funcionou perfeitamente.

abraços


Responder

07/08/2008

Shion86

Aroldo,

tive um problema com um dos arquivos gerados,
ele exclui o ultimo registro da linha, caso ele nao esteja com ponto e virgula no final

2002;JOAO_BATISTA______; MERCEDEZ-BENZ_;S
2002;MARIA_BIA_________; FORD___________;N
2003;HENRIQUE__CESAR__; CHEVROLET_____; S

o arquivo gerado fica:

2002;JOAO_BATISTA______; MERCEDEZ-BENZ_;
2002;MARIA_BIA_________; FORD___________;
2003;HENRIQUE_CESAR___; CHEVROLET______;


Responder

08/08/2008

Shion86

Achei uma solução, eu sei que nao deve ser das melhores, mas precisava entregar hj o programa entao vou postar aki p vcs.


for I := 0 to N do
    begin
      Linha     := Arquivo.Strings[I] + ´; ´;  // Verifica linha por linha
      NovaLinha := ´´;

      repeat
        Y                       := Pos(´;´, Linha);       //Pega a posição da string + ;
        Palavras.DelimitedText  := Copy(Linha, 1, Y-1);  //Pega palavra antes da virgula
        Linha                   := Copy(Linha, Y+1, Length(Linha));
        if  Y > 0 then            // Verifica quantidade de caracteres por coluna
          begin
           {Formata linha a linha}
            NovaLinha := NovaLinha + Format(´¬-´+IntToStr(Y-1)+´s´,[Palavras.DelimitedText])+´;´;
          end;

      until Y = 0;

      //------------------------------------------------------------------------
      {Exclui ; e espaço no final de cada linha}

       Tam       := length(NovaLinha);
       NovaLinha := Copy(NovaLinha, 1, Tam-1);

      //------------------------------------------------------------------------
      {Adiciona as linhas já formatadas ao array }
       Arquivo.Strings[I] := NovaLinha;



Responder