Fórum Problema com manipulação de arquivo texto #298314
04/10/2005
0
Estou fazendo uma comparação entre dois arquivos texto para saber quais registros estão no arquivo1 e não estão no arquivo2, mais no momento da comparacão está travando.
eis meu codigo:
(* ****************** Receber arquivo1*********************** *) lista1 := TStringList.Create; // funçao que recebe e trata o arquivo2 lista1.Text := RecebeEntrada(´C:\_DES\BackUp\nos.sem´).Text; lista1.Sort; Memo1.Text := lista1.Text; (* ****************** Receber arquivo2*********************** *) lista2 := TStringList.Create; // funçao que recebe e trata o arquivo2 lista2.Text := RecebeSaida(´C:\_DES\BackUp\09304001.r01´).Text; lista2.Sort; Memo2.Text := lista2.Text; (* ******************Comprara Arquivos********************** *) Resul := TStringList.Create; for i := 0 to lista1.Count - 1 do if lista2.IndexOf(lista1.Strings[i]) < 0 then Resul.Add(lista1.Strings[i]); memo3.Text := Resul.Text;
Se alguem tiver alguma solução eu agradeço !!!!!!
um abraço a todos !!!
Fabiano Góes
Curtir tópico
+ 0Posts
04/10/2005
Massuda
Como você já usa listas ordenadas (o que significa que o IndexOf usa busca binária) não sei se qualquer outra mudança ajudaria... eu faria apenas algumas pequenas modificações no seu código...
(* ****************** Receber arquivo1*********************** *) lista1 := TStringList.Create; // funçao que recebe e trata o arquivo2 lista1.LoadFromFile(´C:\_DES\BackUp\nos.sem´); lista1.Sort; Memo1.Lines.BeginUpdate; Memo1.Lines.AddStrings(lista1); Memo1.Lines.EndUpdate; (* ****************** Receber arquivo2*********************** *) lista2 := TStringList.Create; // funçao que recebe e trata o arquivo2 lista2.LoadFromFile(´C:\_DES\BackUp\09304001.r01´); lista2.Sort; Memo2.Lines.BeginUpdate; Memo2.Lines.AddStrings(lista2); Memo2.Lines.EndUpdate; (* ******************Comprara Arquivos********************** *) Resul := TStringList.Create; for i := 0 to lista1.Count - 1 do if lista2.IndexOf(lista1.Strings[i]) < 0 then Resul.Add(lista1.Strings[i]); Memo3.Lines.BeginUpdate; Memo3.Lines.AddStrings(Resul); Memo3.Lines.EndUpdate;
Gostei + 0
04/10/2005
Massuda
Gostei + 0
04/10/2005
Fabiano Góes
RecebeEntrada e RecebeSaida
são duas funções que tratam os arquivos para deixa-los com o mesmo layout, pois os mesmo chegam em layout diferentes
Gostei + 0
04/10/2005
Fabiano Góes
esta funcionando, só que estou achando meio lento ainda fiz um teste:
o arquivo1 = 6370(registros)
o arquivo2 = 5752(registros)
leva em média: 50 segundos para fazer a comparação,
[color=red:f6a7683d48][b:f6a7683d48]Será que está maneira que estou fazendo é a mais viável ?[/b:f6a7683d48][/color:f6a7683d48]
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)