Olá comunidade, estou tentando fazer uma busca da seguinte maneira, pegar uma data de uma linha de um arquivo de texto até outra linha. Por exemplo, do dia 01/01/2018 até o dia 01/05/2018. Tenho 2 comboBox um “a partir…” e outro “até…” do jeito que está abaixo ele pega só o primeiro comboBox.
BufferedReaderin=newBufferedReader(newFileReader(arquivo));Stringdados=null;Stringtex;while(in.ready()){dados=in.readLine();// pega a linha do txttexto.add(dados);// armazena a linha do txtif(dados.contains((String)comboDia.getSelectedItem()+(String)comboMes.getSelectedItem()+(String)comboAno.getSelectedItem())){tex=dados;jTextArea1.append(tex+"\n");}}in.close();
se eu entendi certo, o seu arquivo contem datas e vc quer imprimir desde x ate y ( incluso as bordas do intervalo )
pois bem: vc precisa de um criterio de começo e um criterio de parada.
booleancomecou=falsewhile(in.ready()){linha=in.readLine()if(comecou){// imprime linha}if(comecou&&/* verifique se vc chegou ao fim */){comecou=false;// ou use break; para sair do loop}if(!comecou&&/* verifique se vc chegou ao inicio */){comecou=true}}
agora defina os criterios de comeco e fim
G
Gabriel_Ramos2
mas não teria que pegar os valores do comboBox? Fiz assim e não funcionou…
Qual o layout das linhas do arquivo?
Qual o formato das datas?
Estão em quais posições?
Não basta você fazer um if (linha.contains(data)) { }.
Você precisa verificar se a data que existe na linha do arquivo está dentro do intervalo de datas desejado.
privatevoidexemplo()throwsException{SimpleDateFormatformato=newSimpleDateFormat("ddMMyyyy");Dateinicio=formato.parse((String)comboDiaDe.getSelectedItem()+(String)comboMesDe.getSelectedItem()+(String)comboAnoDe.getSelectedItem());Datefim=formato.parse((String)comboDiaAte.getSelectedItem()+(String)comboMesAte.getSelectedItem()+(String)comboAnoAte.getSelectedItem());BufferedReaderentrada=newBufferedReader(newFileReader(arquivo));StringBuildertexto=newStringBuilder();Stringlinha=null;while((linha=entrada.readLine())!=null){StringcampoData=linha.substring(10,18);// posiçoes correspondentes à data na linha do arquivoDatedata=formato.parse(campoData);if(estaDentroDoPeriodo(data,inicio,fim)){texto.append(campoData).append("\n");}}entrada.close();jTextArea1.setText(texto.toString());}privatebooleanestaDentroDoPeriodo(Datedata,Datede,Dateate){if(data.equals(de)){returntrue;}if(data.equals(ate)){returntrue;}returndata.after(de)&&data.before(ate);}
G
Gabriel_Ramos2
retornou
java.text.ParseException: Unparseable date: "LPbdrY/v"
at java.text.DateFormat.parse(DateFormat.java:366)
ja add o import java.util.Date;
privatevoidlimpar()throwsException{//List<String> texto = new ArrayList();StringarquivoT=caminho;Filearquivo=newFile(arquivoT);SimpleDateFormatformato=newSimpleDateFormat("ddMMyyyy");Dateinicio=formato.parse((String)comboDia.getSelectedItem()+(String)comboMes.getSelectedItem()+(String)comboAno.getSelectedItem());Datefim=formato.parse((String)comboDia1.getSelectedItem()+(String)comboMes1.getSelectedItem()+(String)comboAno1.getSelectedItem());BufferedReaderentrada=newBufferedReader(newFileReader(arquivo));StringBuildertexto=newStringBuilder();Stringlinha=null;while((linha=entrada.readLine())!=null){StringcampoData=linha.substring(10,18);// posiçoes correspondentes à data na linha do arquivoDatedata=formato.parse(campoData);if(estaDentroDoPeriodo(data,inicio,fim)){texto.append(campoData).append("\n");}}entrada.close();jTextArea1.setText(texto.toString());}privatebooleanestaDentroDoPeriodo(Datedata,Datede,Dateate){if(data.equals(de)){returntrue;}if(data.equals(ate)){returntrue;}returndata.after(de)&&data.before(ate);}
Você disse que as linhas eram assim "000000108325112017063601397184127846", nesse caso o campo data está entre as posições 10 e 18, se suas linhas são diferentes, você tem que ajustar o código pra extrair a data da posição certa.
G
Gabriel_Ramos2
Sim. Desculpe, na ultima linha tinha um outro formato de texto… Porém agora retornou apenas a data 0101208 e não veio com o restante da linha, precisava da linha toda, teria que usar o readLine()?