File auslesen

Status
Nicht offen für weitere Antworten.
N

nino1

Gast
Hiho,

Folgendes Problem:

Ich habe ein File, welches so aussieht:(Daten sind egal;))
[Erdbeere]
TestVar1=123456
TestVar2=0
TestVar3=CHF
Testvar4=100

[Schokoladenpudding]
Schoko1=123456
Schoko2=0

Nun will ich zu jedem dieser Abschnitte(Erdbeere und Schokoladenpudding) die zugehörigen Werte. D.h ich möchte gerne irgendwie wissen, nachdem ich das File gelesen habe, dass ich die Nachricht vom Typ Erdbeere habe mit den Werten TestVar1 = 123456 etc. Wie mache ich das am einfachsten, so dass ich am Schluss alle diese Daten zur Verfügung habe.
Ich weiss, wie ich das File lesen kann, mir geht es darum, wie ich es am einfachsten handhabe, dass ich danach alle Daten zur Verfügung habe. Man muss sich auch vorstellen, dass nach Schokoladenpudding nopchmals eine leere Zeile kommen könnte und danach wieder ein anderes Produkt wie zum Beispiel [Gurkensalat]. Das File ist übrigens immer gleich aufgebaut. Also [Produkt], danach auf einer Anzahl von x Zeilen gibt es diese Werte, danach wieder eine Leere Zeile. Ich habe mir schon überlegt, dies irgendwie mit einem Hash zu lösen, welchem ich dann als Schlüssel z.B TestVar1 gebe und dann als Wert 123456. Nur fehlt mir dann das Produkt zwischen den Klammern.

Dazu kommt noch eine Frage:
Wenn ich die Zeile "TestVar1=123456" ausgelesen habe, wie schaffe ich es, dass ich diese Zeile so trenne, dass ich in einer Variable "TestVar1" habe, und in der anderen "123456"?

Vielen Dank für die Hilfe.

Gruss,
Ninu
 

DaKo

Bekanntes Mitglied
1.
Das nächste Produkt erkennst du doch schon an '['. Also musst du nur das zwischen '[' und ']' auslesen und du weißt, zu welchem Produkt die nachfolgenden Werte gehören.

2.
Wenn du "TestVar1=123456" aufteilen willst, such dir doch einfach die Position von '='. Links davon ist der Variablenname, rechts der Wert
 

Azrahel

Bekanntes Mitglied
Also wie das gesamte Einlesen am praktischsten geht weiss ich auch nicht, wär aber auch neugierig drauf

nino1 hat gesagt.:
Wenn ich die Zeile "TestVar1=123456" ausgelesen habe, wie schaffe ich es, dass ich diese Zeile so trenne, dass ich in einer Variable "TestVar1" habe, und in der anderen "123456"?

Also das kannste mit substringing machen,
Code:
String mystring="TestVar1=123456";
String name=mystring.substring(0, mystring.indexOf("="));
String wert=mystring.substring(mystring.indexOf("=")+1, mystring.length());
kann aber sein das es je nach dem wie du das Einlesen am praktischsten regelst auch praktischer lösbar wäre. :wink:

Ist aber insgesamt auch interessant für mich weil ich ähnliche Datein lade und verarbeite, und ich mach das dann so ungefähr:
Code:
	try{
		br = new BufferedReader(new FileReader(e.getPath()+"/config/database.txt"));
		
		while((line = br.readLine())!= null)
	    {
	    	StringTokenizer tokenizer = new StringTokenizer( line, " " );
	    	String str[] = new String[2];
	    	
	    	if(tokenizer.hasMoreTokens()){
	    		 	for ( int i = 0; tokenizer.hasMoreTokens(); ++i ){
	    		 		str[i] = tokenizer.nextToken();
	    		 	}
	    		if(str[0].equals("TestVar1")){
		    		System.out.println("TestVar1="+str[1].toString());
		    	}		    	}
	    }
				    br.close();
    }catch(FileNotFoundException fnfe){
    	System.err.println("Datei nicht gefunden...");	    
    }catch(IOException ioe){
    	System.err.println("Probleme beim Lesen...");	    
    }

vielleicht hilfts dir ja :)

Oh, und das von Dako musste auch beachten wegen dem []
 
G

Guest

