Ahoj,
potřebuji dostat do dvojrozměrného pole soubor, políčka jsou v souboru odděleny znakem - například |, co řádek souboru, to řádek pole. Mám tu sesmolený nějaký kód, na rozeznání sloupců/řádků, ale nějak se mi to nedaří rozdělit do pole.
Můžete mi nějak poradit? Co dělám špatně? Jinak na Javu nejsem zrovna expert, tak prosím, případné rady v nějaké rozumné řeči :D.
Přikládám příkladový soubor a mnou sesmolený kód.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package semestralka;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;
/**
*
* @author Jakub
*/
public class Main {
int cols;
int rows;
String [] [] db = null;
String soubor;
char rozdelovac = '|';
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws FileNotFoundException {
Scanner nacti = new Scanner(System.in);
String soubor = "C:\\Users\\Jakub\\Desktop\\";
InputStream fs = null;
// TODO code application logic here
System.out.println("Zadej nazev souboru (.txt), ktery chcete nacist a potvrdte klavesou enter:");
System.out.println("Jak ma soubor vypadat se docete v dokumentaci ...");
System.out.print("Soubor: "); soubor += nacti.next();
try {
fs = new FileInputStream(soubor);
} catch( FileNotFoundException e ) {
System.err.println("Soubor "+soubor+" nenalezen. Chyba: "+e);
System.exit(2);
}
Main volac = new Main(); // Zajištění volání nestatické metody ze statické
for (int h = 0; h < volac.Napln(soubor).length; h++)
{
for (int g = 0; g < volac.Napln(soubor).length; g++)
System.out.print(volac.Napln(soubor)[h][g]);
System.out.println("");
}
/* System.out.print(volac.Napln(soubor)[0][0]); */
}
public String[][] Napln (String soubor) throws FileNotFoundException
{
FileReader fr = new FileReader(soubor);
try {
String radek;
BufferedReader in = new BufferedReader(fr);
while ((radek = in.readLine()) != null) {
int delka = radek.length();
char znak;
int col2 = 0;
for(int i=0; i<delka; i++) {
znak = radek.charAt(i);
if (znak == rozdelovac) {col2++;}
}
if (col2 > cols) cols = col2;
col2 = 0;
rows++;
}
db = new String [cols][rows];
FileReader fe = new FileReader(soubor);
BufferedReader im = new BufferedReader(fe);
int pomrows = 0; int pomcols = 0; int poslpoz =0;
String radek2;
while ((radek2 = im.readLine()) != null) {
for (int pozice = 0; pozice<radek2.length()-1; pozice++)
{
if (radek2.charAt(pozice) == rozdelovac) //dodej rozdelovac
{
if (pozice == cols-1) {db[pomcols][pomrows] = radek2.substring(poslpoz)+" "; break; }
else {
db[pomcols][pomrows] = radek2.substring(poslpoz,pozice);
poslpoz = pozice;
pomcols++;
}
}
}
pomrows++;
}
fr.close(); }
catch (IOException e) {
System.out.println("Soubor nelze otevřít (Chyba: "+e+" )");
}
return db;
}
}
Soubor:
ID|Jmeno Prijmeni|Vek|Adresa
2|Jakub|92|Praha
Děkuji za případné rady!