Espaços em arquivo CSV
06/08/2008
0
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 ;
Shion86
Posts
06/08/2008
Shion86
2002; JOAO BATISTA ; MERCEDEZ-BENZ ; 2002; MARIA BIA ; FORD ; 2003; HENRIQUE CESAR ; CHEVROLET ;
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.
06/08/2008
Misael
07/08/2008
Shion86
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
07/08/2008
Aroldo Zanela
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;
07/08/2008
Shion86
Cara mto OBRIGADOOOO mesmo!! Estou aprendendo mto com seus exemplos e agradeço pela força!!
Funcionou perfeitamente.
abraços
07/08/2008
Shion86
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______;
08/08/2008
Shion86
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;
Clique aqui para fazer login e interagir na Comunidade :)