Gast
DaKo hat gesagt.:
1.
Das nächste Produkt erkennst du doch schon an '['. Also musst du nur das zwischen '[' und ']' auslesen und du weißt, zu welchem Produkt die nachfolgenden Werte gehören.

2.
Wenn du "TestVar1=123456" aufteilen willst, such dir doch einfach die Position von '='. Links davon ist der Variablenname, rechts der Wert

1.Leider weiss ich nicht einmal, wie ich nur zwischen [ und ] auslesen könnte. Aber dann hätte ich doch das Problem, dass ich gar nicht weiss, wieviele Zeilen danach folgen? Wie lese ich denn [Erdbeere] aus und danach alle Werte bis zum nächsten [Produkt]? Und immer noch die Frage, wie ich diese Werte dann am besten speichere, damit ich weiss, dass sie zueinandergehören. Also damit ich weiss, dass Erdbeere TestVar1-TestVarx hat mit den dazugehörigen Werten.

2.Gibt es in Java keine Splitfunktion, die mir nach "=" aufteilt und mir die Teilung in je einer Variable speichert?
In Perl funktioniert das so ähnlich:
($fn, $ln) = split("=", $in);

Dann splitte ich $in nach "=" und habe in $fn und $ln meine beiden Werte.
 

Azrahel

Bekanntes Mitglied
Hmm vielleicht wär auch so was wie ein XML-Loader ganz gut dafür. Hab aber keine Erfahrung damit. Aber ich glaub der macht so was ähnliches wie die brauchst schon, nur halt mit XML
 
G

Guest

Gast
para_ hat gesagt.:
steht doch alles in azrahels post

Der Post war noch nicht da, als ich das gerade am schreiben war;)

Falls jemand noch eine Idee hat, wie ich das am besten regle - immer gerne:)
 

DaKo

Bekanntes Mitglied
1. Solange es was zu lesen gibt
1.1 gesamte Zeile einlesen
1.2 Ist das erste Zeichen '[' ?
1.3 [Ja]
1.3.1 Dann entferne '[' und ']' aus der Zeile
1.3.2 Was übrig bleibt, ist der Produktname
1.4 [Nein]
1.4.1 Ist '=' enthalten?
1.4.2 [Ja]
1.4.2.1 Dann trenne Variable und Wert und speichere beides
Anmerkung
Da du nicht weißt, wieviel Variablen-Wert-Paare du hast, verwende einfach eine java.util.Map
1.4.3 [Nein]
1.4.3.1 Dann muss es eine Leerzeile sein ;)

Hoffe, das ist verständlich :)
 
G

Guest

Gast
Ich weiß ja nicht ganz genau wie dynamsch das ganze sein soll bzw. wie das verwendet und editiert werden soll. Baer zwei Sachen fallen mir auf anhieb ein:


-Objekte speichern

Wenn "Erdbeere" später in Form eines Objekts verwendet werden soll, das folgende Attribuet hat TestVar1=123456, TestVar2=0, TestVar3=CHF, Testvar4=100, dann solltest du am besten in deiner Klasse Erdbeere das Interface serilizable implementieren. dadurch kannst du Objekte von dem Type wegschreiben und später wieder auslesen. (Du kannst in der textdatei allerdins keine neuen Objekte händisch anlegen)



-properties-Dateien

Wenn du im Programm die Werte der "Variablen" brauchst, dann kannst du die ganz einfach über einen propertie-file einlesen:

Klasse zum einlesen:

Code:
public final class Bundle {

    /**
     * Die Properties-Datei (package + dateiname).
     */
    private static final String BUNDLE_NAME = "tesz.ressources.project";

    /**
     * Das eingelesene Ressource Bundle.
     */
    private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
            .getBundle(BUNDLE_NAME);

    /**
     * Funktionale Klasse zum Bereitstellen einer Propertie-Datei, dehalb werden
     * Instanzen verhindert.
     */
    private Bundle() {
    }

