Olá, caros companheiros. Boa noite a todos.
Não sei se nosso relacionamento já chegou a ponto de eu postar uma dúvida no meu primeiro post, rsrs, :D. Mas vamos lá.
O que eu quero?
Quero popular várias matrizes utilizando vários arquivos .txt, as coluna deste arquivo são separadas por um “|”, conforme exemplo:
|INF1|INF2|INF3|
|--------------------|
|L1C1|L1C2|L1C3|
|L2C1|L2C2|L3C3|
|L3C1|L3C2|L3C3|
…
|LNC1|LNC2|LNC3|
[size=9]Arquivo .txt[/size]
O que eu consegui?
Consegui popular um Array com todas as linhas do meu arquivo .txt. Por não conseguir criar uma matriz nem a partir do Array estou utilizando um método para separar uma String que eu informo:
Como fiz?
public class masters {
ArrayList<String> ZDPR = new ArrayList<String>();
public int ZDPR(){
try{
BufferedReader in = new BufferedReader(new FileReader("C:/ZDPRPL014.txt"));
String str;
while ((str = in.readLine())!=null){
ZDPR.add(str);
}
in.close();
}catch (IOException ioe){
System.out.println(ioe);
}
return ZDPR.size();
}
public String getZDPR(int i){
return ZDPR.get(i);
}
public String separaString(int coluna, String valor){
String s[] = valor.split(Pattern.quote("|"));
return s[coluna];
}
}
[size=15]Segue o Main disso dai:[/size][code]
public static void main(String[] args) {
masters g = new masters();
int a = g.ZDPR();
String Coluna 1 = g.separaString(0, g.getZDPR(45));
String Coluna 2 = g.separaString(1, g.getZDPR(45));
String Coluna 3 = g.separaString(2, g.getZDPR(45));
//Valores da linha 45 separado por coluna
[/code]
Problema:
Acredito que se eu conseguir popular uma matriz direto de um .txt, meu programa vai ter uma performance bem melhor, pelo fato de não precisar mais utilizar os métodos “separaString” e “getZDPR”.
Até fico meio envergonhado :oops: , porque achei um milhão de coisas sobre como manipular arquivos .txt. Mas é aquele negócio, quanto mais coisa você acha menos você aprende. Não custa nada perguntar né? :roll:
Da uma olhada.
No main chama o método chamada().
public class Masters {
public void chamada() {
criaMatriz(loadArquivo());
}
private List<String> loadArquivo() {
List<String> conteudo = new ArrayList<String>();
try {
BufferedReader in = new BufferedReader(new FileReader("C:\ZDPRPL014.txt"));
String str;
while ((str = in.readLine()) != null) {
conteudo.add(str);
}
in.close();
} catch (IOException ioe) {
System.out.println(ioe);
}
return conteudo;
}
private String[][] criaMatriz(List<String> conteudo) {
//pelo conteudo pego o n° dfe linhas para a matriz
int linha = conteudo.size();
int coluna = 0;
//pego o n° de colunas da matriz pela 1ª linha
if (conteudo.get(0).contains("|")) {
String s = conteudo.get(0);
for (int j = 0; j < s.length(); j++) {
Character c = s.charAt(j);
if (c.equals('|')) {
coluna++;
}
}
}
//como o n° de colunas eh 1 menos | vamos diminuir um na coluna
coluna = coluna - 1;
String[][] matriz = new String[linha][coluna];
for (int i = 0; i < linha; i++) {
for (int j = 0; j < coluna; j++) {
matriz[i][j] = "";
String s = conteudo.get(i);
for (int x = 0; x < s.length(); x++) {
Character caracter = s.charAt(x);
if (!caracter.equals('|')) {
matriz[i][j] += caracter.toString();
} else if (x != 0 && j < coluna - 1) {
j++;
matriz[i][j] = "";
}
}
}
}
for (int i = 0; i < linha; i++) {
for (int j = 0; j < coluna; j++) {
System.out.print(matriz[i][j]);
}
System.out.println();
}
return matriz;
}
}
Da pra melhor um pouco ou modificar a estrutura, dai é vc faz como preferir.
That’s gorgeus.
:P;
Funcionou perfeitamente. Incrível esse negócio de percorrer caractere por caractere. :lol: .
Fiz somente algumas alterações no código para jogar no meu projeto, conforme segue:
Criei uma classe para guardar o código para armazenar os dados do .txt num Array;[code]
public class Conteudo {
public List loadArquivo(String File) {
List<String> conteudo = new ArrayList<String>();
try {
BufferedReader in = new BufferedReader(new FileReader(File));
String str;
while ((str = in.readLine()) != null) {
conteudo.add(str);
}
in.close();
} catch (IOException ioe) {
System.out.println(ioe);
}
HashSet hashSet = new HashSet(conteudo); //Conjunto de dados para
ArrayList conteudo1 = new ArrayList(hashSet); //eliminar itens repetidos
Collections.sort(conteudo1); //do Array criado
return conteudo1;
}
}
[/code]
Uma outra classe que cria a matriz.[code]
public class CriaMatriz {
public String[][] criaMatriz(List conteudo) {
int linha = conteudo.size();
int coluna = 0;
if (conteudo.get(0).contains("|")) {
String s = conteudo.get(0);
for (int j = 0; j < s.length(); j++) {
Character c = s.charAt(j);
if (c.equals('|')) {
coluna++;
}
}
}coluna--;
String[][] matriz = new String[linha][coluna];
for (int i = 0; i < linha; i++) {
for (int j = 0; j < coluna; j++) {
matriz[i][j] = "";
String s = conteudo.get(i);
for (int x = 0; x < s.length(); x++) {
Character caracter = s.charAt(x);
if (!caracter.equals('|')) {
matriz[i][j] += caracter.toString();
} else if (x != 0 && j < coluna - 1) {
j++;
matriz[i][j] = "";
}
}
}
}
return matriz;
}
}
[/code]
E finalmente o main que faz esta alegria toda acontecer 8) [code]
public static void main(String[] args) {
String txt01 = "C:\Gestão\Tabelas\ZDPRPL014.txt";
String [][] ZDPRPL014;//
Conteudo conteudo = new Conteudo();
CriaMatriz Matriz = new CriaMatriz();
ZDPRPL014 = Matriz.criaMatriz(conteudo.loadArquivo(txt01));
}
[/code]
Valeu. Modifiquei da forma que melhor me cabia. Ainda não sei é a melhor, qualquer sugestão… por favor adoro pitacos, hehehe :-o . Outras alterações posto por aqui.
Valeuuuu.
Que bom que foi util a minha sugestão.
agora é isso mesmo, vai alterando conforme suas necessidades.