Toda vez que o arquivo 2 chega no final ele sai do while sobe para o outro while e começa novamente do início do arquivo2. Essa parte de instanciar tudo para voltar para a primeira linha do arquivo2, tem como fazer de outro jeito?
acredito que ninguem ainda te ajudou pq o codigo ta um pouco confuso e oq vc quis fazer tb…
(o povo aqui responde rapido =)
se o linha1, nao usa nada do linha2 nem o linha2 usa nada do linha1, pq o while do linha2 dentro do linha 1?
Rodrigo_Sasaki
Esse arquivo2 é sempre o mesmo arquivo? ou a cada execução do seu primero while ele é um arquivo diferente?
KamikazeBr
Poste o restante do código, pelo o que eu estou vendo, você precisa ler um arquivo se caso um outro exista, ou muda como @digaoneves sugeriu.
francisco.lara
São somente 2 arquivos…
No arquivo1 eu pego uma linha e verifico essa linha para todas as linhas do segundo arquivo…
Depois pego a segunda linha do arquivo1 e verifico essa linha para todas as linhas do segundo arquivo…
A idéia e simplificar esta parte abaixo, tenho que sempre fazer a parte de baixo para voltar novamente para a primeira linha do arquivo2?
acredito que ninguem ainda te ajudou pq o codigo ta um pouco confuso e oq vc quis fazer tb…
(o povo aqui responde rapido =)
se o linha1, nao usa nada do linha2 nem o linha2 usa nada do linha1, pq o while do linha2 dentro do linha 1?
Não coloquei o código completo , a idéia e vê se tem como simplificar a parte para voltar para a primeira linha do arquivo 2…
Rodrigo_Sasaki
Dependendo do número de vezes que seu while vai rodar, talvez fosse melhor você ler o seu arquivo e jogar as linhas em uma lista, aí não tem mais que acessar o arquivo pra ler a mesma coisa.
francisco.lara
o primeiro while irá rodar umas 353 vezes e o while de dentro rodará no pior caso 8 milhões de vezes, ou seja, na pior caso é 353 X 8 milhões.
Rodrigo_Sasaki
o primeiro while irá rodar umas 353 vezes e o while de dentro rodará no pior caso 8 milhões de vezes, ou seja, na pior caso é 353 X 8 milhões.
Com certeza é melhor jogar tudo pra memória, e até tentar dar uma aprimorada nisso tudo, no que você precisa comparar a linha INTEIRA precisa ser igual? ou alguma chave? talvez numérica.
francisco.lara
São somente 2 arquivos, eles sempre existem…
francisco.lara
Estou testando o algoritmo com a seguinte modificação, para ve se o resultado irá mudar
Pasei o File e os Input para fora do while, assim tento simplificar as instanciações, vendo se irá mudar algo no resultado e no desempenho…
Filelabels=newFile(arquivo2);InputStreamislabels=newFileInputStream(arquivo2);InputStreamReaderisrlabels=newInputStreamReader(islabels);while(linha_queries!=null){BufferedReaderbrlabels=newBufferedReader(isrlabels);Stringlinha_labels=brlabels.readLine();//primeira linha do arquivo 2while((linha_labels!=null)&&(linha_queries.equalsIgnoreCase(linha_labels)!=true)){linha_labels=brlabels.readLine();}.....
Rodrigo_Sasaki
Ainda acho que trabalhar com listas seria mais rápido.
KamikazeBr
Diga me, o que seu código precisa exatamente fazer?
Precisa comparar dois arquivos? Use HASH.
Precisa saber se uma ou mais linhas de um arquivo existe em outro arquivo?
O que exatamente existe em “linha_queries”? Está sendo atualizado, para ler a proxima linha?
francisco.lara
KamikazeBr:
Diga me, o que seu código precisa exatamente fazer?
Precisa comparar dois arquivos? Use HASH.
Precisa saber se uma ou mais linhas de um arquivo existe em outro arquivo?
O que exatamente existe em “linha_queries”? Está sendo atualizado, para ler a proxima linha?
Tenho dois arquivos
arquivo 1 -
obama family tree
french lick resort and casino
getting organized
toilet
AbbésS
mitchell college
kcs
air travel information
…
arquivo 2 -
Lorenza Bernot
List of celebrity guests on the Howard Stern show
Vasant Desai
Sant\u2019Angelo Lodigiano
That’s My Story - JLH Sings the Blues
KWRA-FM
Co-dependence
…
Devo pesquisar se no arquivo 1 tem ocorrência da mesma palavra no arquivo 2… se não, aplico outras tecnicas para dividir o arquivo 1 e procurar novamente no arquivo 2
Rodrigo_Sasaki
Olha cara, eu na minha ignorância não vejo jeito melhor do que adicionar as linhas de cada arquivo em uma lista, tendo assim 2 listas, e percorrê-las como você faz atualmente com os arquivos.
Correr as listas vai ser mais rápido do que ler o arquivo toda vez.
Talvez algum ViniGodoy aí tenha uma ideia mais performática, provavelmente terá.
J
jmmenezes
Também não entendi o objetivo, mas se realmente precisa encontrar um conteudo de um arquivo dentro do outro (grep), tem algumas maneiras de fazer isso que ficam mais rapidas!
Agora, se colocar na memória ou listas ajuda ou não, é meio relativo… se os arquivos forem muito grandes, imagina procurar uma linha em 100 arquivos, e cada arquivo destes tem 1gb com milhões de linhas… vai depender…
KamikazeBr
digaoneves:
Olha cara, eu na minha ignorância não vejo jeito melhor do que adicionar as linhas de cada arquivo em uma lista, tendo assim 2 listas, e percorrê-las como você faz atualmente com os arquivos.
Correr as listas vai ser mais rápido do que ler o arquivo toda vez.
Talvez algum ViniGodoy aí tenha uma ideia mais performática, provavelmente terá.
+1
Leia uma vez cada arquivo e trabalhe com as listas na memoria.
Até porque como você disse, se caso após sua primeira tentativa de comparações você teria que reler o arquivo.
PS: Quando você diz palavra, quer dizer uma frase completa?
Ate++
Rodrigo_Sasaki
jmmenezes:
…
Agora, se colocar na memória ou listas ajuda ou não, é meio relativo… se os arquivos forem muito grandes, imagina procurar uma linha em 100 arquivos, e cada arquivo destes tem 1gb com milhões de linhas… vai depender…
Ele disse que o segundo while dele pode rodar 8 milhões de vezes, pra cada uma das 353 execuções do primeiro while, eu sinceramente não acho que ler o arquivo e carregá-lo em memória a cada vez, seja mais fácil do que ja ter tudo lá. Ainda mais julgando pelo tipo de pesquisa que ele faz, onde é difícil alguma coisa bater, por ter que comparar frases.
francisco.lara
Como os dois arquivos não mudam, estou percebendo que será melhor jogar tudo para uma lista e trabalhar tudo em memória mesmo, tentarei aqui…
Abraços
francisco.lara
PS: Quando você diz palavra, quer dizer uma frase completa?
Ate++
Isso!
ViniGodoy
Se um dos arquivos pode ser carregado em memória, carregue-o num Set, ao invés de uma lista, e compare o segundo arquivo usando o contains do set.
Como o contains do set tem performance de O(1), vai ficar extremamente rápido. Além disso, o set eliminará frases duplicadas, que só atrapalhariam a performance da sua comparação.
ViniGodoy
PS: Como seu arquivo são Strings, vale a pena tambem testar a diferença entre um HashSet e um TreeSet. Creio que o segundo deva inclusive apresentar performance superior ao primeiro, pela natureza ordenada do alfabeto.