Fórum Erro remover linhas em branco arquivo txt #437664
21/03/2013
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | var arquivo: TStringList; begin arquivo:= TStringList.Create; try arquivo.LoadFromFile('C:\'+'mensagens '+Edit1.Text+'-'+Edit2.Text+'.txt'); for i := 0 to arquivo.Count -1 do Begin if (arquivo.Strings[i] = '') then begin arquivo.Delete(i); end; end; arquivo.SaveTofile('C:\'+'mensagens '+Edit1.Text+'-'+Edit2.Text+'.txt'); finally arquivo.Free; end; |
Ta dando este erro: List Index out of bounds (44)
O que pode ser ?
Grato.

Vander Carlos
Curtir tópico
+ 0Posts
21/03/2013
Luiz Menin
Gostei + 0
21/03/2013
Luiz Menin
1 2 3 4 5 6 7 8 9 | arquivo.first; while not (arquivo.eof) do begin if (arquivo.Strings[i] = '') then begin arquivo.Delete(i); arquivo.next; end; |
Aguardo retorno do resultado.
Gostei + 0
21/03/2013
Vander Carlos
while not (arquivo.eof) do begin
if (arquivo.Strings[i] = '') then begin
arquivo.Delete(i);
arquivo.next;
end;
A variável arquivo é da classe TStringList, não da pra usar o first, eof...
Gostei + 0
21/03/2013
Luiz Menin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var iCont : Integer; for i := 0 to arquivo.Count -1 do Begin iCont := arquivo.count; if (arquivo.Strings[i] = '') then begin arquivo.Delete(i); iCont := iCont - 1; end; if iCont = i then exit; end; |
Gostei + 0
21/03/2013
Luiz Menin
Gostei + 0
21/03/2013
Vander Carlos
Quando crio meu arquivo txt, mando neste formato:
88888888|mensagem
No memo quando escrevo a mensagem em uma linha só ele da o erro de List index out of bounds...
Quando escrevo em uma linha e dou um Enter (Mensagem + linha em branco) ele não da erro, porém não remove os espaços em branco...
Antes que complique mais, talvez você saiba resolver esse.
Quando crio o arquivo txt, ele verifica se o telefone é fixo:
if (texto <= IntToStr(5)) then begin
//As linhas em branco que quero remover são essas que criam aqui
end
else
begin
Write(arq,'numero'+'|'+'mensagem');
end;
Gostei + 0
21/03/2013
Vander Carlos
Quando crio meu arquivo txt, mando neste formato:
88888888|mensagem
No memo quando escrevo a mensagem em uma linha só ele da o erro de List index out of bounds...
Quando escrevo em uma linha e dou um Enter (Mensagem + linha em branco) ele não da erro, porém não remove os espaços em branco...
Antes que complique mais, talvez você saiba resolver esse.
Quando crio o arquivo txt, ele verifica se o telefone é fixo:
if (texto <= IntToStr(5)) then begin
//As linhas em branco que quero remover são essas que criam aqui
end
else
begin
Write(arq,'numero'+'|'+'mensagem');
end;
Gostei + 0
21/03/2013
Marcio
por que não utiliza o label ?
funcionaria bem...
faz o seguinte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | var arquivo: TStringList; label inicio; begin arquivo:= TStringList.Create; try arquivo.LoadFromFile('C:\'+'mensagens '+Edit1.Text+'-'+Edit2.Text+'.txt'); inicio: for i := 0 to arquivo.Count -1 do Begin if (arquivo.Strings[i] = '') then begin arquivo.Delete(i); goto inicio; end; end; arquivo.SaveTofile('C:\'+'mensagens '+Edit1.Text+'-'+Edit2.Text+'.txt'); finally arquivo.Free; end; |
acho que assim vai..
falow!
Gostei + 0
22/03/2013
Vander Carlos
Obrigado :)
Gostei + 0
22/03/2013
Bruno Leandro
for i := arquivo.Count -1 downto 0 do
Begin
if (arquivo.Strings[i] = '') then begin
arquivo.Delete(i);
end;
Gostei + 0
22/03/2013
Vander Carlos
Vou ficar com as duas soluções salvas.
Abraços.
Gostei + 0
22/03/2013
Bruno Leandro
1: Texto Linha1
2: Texto Linha2
3: Texto Linha3
.
.
.
N: Texto LinhaN
N+1: Linha Vazia
N+2: Linha Vazia
N+3: Linha Vazia
N+4: Texto Linha4
neste exemplo com goto o for vai percorrer ate acha a linha N+1 que é vazia e depois volta a linha 1, ate achar a linha N+2 e voltar a linha 1 novamente ate achar a linha N+3 e voltar denovo a linha 1 e fazer esse processo de percorrer todas as linhas a numero de vezes que encontrar a linha vazia
se neste arquivo N for 10.000 teremos testado 40.004 linhas por sempre voltarmos a linha 1
utilizando conforme o modelo que passei testariamos o numero de linhas existentes no arquivo ou seja 10.000 testes
Gostei + 0
22/03/2013
Vander Carlos
E realmente se fosse pra tratar grandes registros usando o For seria muito melhor.
Obrigado :)
Gostei + 0
22/03/2013
Marcio
se neste arquivo N for 10.000 teremos testado 40.004 linhas por sempre voltarmos a linha 1
utilizando conforme o modelo que passei testariamos o numero de linhas existentes no arquivo ou seja 10.000 testes
na verdade terá testado 10.000 linhas do mesmo jeito,
porque quando volta para o label 'inicio' a contagem já diminui também...
se por exemplo tiver 10 linhas e nela tiver 2 linhas em branco, será executado
10 vezes a contagem conforme vai excluindo as linhas...
isso na verdade tem a mesma lógica do for de trás para frente...
o que importa na verdade é o código compilado gerado que será executado
N quantidade de vezes pelo processador...
Gostei + 0
22/03/2013
Bruno Leandro
http://ul.to/fmq5fets
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)