    /**
     * Liest den Wert des übergebenen Schlüssels aus dem Ressource Bundle ein,
     * wandelt ihn in einen Integer um und gibt ihn zurück. Wird der Schlüssel
     * nicht gefunden oder kann der Wert nicht umgewandelt werden, wird 0
     * zurückgegeben.
     * 
     * @param key
     *            der Schlüssel des gesuchten Werts
     * @return der gesuchte Integer Wert
     */
    public static int getInt(final String key) {
        try {
            return Integer.parseInt(RESOURCE_BUNDLE.getString(key));
        } catch (MissingResourceException e) {
            return 0;
        } catch (NumberFormatException nfe) {
            return 0;
        }
    }

    /**
     * Liest den Wert des übergebenen Schlüssels aus dem Ressource Bundle ein
     * und gibt ihn als String zurück. Wird der Schlüssel nicht gefunden wird er
     * von Ausrufezeichen umschlossen zurückgegeben.
     * 
     * @param key
     *            der Schlüssel des gesuchten Werts
     * @return der gesuchte String Wert
     */
    public static String getString(final String key) {
        try {
            return RESOURCE_BUNDLE.getString(key);
        } catch (MissingResourceException e) {
            return '!' + key + '!';
        }
    }
}

Die propertie datei:

Code:
test.int=42
test.string=hallo

[code]


der aufruf:

[code]
String test1 = Bundle.getString("test.string");   
int test2 = Bundle.getInt("test.int");
 
N

nino1

Gast
Ich habe es nun einmal irgendwie versucht zusammenzustellen aus den ganzen Antworten. Naja, für Profis sieht das wohl jetzt ein wenig nach ner Katastrophe aus;)



Code:
BufferedReader br = new BufferedReader(new FileReader("Geldautomat1.txt"));

        String line;
        while((line = br.readLine()) != null) {
            StringTokenizer T = new StringTokenizer(line);

            for(int i = 0; T.hasMoreTokens(); ++i) {

                str[i] = T.nextToken();
                // System.out.println("Token" + i +": " + str[i]);
                if(str[i].substring(0, 1).equals("[")) {
                    Typ = str[i].substring(1, str[i].indexOf("]"));
                    System.out.println("TYP: " + Typ);
                }
                else if(str[i].indexOf("=") != -1) {
                    String name = str[i].substring(0, str[i].indexOf("="));
                    String value = str[i].substring(str[i].indexOf("=") + 1, str[i].length());
                    if(Typ.equals("Erdbeere")) {
                        hashTyp1.put(name, value);
                        System.out.println(name + ": " + hashTyp1.get(name));
                    }
                    else if(Typ.equals("Schoko")) {
                        hashTyp2.put(name, value);
                        System.out.println(name + ": " + hashTyp2.get(name));
                    }
                    else if(Typ.equals("IPod")) {
                        hashTyp3.put(name, value);
                        System.out.println(name + ": " + hashTyp3.get(name));
                    }
                    else if(Typ.equals("Telefon")) {
                        hashTyp4.put(name, value);
                        System.out.println(name + ": " + hashTyp4.get(name));
                    }
                    else if(Typ.equals("Buch")) {
                        hashTyp5.put(name, value);
                        System.out.println(name + ": " + hashTyp5.get(name));
                    }
                }
            }
        }

So habe ich schlussendlich in Typ immer mein Produkt ohne Klammern und in den verschiedenen Hashtabellen habe ich per Schlüssel und Wert meine Daten. Der Haken an der Sache: Wenn mein File so aussieht:

Code:
[Erdbeere]
TestVar1=123456
TestVar2=0
TestVar3=CHF
Testvar4=100

[Schokoladenpudding]
Schoko1=123456
Schoko2=0 


[Erdbeere]
TestVar1=5343434
TestVar2=0
TestVar3=CHF
Testvar4=100

...habe ich das Problem, dass ich 2x einen Hash von Typ1 habe und somit in einem anderen File(wo das hier aufgerufen wird) nur noch die letzten Einträge von der Erdbeere habe. Ansonsten wäre alles perfekt:/ Und diese Situation kann und wird vorkommen.
 

DaKo

Bekanntes Mitglied
1.
Um ein einzelnes Zeichen aus einem String auszulesen, gibt es charAt(int index)

