Bom dia pessoal, eu estou com o seguinte problema:
Estou tentando ler os dados de um arquivo qeu estão organizados da seguinte forma:
2 0 0 0
2 0 1 0
2 0 2 0
2 0 3 0
2 0 4 0
2 0 5 0
2 0 6 0
2 0 7 0
2 0 8 0
2 0 9 0
time
logo eu preciso colocar cada coluna em um vetor, no caso só as três primeiras colunas, logo eu terei três vetores X,Y e Z. e paro de fazer a leitura quando aparecer a palavre “time”
então como resultado terei os vetores:
X: 2 2 2 2 2 2 2 2 2 2
Y: 0 0 0 0 0 0 0 0 0 0
Z: 0 1 2 3 4 5 6 7 8 9
Alguém poderia me enviar uma solução?
Muito obrigado.
o arquivo e o vetor estão sem espaços, apenas coloquei na hora de imprimir na tela.
segue:
[code]
import java.io.*;
public class arqteste{
public static void main(String args[]) throws IOException{
File arquivo = new File("src/arqteste.txt");
int[] x = new int[10];
int[] y = new int[10];
int[] z = new int[10];
int cont = 0;
BufferedReader in = new BufferedReader(new FileReader(arquivo));
String texto = null;
while (!(texto = in.readLine()).equalsIgnoreCase("time")) {
x[cont] = Integer.parseInt(Character.toString(texto.charAt(0)));
y[cont] = Integer.parseInt(Character.toString(texto.charAt(1)));
z[cont] = Integer.parseInt(Character.toString(texto.charAt(2)));
cont++;
}
System.out.print("x: ");
for(int i=0;i<10;i++){ System.out.print(x[i]+" "); }
System.out.println("");
System.out.print("y: ");
for(int i=0;i<10;i++){ System.out.print(y[i]+" "); }
System.out.println("");
System.out.print("z: ");
for(int i=0;i<10;i++){ System.out.print(z[i]+" "); }
}
}[/code]
EDIT: o vetor estava em char, mudei pra inteiro.
douglaskd, obrigado pela ajuda, consegui rodar perfeitamente agora estou com problemas para fazer ler em arquivos que tenham espaços um exemplo:
Considere # como espaço em branco:
2#0#0#0
2#0#1#0
2#0#2#0
2#0#3#0
2#0#4#0
2#0#5#0
2#0#6#0
2#0#7#0
2#0#8#0
2#0#9#0
time
Como irei fazer para ler esse tipo de dados?
Muito obrigado mais uma vez.
bom se quiser usar aquele arquivo com espaços, troca aquele while por esse
while (!(texto = in.readLine()).equalsIgnoreCase("time ")) {
x[cont] = Integer.parseInt(Character.toString(texto.charAt(0)));
y[cont] = Integer.parseInt(Character.toString(texto.charAt(2)));
z[cont] = Integer.parseInt(Character.toString(texto.charAt(4)));
cont++;
}
agora é o seguinte… você tem que ver no arquivo se depois da palavra time tem um espaço ou não…
se você verificar que não tem espaço… altera equalsIgnoreCase("time ")
por equalsIgnoreCase("time")
douglaskd, Obrigadão pela força, realmente resolveu o problema mesmo, Agora sem querer ser chato, eu estou com esse problema agora:
Eu gerei outro arquivo e os dados apareceram
2 1 13 0
2 1 5 0
Vai sair
X: 2 2
Y: 1 1
Z: 1 5
Porém o correto seria:
X: 2 20
Y: 1 1
Z: 13 5
Será que tem como você me ajudar nesse problema?
Isto é, conseguir ler os valores com mais de uma casa decimal, independente de onde eles estejam?
Eu li algo sobre split, mas não sei como utilizá-lo nesse caso. Poderia me ajudar?
Muitissímo obrigado.
fiz as alterações usando método split…segue:
[code]import java.io.*;
public class Leitura{
public static void main(String args[]) throws IOException{
File arquivo = new File("src/arqteste.txt");
int[] x = new int[10];
int[] y = new int[10];
int[] z = new int[10];
int cont = 0;
BufferedReader in = new BufferedReader(new FileReader(arquivo));
String[] texto = new String[30];
cont =0;
String[] numeros = new String[30];
while (!(texto[cont] = in.readLine()).equalsIgnoreCase("time ")) { //quebra em linhas ignorando a palavra time
numeros = texto[cont].split(" "); //separa por espaço
x[cont] = Integer.parseInt(numeros[0]); //converte as strings em inteiros
y[cont] = Integer.parseInt(numeros[1]);
z[cont] = Integer.parseInt(numeros[2]);
cont++;
}
//a partir daqui os vetores ja estão prontos ai é só imprimir
System.out.print("x: ");
for(int i=0;i<10;i++){ System.out.print(x[i]+" "); }
System.out.println("");
System.out.print("y: ");
for(int i=0;i<10;i++){ System.out.print(y[i]+" "); }
System.out.println("");
System.out.print("z: ");
for(int i=0;i<10;i++){ System.out.print(z[i]+" "); }
}
} [/code]
douglaskd , obrigado pela força, funcionou certinho mesmo a tua solução foi primordial para eu solucionar o problema. Além disso, eu também fiz uma desse jeito:
public class Main
{
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException
{
File arquivo = new File("src/arqteste.txt");
int cont = 0;
try
{
BufferedReader in = new BufferedReader(new FileReader(arquivo));
String texto = null;
while (!(texto = in.readLine()).equalsIgnoreCase("time"))
{
String dados[] = texto.split(" ");
int tempx = Integer.valueOf(dados[0]);
int tempy = Integer.valueOf(dados[1]);
int tempz = Integer.valueOf(dados[2]);
cont++;
System.out.println("X="+ tempx + " Y=" + tempy + " Z=" + tempz)
}
catch (Exception ex)
{
System.out.println("\nErro ao tentar abrir: Verifique o nome do arquivo e o lugar onde ele está");
}
}
}
Porém a tua solução é mais elaborada e bem mais fácil de entender.
Muitissimo obrigado
Agora meu grande problema é o seguinte:
Em alguns arquivos aparece a palavra time mais de uma vez:
Ex
2 0 0 0
2 0 1 0
2 0 2 0
2 0 3 0
2 0 4 0
2 0 5 0
2 0 6 0
2 0 7 0
2 0 8 0
2 0 9 0
2 0 10 0
2 0 11 0
2 0 12 0
2 0 13 0
2 0 14 0
time
2 59 46 0
2 59 47 0
2 59 48 0
2 59 49 0
2 59 50 0
2 59 51 0
2 59 52 0
2 59 53 0
2 59 54 0
2 59 55 0
2 59 56 0
2 59 57 0
2 59 58 0
2 59 59 0
time
Ou seja, quando chegar no time ele armazena os valores no vetor, isso já estou conseguindo fazer, agora como continuar armazenando outros valores depois do time?
logo ficará assim:
X = 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
Y = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Z = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X1 = 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
Y1 = 59 59 59 59 59 59 59 59 59 59 59 59 59 59
Z1 = 46 47 48 49 50 51 52 53 54 55 56 57 58 59
Obrigado mais uma vez pela força.
começou a ficar grandinho.
[code] import java.io.*;
public class Leitura{
public static void main(String args[]) throws IOException{
File arquivo = new File("src/arqteste.txt");
int[][] x = new int[100][100];
int[][] y = new int[100][100];
int[][] z = new int[100][100];
int cont = 0;
int cont2 =0;
int times =0;
BufferedReader in = new BufferedReader(new FileReader(arquivo));
String[] texto = new String[300];
String[] numeros = new String[300];
while ((texto[cont] = in.readLine()) != null) { //lê linha por linha
if(texto[cont].equals("time "))
{
cont2 = 0;
times++;
}else
{
numeros = texto[cont].split(" "); //separa por espaço
x[times][cont2] = Integer.parseInt(numeros[0]); //converte as strings em inteiros
y[times][cont2] = Integer.parseInt(numeros[1]);
z[times][cont2] = Integer.parseInt(numeros[2]);
cont++;
cont2++;
}
}
//a partir daqui as matrizes ja estão prontas ai é só imprimir
for(int i=0;i<times;i++){
System.out.print("x["+i+"]: ");
for(int j=0;j<10;j++)
{
System.out.print(x[i][j]+" ");
}
System.out.println("");
System.out.print("y["+i+"]: ");
for(int j=0;j<10;j++)
{
System.out.print(y[i][j]+" ");
}
System.out.println("");
System.out.print("z["+i+"]: ");
for(int j=0;j<10;j++)
{
System.out.print(z[i][j]+" ");
}
System.out.println("");
}
}
} [/code]