Serial possivel... [resolvido] -- descobri que é possível sim
12 respostas
D
david.jv
Galera, é o seguinte, tenho uns 3000 scripts (na verdade, são arquivos txt) e gostaria de verificar se existe determinada palavra dentro desses arquivos.txt
Por exemplo: tenho dois arquivos .txt, em um deles está escrito:
“Ajude-me por favor (quebra de linha)
Não estou conseguindo resolver esse problema.”
No segundo está escrito:
“Isso é possível (quebra de linha)
em arquivos .txt”
gostaria de verificar se a palavra ‘resolver’ existe no primeiro arquivo e a palavra ‘possível’ existe no segundo arquivo.
Ler os arquivos eu consigo, só não consigo fazer essa verificação. Se alguém souber e puder me ajudar eu agradeço.
Bom dia!
Se já consegue ler o arquivo, podes ler o mesmo linha a linha ou se já tem a certeza que trata-se de um arquivo .txt, basta transformar o byte[] em String (new String(byte[]) e depois usar o método contains, ele vai lhe retornar indicando se a palavra existe ou não.
Abraços.
D
david.jv
nel, tem como eu especificar qual a linha que ele vai ler primeiro? pois eu preciso ler apenas a linha 28 e fazer a verificação.
jscamara
Fala cara,
ler determinada linha não tem como… pelo menos eu precisei outro dia e não encontrei solução.
O que você pode fazer eh contar as linhas enquanto vc vai lendo uma a uma.
Voce pode usar o BufferedReader para ler a linha, tem o metodo .readLine().
Aew como o Nel sugeriu vc usa o .contains() da classe String !
Abraços
nel
Eu estaria sendo leviano se disser que sim ou que não, pois para ser sincero, não sei.
Tudo depende do formato do seu .txt.
Por exemplo, se você me diz que ele é separado sempre por quebra de linha, você pode transformar em String, aplicar um regex, esse regex vai lhe retornar um array com n posições e ai sim, você pega a posição 27 (começa em 0). É uma idéia.
entendi jscamara, estou modificando o meu código, pois estou pegandos as palavras que preciso verificar de uma planilha no excel. quando terminar eu posto o código para vocês darem uma olhada e ver se está correto
D
david.jv
nel, sua idéia foi legal, mas a outra também deu certo, quando eu terminar eu posto o código, daí se vocês acharem melhor alterar alguma coisa vocês me falam.
D
david.jv
galera, tá ai o código:
Testei e funcionou
importjava.io.BufferedReader;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.InputStreamReader;importjxl.Cell;importjxl.Sheet;importjxl.Workbook;importjxl.read.biff.BiffException;publicclassLerArquivoTxt{publicstaticvoidmain(String[]args)throwsFileNotFoundException,IOException,BiffException{Workbookworkbook=Workbook.getWorkbook(newFile("H:/scripts/simposio I - cibele.xls"));/* pega a primeira planilha dentro do arquivo XLS */Sheetsheet=workbook.getSheet(0);//Pega a quantidade de linhas da planilhaintlinhas=sheet.getRows();intnomeScript=1;FileInputStreamstream=newFileInputStream("H:/scripts/script1/"+nomeScript+".txt");InputStreamReaderstreamReader=newInputStreamReader(stream);BufferedReaderreader=newBufferedReader(streamReader);for(inti=1;i<linhas;i++){stream=newFileInputStream("H:/scripts/script1/"+nomeScript+".txt");/* pega os valores das células como se numa matriz */Cellf1=sheet.getCell(5,i);/* pega os conteúdos das células */Stringcol7=f1.getContents();Stringlinha=null;while((linha=reader.readLine())!=null){if(linha.contains(col7)){System.out.println("Script "+nomeScript+": Ok");}}nomeScript++;}}}
D
david.jv
david.jv:
galera, tá ai o código:
Testei e funcionou
packagelerarquivotxt;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.InputStreamReader;importjxl.Cell;importjxl.Sheet;importjxl.Workbook;importjxl.read.biff.BiffException;publicclassLerArquivoTxt{publicstaticvoidmain(String[]args)throwsFileNotFoundException,IOException,BiffException{Workbookworkbook=Workbook.getWorkbook(newFile("H:/scripts/simposio I - cibele.xls"));/* pega a primeira planilha dentro do arquivo XLS */Sheetsheet=workbook.getSheet(0);//Pega a quantidade de linhas da planilhaintlinhas=sheet.getRows();intnomeScript=1;for(inti=1;i<linhas;i++){FileInputStreamstream=newFileInputStream("H:/scripts/script1/"+nomeScript+".txt");InputStreamReaderstreamReader=newInputStreamReader(stream);BufferedReaderreader=newBufferedReader(streamReader);/* pega os valores das células como se numa matriz */Cellf1=sheet.getCell(5,i);/* pega os conteúdos das células */Stringcol7=f1.getContents();Stringlinha=null;while((linha=reader.readLine())!=null){if(linha.contains(col7)){System.out.println("Script "+nomeScript+": Ok");}}nomeScript++;}}}
D
david.jv
pessoal, foi mal, o primeiro código que eu postei era o errado, mas já corrigi. O código acima agora está correto
D
david.jv
se alguém tiver uma dica para melhorar esse código me avise, ou poste ai. Agradeço ao nel e ao jscamara
nel
Não esqueça de colocar como [Resolvido] no seu tópico e de dar o close nos seus inputstream.
E antes disso, você precisa instanciar tudo dentro do seu loop?
Ao que eu vi, não podes instanciar fora dele?!
Caso o arquivo não altere o nome, deixe fora do seu loop e após sua utilização, execute os respectivos closes ok?
Abraços!
D
david.jv
nel:
Não esqueça de colocar como [Resolvido] no seu tópico e de dar o close nos seus inputstream.
E antes disso, você precisa instanciar tudo dentro do seu loop?
Ao que eu vi, não podes instanciar fora dele?!
Caso o arquivo não altere o nome, deixe fora do seu loop e após sua utilização, execute os respectivos closes ok?
Abraços!
Boa nel, esqueci de fechar os inputstream. Eu preciso instanciar sim dentro do loop, pois os nomes dos arquivos mudam (são 3 mil scripts (.txt)).
VLw