Problema com manipulação de arquivo texto
galera estou com um problema:
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:
Se alguem tiver alguma solução eu agradeço !!!!!!
um abraço a todos !!!
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
Curtidas 0
Respostas
Massuda
04/10/2005
[quote:f41565fdc6=´Fabiano Góes´]mais no momento da comparacão está travando.[/quote:f41565fdc6]Imagino que você está dizendo que o seu programa congela por alguns instantes...
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...O .BeginUpdate e .EndUpdate evita que os memos sejam atualizados a cada linha inserida no memo e o .AddStrings evita perder tempo juntando todas as linhas em uma única string.
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
Massuda
04/10/2005
Depois que postei percebi que não tenho idéia do que seja RecebeEntrada e RecebeSaida no seu código original... o que são eles?
GOSTEI 0
Fabiano Góes
04/10/2005
massuda
são duas funções que tratam os arquivos para deixa-los com o mesmo layout, pois os mesmo chegam em layout diferentes
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
Fabiano Góes
04/10/2005
massuda,
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]
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