2.
Ich würde es spontan über eine Map<String,Map<String,String>> machen. D.h. ich würde das ganze File in eine Map packen, deren Keys die Produktnamen sind. Wenn es mehrere Produkte mit selben Namen gibt (z.B. Erdbeere) kann man diese ja durchnummerieren.
Die innere Map sind dann die Namen-Wert-Paare aus der Datei.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
AleXusher Mehrdimensionales Array aus txt.file auslesen Java Basics - Anfänger-Themen 4
B .class-File mit Reflection auslesen Java Basics - Anfänger-Themen 8
D Daten aus .jar File auslesen ? Java Basics - Anfänger-Themen 3
H Teilstrings aus file auslesen Java Basics - Anfänger-Themen 5
D Problem beim Auslesen aus File Java Basics - Anfänger-Themen 3
F Dateinamen auslesen und in File speichern! Java Basics - Anfänger-Themen 3
M Auslesen einer Datei im Jar File Java Basics - Anfänger-Themen 5
S XML-File mit DOM auslesen? Java Basics - Anfänger-Themen 6
V Änderungsdatum aus einer Access File auslesen Java Basics - Anfänger-Themen 5
N aus einer file etwas auslesen. Java Basics - Anfänger-Themen 2
F String aus .txt-File auslesen Java Basics - Anfänger-Themen 17
M Aus einer Datei (File) mehr Informationen auslesen ? Java Basics - Anfänger-Themen 8
G File auslesen u. Inhalte als table in neuem file darstellen Java Basics - Anfänger-Themen 6
C aus string-file uhrzeit auslesen?? Java Basics - Anfänger-Themen 4
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
R File.pathSeparator und File.separator Java Basics - Anfänger-Themen 46
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
izoards Prunsrv - Windows Service - .bat file starten Java Basics - Anfänger-Themen 84
I File Uploader... Statusanzeige, Berechnung des Status etc. Java Basics - Anfänger-Themen 0
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
G jar file lässt sich nicht öffnen Java Basics - Anfänger-Themen 1
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
J File length als Prüfwert für Download Java Basics - Anfänger-Themen 5
berserkerdq2 Überprüfen ob eine Schreibberechtigung auf ein file exisitert bzw. ob man dieses file löschen kann, wie? Java Basics - Anfänger-Themen 9
berserkerdq2 IOstreams, was unterscheidet file von z. B. BufferedWriter? Java Basics - Anfänger-Themen 11
J Datentypen String in File konvertieren funktioniert nicht Java Basics - Anfänger-Themen 4
A java jar-File Java Basics - Anfänger-Themen 1
E Executable jar file fehler Java Basics - Anfänger-Themen 9
I Upload File zu einem Webservice Java Basics - Anfänger-Themen 17
I ZIP File erstellen Java Basics - Anfänger-Themen 10
LeoDerKek Textdatei in JAR-File Java Basics - Anfänger-Themen 4
Tom/S File Java Basics - Anfänger-Themen 10
A Checkstyle - File contains tab characters Java Basics - Anfänger-Themen 2
H Java file nicht gefunden Java Basics - Anfänger-Themen 5
C File speichern Java Basics - Anfänger-Themen 5
C Runnable Jar-File erzeugen Java Basics - Anfänger-Themen 14
C Pfad zu Properties-File bei ResourceBundle Java Basics - Anfänger-Themen 7
F GSON file mit einer List erstellen Java Basics - Anfänger-Themen 2
rafi072001 Lesen aus einem Excel File Java Basics - Anfänger-Themen 10
C Bild in executable JAR File mitgeben Java Basics - Anfänger-Themen 5
K File (png) in Image laden Java Basics - Anfänger-Themen 3
B Inputstream in file schreiben? Java Basics - Anfänger-Themen 23
S Input/Output Reader/Writer finden file nicht Java Basics - Anfänger-Themen 3
T Buffered Stream leert Txt File Java Basics - Anfänger-Themen 3
A 2d Arrays aus txt.file einlesen Java Basics - Anfänger-Themen 16
Dimax In Java File (nicht in Java Projekt) mysql Driver importieren Java Basics - Anfänger-Themen 3
K File wird in der .Jar nicht gefunden Java Basics - Anfänger-Themen 3
E TXT FILE EINLESEN Java Basics - Anfänger-Themen 4
Trèfle EXCEL-File Laufwerkunabhängig einbinden. Java Basics - Anfänger-Themen 1
B HTML File einlesen inkl. Bilder? Java Basics - Anfänger-Themen 2
B Hilfe bei InputStream To File Java Basics - Anfänger-Themen 22
topi relativer Pfad in einem Runnable JAR file Java Basics - Anfänger-Themen 12
A jar File kleiner bekommen Java Basics - Anfänger-Themen 3
B File öffnen in src/main/webapp Java Basics - Anfänger-Themen 4
K File-Name Vergleich Java Basics - Anfänger-Themen 2
krgewb Runnable JAR File Export Java Basics - Anfänger-Themen 11
S Maxium aus einer File finden Java Basics - Anfänger-Themen 12
dapzoo Class File Version zu niedrig? Ausführen über Eingabeaufforderung nicht möglich Java Basics - Anfänger-Themen 14
D Input/Output File exists canRead canWrite Java Basics - Anfänger-Themen 11
B cal4j - Error at line 1:Unexpected end of file Java Basics - Anfänger-Themen 0
P jar file lässt sich nicht ausführen Java Basics - Anfänger-Themen 4
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
M Erste Schritte CSV-File einlesen und Daten verarbeiten Java Basics - Anfänger-Themen 5
F File von Windowsfreigabe laden Java Basics - Anfänger-Themen 1
S java.nio.file.FileSystemException bei Dateizugriff vermeiden Java Basics - Anfänger-Themen 7
Vince42 NIO File Tree in XML umwandeln Java Basics - Anfänger-Themen 10
J Zweidimensionales Array in CSV File exportieren Java Basics - Anfänger-Themen 3
E War-File Problem mit Eclipse Java Basics - Anfänger-Themen 3
B Excel File einlesen und Überschrift prüfen Java Basics - Anfänger-Themen 8
M Email versenden Outlook, attached File, ohne Anmeldung Java Basics - Anfänger-Themen 4
M Input/Output Word File Kopieren Java Basics - Anfänger-Themen 12
K Runable Jar File erstellen Java Basics - Anfänger-Themen 17
T Java Executable jar file funktioniert nicht Java Basics - Anfänger-Themen 4
sourcecorn Werte aus einem File lesen Java Basics - Anfänger-Themen 6
Kopak'rraf Korruptes zip File. Java Basics - Anfänger-Themen 0
T File für Einstellungen wird nicht geladen Java Basics - Anfänger-Themen 1
S Sounddatei in Jar File integrieren Java Basics - Anfänger-Themen 2
S Index File bauen Java Basics - Anfänger-Themen 5
T Anzeige, wie lange es noch dauert bis ein File gesendet ist. Java Basics - Anfänger-Themen 2
T filereader , file aus programm einlesen Java Basics - Anfänger-Themen 12
Ghostman1711 Itext PDF print File gelockt by Java Java Basics - Anfänger-Themen 15
N Email mit Anhang - File not Found Java Basics - Anfänger-Themen 1
K Interface Kein Bild im .jar-File Java Basics - Anfänger-Themen 15
S Bild in Jar-File mit ImageIO Java Basics - Anfänger-Themen 50
Syncopated Pandemonium Compiler-Fehler The constructor MP3File(File) refers to the missing type NoMPEGFramesException Java Basics - Anfänger-Themen 7
S File mit canRead() testen Java Basics - Anfänger-Themen 4
A file.delete funktioniert nicht Java Basics - Anfänger-Themen 15
K Classpath Lesen von Property-File Java Basics - Anfänger-Themen 1
S jar file Java Basics - Anfänger-Themen 19
B Fragen zu ZIP-File Java Basics - Anfänger-Themen 9
B Dateityp von File bekommen Java Basics - Anfänger-Themen 2
I Automatisch Verzeichnis erstellen bei File erstellen Java Basics - Anfänger-Themen 5
E Große Datenmengen effizient in CSV File speichern Java Basics - Anfänger-Themen 4
I String zu File umwandeln Java Basics - Anfänger-Themen 2
N File virtuell ByteStream Java Basics - Anfänger-Themen 11
X Übergabeparameter Konstruktor (File) Java Basics - Anfänger-Themen 13
Anfänger2011 file.isDirectory() liefert falschen Wert!? Java Basics - Anfänger-Themen 1
ms_cikar Jar file mit resource erzuegen Java Basics - Anfänger-Themen 28
E lesen csv file column by column Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben