Arquivo csv com 70.000 linhas deixar com 20 linhas [RESOLVIDO]
7 respostas
A
ArturFigueiredo
Pessoal,
Tenho um dataloger que me fornece dados a cada minuto, dai vc pode ver a quantidade de dados gerados. Sendo que só utilizo os úlltimos 20 dados para fazer um grafico.
Meu gráfico está perfeito sem problemas, mas esta ficando com delay devido a quantidade de dados que tem que filtrar a cada minuto. Como o lugar é remoto uso modem 2G e estou gastando sem necessidade os preciosos bites.
Minha intenção é gerar outro arquivo com somente os últimos 20 dados e ficar enviando esse arquivo.
Pq vc não cria um arquivo novo, salva as ultimas 20 linhas e apaga o arquivo velho?
A
ArturFigueiredo
Eu preciso do arquivo completo como banco de dados.
Para enviar para o servidor só preciso dos ultimos 20 dados para fazer o grafico.
Se eu ficar fazendo isso manualmente deixa de ser viável.
O dataloger vai adicionando novas linhas no arquivo que existe.
O Wagner me passou uma dica usar o tail, sendo que é linux.
O tail mostra a quantidade de linhas que vc quer.
abs
xandevieira
Acho q ficou meio gambiarra. Mas funciona.
publicstaticvoidleitura(){FilearquivoLeitura=newFile("d:/temp/log.txt");DatedateInicio=DateUtils.getDataAtual();try{FileReaderfileReader=newFileReader(arquivoLeitura);// LineNumberReader linhaLeitura = new LineNumberReader(fileReader);// linhaLeitura.skip(arquivoLeitura.length());// int qtdLinha = linhaLeitura.getLineNumber();// System.out.println(qtdLinha);BufferedReaderbufferedReader=newBufferedReader(fileReader);Stringline;List<String>list=newArrayList<String>();while((line=bufferedReader.readLine())!=null){list.add(line);}Collections.reverse(list);for(inti=0;i<10;i++){System.out.println(list.get(i));}}catch(Exceptione){thrownewRuntimeException(e);}finally{DatedateFim=DateUtils.getDataAtual();System.out.println("Iniciou as : "+DateUtils.convertddMMyyyy_HHmmss(dateInicio));System.out.println("Terminou as : "+DateUtils.convertddMMyyyy_HHmmss(dateFim));}}publicstaticStringconvertddMMyyyy_HHmmss(Datedate){returnconvertDate("dd/MM/yyyy - HH:mm:ss",date);}publicstaticStringconvertDate(Stringformat,DatedtConsulta){try{SimpleDateFormatformatter=newSimpleDateFormat(format,newLocale("pt","BR"));returnformatter.format(dtConsulta);}catch(Exceptione){returnnull;}}
Testei com um arquivo com 199306 linhas e foi bem rapido, não levou 2 segundos. Claro, rodei localmente.
ViniGodoy
Sua intenção eu entendi. Mas qual é o seu problema? O que te impede de gerar um novo arquivo e envia-lo?
A
ArturFigueiredo
Nada me impede de todo dia, guardar o arquivo gerado, e começar um novo.
Mas vou ter que acessar todo dia a estação remota, ou outro prazo, fazer um backup do arquivo, renomear com uma data para fazer o banco de dados e apagar todos os dados desse arquivo enviado.
Vou ter que ficar fazendo intervenções na estação sem necessidade e ter vários arquivos. Posso tb ter um arquivo só e ficar copiando e colando.
Por isso eu quero automatizar completamente a estação, sem precisar fazer nada manualmente. Lembrando que a estação esta num lugar remoto, quanto menor intervenções melhor.
Estou fazendo um programa em javascript para fazer essa função, mas esta dando erro.