Hilfe... Textdatei einlesen als voll :(

UrzaKeFrostgard

Grünschnabel
Hallo,

vorweg... ich sitze seit drei Tagen vor Google und seit heute vor diesem Forum denn ich habe ein Problem...

Ich muss eine Textdatei auslesen 76x23 Werte/Wörter/Zahlen sie soll beim Start meines Programms in ein String Array gespeichert werden... das Array erstellen ist kein Problem und auch das umwandeln von String in Int nicht...

Aber das auslesen, zuerst wollte ich das ganze mit einer SQL Datenbank lösen was allerdings noch komplizierter ist - meiner Meinung nach :D - also wollte ich doch mal im Internet herumschauen ob ich nicht eine Anleitung finde um die Textdatei auszulesen und in ein Array zu speichern...

Anleitungen habe ich gefunden XD aber keine einzige Verstanden da sie irgendwie vorraussetzen das man die Befehle kennt. Nun ich kann meinen Taschenrechner problemlos programmiren und auch in Java habe ich bisher keine direkten Probleme gehabt aber durch dieses Auslesen mit BufferReader, Schleifen, Zeilentrennen, Vektor... usw blick ich total nicht durch und auch die ganzen fertigen Programmzeilen helfen mit nicht weiter -.- denn ich versteh sie nicht mal Ansatzweise ich weiß was die Schleife macht und was die einzelnen Befehle tun sollen aber wie die zusammenarbeiten oder was sie genau machen... fragt mich bitte nicht.

Ich würde mich freuen wenn mir jemand helfen könnte :) und zwar in einer Sprache die man relativ leicht versteht also z.B. //Bemerkungen was wie wann womit gemacht wird.

Eine fertige Schleife welche die Datei ausließt und in ein Array speichert würde mir zwar sehr helfen :) aber ich würde es gerne auch verstehen.


Für die unter euch die sich jetzt fragen wozu ich das brauchen ^^ ich programmiere grade zusammen mit einem Freund ein "Fanatsy Kartenspiel" und brauche das Array bzw das auslesen um die Werte zu bekommen die beim Ausspielen einer Karte zu tragen kommen.

^^ Wenn das Programm fertig ist stell ich euch hier gerne vor :) falls jemanden Acromage was sagt der wird sich freuen :)



Vielen vielen Dank schonmal
Urza ke Frostgard

//edit
Problem gelöst :)
 
Zuletzt bearbeitet:
Hallo,

zum Auslesen einer Datei gibt's sicherlich viele Möglichkeiten. Ich glaube die einfachste ist, die Datei in einen Bufferdereader zu laden und die Daten zeilenweise auslesen. Hier ein kleines Beispiel, ich habe etwas ausführlicher gemacht, um jeden Schritt zu kommentireren, sonst könnte man das auch kompakter hinkriegen:
Java:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

/**
 * The Class <code>ReadFromFileTest</code>.
 */
public class ReadFromFileTest {

    /**
     * The main method.
     *
     * @param args the arguments
     */
    public static void main(String[] args) throws Exception {
        // erst erzeugst du einen FileReader zum Einlesen der Datei
        final Reader reader = new FileReader("C:/tmp/test.txt");
        // dann verpackst du den FileReader in einen BufferedReader, damit du
        // die Datei bequem zeilenweise auslesen kannst
        final BufferedReader buffer = new BufferedReader(reader);
        // einen "Datenhalter" vorbereiten, der die ausgelesenen Daten speichert
        final List<String[]> rows = new ArrayList<String[]>();
        // dann liest du die Datei Zeile für Zeile aus dem Buffer...
        String line;
        // solange die die Zeile nicht "null" ist (d.h. Ende der Datei)...
        while ((line = buffer.readLine()) != null) {
            // jede Zeile musst du noch in einzelnen Werte zerlegen, am besten mit
            // einem StringTokenizer...
            final StringTokenizer tokenizer = new StringTokenizer(line, "|");
            // der delimiter (in dem Fall "|") muss dem in der Datei entsprechen
            // den Datenhalter für die aktuelle Zeile vorbereiten
            final String[] row = new String[tokenizer.countTokens()];
            // alle tokens durchlaufen und im Datenhalter speichern
            for (int i = 0; tokenizer.hasMoreTokens(); i++) {
                row[i] = tokenizer.nextToken();
            }
            // die Zeile in dem Datenhalter speichern
            rows.add(row);
        }

        // hier kannst du die daten zur kontrolle ausgeben
        printRows(rows);
    }

    /**
     * Prints the rows.
     *
     * @param rows the rows
     */
    private static void printRows(final List<String[]> rows) {
        for (String[] row : rows) {
            for (int i = 0; i < row.length; i++) {
                System.out.print(row[i] + " ");
            }
            System.out.println();
        }
    }
}

Meine Datei sieht dann etwa so aus:
Code:
value_0_0|value_0_1|value_0_2|value_0_3|value_0_4|value_0_5
value_1_0|value_1_1|value_1_2|value_1_3|value_1_4|value_1_5
value_2_0|value_2_1|value_2_2|value_2_3|value_2_4|value_2_5

Hoffe, ich konnte Dir helfen.

Grüße
Vincent
 
Mal ne allgemeine Frage dazu.

Wenn ich den Post richtig verstanden habe, wird ja überlegt vielleicht auch ne Datenbank anstatt ner Textdatei zu nehmen, wie wäre es denn vielleicht mit XML.

Also ich persönlich finde es weitaus angenehmer mit ner XML-Datei zu arbeiten, anstatt einer Textdatei. Daher auch meine Frage: Was ist der Vorteil einer Textdatei?

gruß klaus.
 
Also ich hab keine Ahnung von XML :) und Textdatei war das was nach der DB für mich als ehestes in Frage kam an XML habe ich garnicht gedacht.
Ich habe einfach meine Excel Tabelle in eine txt kopiert und hatte mein "Datenbank"

Danke für deine schnelle Hilfe Vinc :) doch ich habe jetzt aus den Sachen die ich im Internet gefunden haben über kurz oder lang mit viel Probierei eine Möglichkeit gefunden die ich noch etwas übersichtlicher Finde als deine:

Code:
import java.io.FileReader;
import java.io.IOException;

public class MainClass {

	static String filename = "Vum.txt";
	static String[][] kartenVUM = new String[75][23];

	public static String readFile(String filename) {
		String ergebnis = null;
		FileReader datei;

		try {
			datei = new FileReader(filename);

			int gelesen = datei.read();
			while (gelesen != -1) {
				if (ergebnis == null) {
					ergebnis = "" + (char) gelesen;
				} else {
					ergebnis = ergebnis + (char) gelesen;
				}
				gelesen = datei.read();
			}

			datei.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

		return ergebnis;
	}

	public static void main(String[] args) throws IOException {
		MainWindow main = new MainWindow();

		String inhalt = readFile(filename);

		if (inhalt != null) {
			int x = 0;
			String[] zeilegetrennt = inhalt.split("\n");

			while (x < 75) {
				System.out.println("");
				String[] tabgetrennt = zeilegetrennt[x].split("\t");
				for (int y = 0; y < tabgetrennt.length; y++) {
					kartenVUM[x][y] = tabgetrennt[y];
				}
				x++;
			}

		}

		main.setVisible(true);

	}

}

Als erstes Lese ich die gesamte Datei in eine Spalte ein im zweiten Schritt wird die lange Zweile dann wieder in mehrere Zeilen unterteilt jede meiner Karten hat hier ihre eigene Spalte.
Zu guter letzt spalte ich noch jede Reihe in ihre bestandteile auf und füge sie in mein zu benutzen Array.

die main.sets sind für die GUI müssen nicht berücksichtig werden!


Alles in allem ist dein Code wirklich sehr übersichtlich :D aber schon mit Final ^^ und Tokenizier weiß ich nicht viel anzufangen Final hat irgendwas damit zu tun wie die Variable deklariert wird ^^ aber sonst.


Nun ja keine Ahnung ob meine bzw deine Methode die einfachste ist :) vllt gibt es ja noch jemanden der noch einfachere Methoden weiß um txt Dateien auszulesen.
Und zum XML ^^ des hat doch was mit HTML zu tun oder?

Urza :)
 
Ich habe einfach meine Excel Tabelle in eine txt kopiert und hatte mein "Datenbank"

Nur mal so noch zwei kleine Hinweise am Rande:

1. Es gibt um auf Excel-Dokumente zuzugreifen sogar bestimmte Java-Klassen. Ich hab da auch noch nie mit gearbeitet, aber auf die Excel-Dateien direkt zuzugreifen soll mit einer API möglich sein, die es hier gibt: http://jexcelapi.sourceforge.net/

2. Was du da offenbar hast, ist eine Tab-getrennte CSV-Datei (normalerweise nimmt man da Kommas für, aber Tab geht natürlich auch). Die Dinger kann Excel direkt speichern, ganz ohne rauskopieren :) - Und auch dafür gibt's zum Einlesen spezielle APIs für Java.
 
Zurück