Galera estou novamente aki para perguntar como eu faço para ler uma linha específica, exemplo tenho um texto que está na linha 10 de um arquivo txt de 50 linhas quando eu aciono o botão 10, ele vai para a linha 10, se eu acionar o botão 50 ele vai para a linha 50 que está no mesmo arquivo txt, e está sendo puxado pela mesma StringItem…
Tem como isso??
[quote=decco]Galera estou novamente aki para perguntar como eu faço para ler uma linha específica, exemplo tenho um texto que está na linha 10 de um arquivo txt de 50 linhas quando eu aciono o botão 10, ele vai para a linha 10, se eu acionar o botão 50 ele vai para a linha 50 que está no mesmo arquivo txt, e está sendo puxado pela mesma StringItem…
Tem como isso??
desde já agradeço a todos
!![/quote]
Você faltou a aula de algorítimos…só pode…
Bem, a lógica é simples: Faça um loop, procurando pelos bytes 0x0D ou 0x0A no teu buffer, e a medida que encontrá-los, vá incrementando um contador que ao chegar no 9, te dá a posta de que a próxima posição após ter encontrado um destes bytes, é o início da 10a linha.
Não faltei aula de nada não vei, eu não sou programador, nem faço faculdade de programação, nem nada envolvido com informática não, eu faço faculdade de Direito não informática, eu apenas uso a informatica para aprender as coisas, sou muito curioso, por isso estou tentando aprender a desenvolver aplicativos j2me…
Nunca fiz curso de informatica, me desculpe se não sou especialista!
Rpz, na verdade eu fiz um textField para pegar os valores que eu coloquei e ir para uma form, e eu queria que por exemplo se a pessoa digitar lah 1 e apertar ok ele va para a form já visualizando a linha 1, isso já faz no normal, mas se ele colocasse lah 2 ele fosse para a mesma form, pois o texto é puxado por uma única form, só que visualizado a linha 30 que corresponde ao artigo 2
Tem como fazer, olhe o código que estou colocando no botão
if(textField.getString().equals("1")){
// Aki ele pega o artigo 1, pois está na primeira linha
getDisplay().setCurrent(getTÍTULO1());
} else if(textField.getString().equals("2")){
// No de cá ele pegaria o artigo 2 que está na linha 30 era pra ser +/- assim se funcionasse..
getDisplay().setCurrent(getTÍTULO1 na linha 30 do texto());
}
[quote=decco]Galera estou novamente aki para perguntar como eu faço para ler uma linha específica, exemplo tenho um texto que está na linha 10 de um arquivo txt de 50 linhas quando eu aciono o botão 10, ele vai para a linha 10, se eu acionar o botão 50 ele vai para a linha 50 que está no mesmo arquivo txt, e está sendo puxado pela mesma StringItem…
Tem como isso??
desde já agradeço a todos
!![/quote]
Um arquivo texto só pode ser lido “para frente” - você não pode ficar “indo e voltando” nele. É como se fosse uma fita cassete que você precisasse rebobinar completamente sempre que quisesse ir para algum lugar dessa fita.
Como você está usando JavaME, então não compensa você ficar criando um array das posições das linhas, como foi proposto, uma vez que isso consome uma quantidade razoável de memória. Você pode simplesmente reabrir o arquivo e ir lendo linha por linha até você chegar à linha 10 ou à linha 50.
rapaz, não da pra eu ler linha por linha não por pq o texto é muito grande…
Eu preciso que ele vá direto para a linha que tah a frase que eu preciso, e eu quero que ele vá só pra frente pq cada comando abriria em uma linha específica o 1 no 1, 10 no 10 20 no 20 e …
Tenho certeza que isso é possível pq esse é o mesmo sistema da bíblia para celular…
Vc seleciona o livro, capítulo e versículo e ele abre na linha certa…
[quote=decco]rapaz, não da pra eu ler linha por linha não por pq o texto é muito grande…
Eu preciso que ele vá direto para a linha que tah a frase que eu preciso, e eu quero que ele vá só pra frente pq cada comando abriria em uma linha específica o 1 no 1, 10 no 10 20 no 20 e …
Tenho certeza que isso é possível pq esse é o mesmo sistema da bíblia para celular…
Vc seleciona o livro, capítulo e versículo e ele abre na linha certa…
[/quote]
A ideia é a seguinte: leia o arquivo com um RandomAccessFile e procure as quebras de linhas. A seguir, construa um outro arquivo contendo, para cada linha, a sua posição dentro do arquivo. Quando você quiser ir para a linha 170 do arquivo-texto (digamos que a linha 170 esteja na posição 5102 do arquivo), então você pega o outro arquivo (que contém apenas as posições), recupera a posição, e usa o RandomAccessFile para ir até essa posição.
Como um arquivo texto em um celular provavelmente será bastante pequeno, ainda recomendo usar a tática “burra” que é a de ler o arquivo desde o começo.
Em uma Bíblia (que não é por número de linhas, mas sim por versículos e capítulos), é necessário usar um arquivo de índice, e isso fica como exercício para você. Dica: é parecido com a técnica que expliquei no post acima.
Mais um motivo pelo qual eu ainda recomendo a “tática burra”. Mesmo em um celular, onde o processador é um pouco mais lento que em um PC, ler um arquivo-texto de 1MB linha por linha até chegar à linha desejada não deve levar mais que um segundo.
[code]public StringItem getStringItem2() {
if (stringItem2 == null) {
// write pre-init user code here
stringItem2 = new StringItem("", null);
stringItem2.setFont(getFont1());
InputStream is = getClass().getResourceAsStream(“constituicao/titulo1.txt”);
StringBuffer sb = new StringBuffer();
try{
int chars, i = 0;
while ((chars = is.read()) != -1){
sb.append((char) chars);
}
}catch (Exception e){}
stringItem2.setText(sb.toString());
}
return stringItem2;
}[/code]
E para ir para essa form eu uso este código…
if(textField.getString().equals("1")){
// Vamos indicar para onde vai a tela caso a Senha esteja correta
getDisplay().setCurrent(getTÍTULO1());
} else if(textField.getString().equals("2")){
// Vamos indicar para onde vai a tela caso a Senha esteja correta
getDisplay().setCurrent(getTÍTULO1());
} else if(textField.getString().equals("3")){
// Vamos indicar para onde vai a tela caso a Senha esteja correta
getDisplay().setCurrent(getTÍTULO1());
} else if(textField.getString().equals("4")){
// Vamos indicar para onde vai a tela caso a Senha esteja correta
getDisplay().setCurrent(getTÍTULO1());
} else if(textField.getString().equals("5")){
// Vamos indicar para onde vai a tela caso a Senha esteja correta
getDisplay().setCurrent(getTÍTULO2());
} else if(textField.getString().equals("6")){
// Vamos indicar para onde vai a tela caso a Senha esteja correta
getDisplay().setCurrent(getTÍTULO2());
} else if(textField.getString().equals("7")){
// Vamos indicar para onde vai a tela caso a Senha esteja correta
getDisplay().setCurrent(getTÍTULO2());
} else if(textField.getString().equals("8")){
// Vamos indicar para onde vai a tela caso a Senha esteja correta
getDisplay().setCurrent(getTÍTULO2());
} else if(textField.getString().equals("9")){
// Vamos indicar para onde vai a tela caso a Senha esteja correta
getDisplay().setCurrent(getTÍTULO2());
}
....
eu queria que quando eu colocasse nele 9 ele fosse para a linha que está o artigo 9 entendeu?
só isso, seria sim o mesmo sistema da bíblia, mas ao invés de ser capítulo e versículo seria apenas o artigo…
[code] public Vector carregar(String nome_arquivo) throws FileNotFoundException, IOException {
String linha;
Vector<String> dado = new Vector<String>();
int i = 0;
File file = new File(nome_arquivo);
if (!file.exists()) {
return null;
}
BufferedReader br = new BufferedReader(new FileReader(nome_arquivo));
while ((linha = br.readLine()) != null )
{
dado.add(i, linha);
i++;
}
br.close(); //fechando Arquivo
return dado;
}
}[/code]
Bom, não sei se isso ajuda, mas esse método retorna um “vector” com o arquivo lido, ou seja na posiçao 0 do vector você terá a primeira linha do arquivo, na posição 1 você terá a linha 2 e assim por diante.
dai vc pode usar o seguinte comando pra ler o vector.
e depois é só escrever essa variavel onde você quiser.