Antwort
 
Themen-Optionen
Alt 07.11.2005, 08:45 Nach oben    #1
Steve231
Gast
 
Beiträge: n/a
Standard Textdatei einlesen geht nur halb?!

Hey Leudels,

ich will eine Textdatei einlesen, die folgendermaßen aussieht:

Zitat:
file generated by WUR Tool
User : 27078 - Pflaum Stefan
Date/Time : Wednesday, September,21 , 2005, 10:09
Lst: BKL1
---------------------------------------------------
Criteria
PF-d(ID) in Product Key, Product NRP, Product Step , Product Step2, Product TCU, Product SEL, Product LCK Set,Product Nr

Prod.Fam.det. No. ID Cust Failure Description Analysis Sum
Product ERD 4r893450 056424 PROBLEMS AFG 10
Product ERD 4r893450 059545 electrical troubles 1
Product ERD 4r893450 17819456324 LOCKING PROBLEM; WRONG DEMANDS 1
Product ERD 4r893450 5254012 TROUBLE DEF 1
Product ERD 4r893450 5206775 T409 ELECTRIAL OVER 1
Der Reader hierzu sieht so aus:

Zitat:
public void lesen(String datei) {

try
{
FileReader fi = new FileReader (datei);
BufferedReader buf = new BufferedReader(fi);




while (buf.readLine() != null)
{

String zeile = buf.readLine();
System.out.println(zeile);

if(testen)
{

System.out.println(zeile);
StringTokenizer stto = new StringTokenizer (zeile, "\t");
int anzahl = stto.countTokens();
System.out.println(anzahl);
if(anzahl>5)
{
String s1 = stto.nextToken();
String s2 = stto.nextToken();
String s3 = stto.nextToken();
String s4 = stto.nextToken();
String s5 = stto.nextToken();

System.out.println(s1+" || "+s2+" || "+s3+" || "+s4+" || "+s5);

carsEintragen(s3,s4,x);
}
}
else
{
System.out.println(zeile +" false!");
if (zeile.startsWith("Prod.Fam.det."))
{
this.testen=true;
}
}
}
fi.close();
}
catch ( IOException e )
{
System.out.println("Fehler beim einlesen der Datei!");
}
wie Ihr ja vielleicht erkennt möchte ich die Daten ohne den unnötigen Kopf einlösen - daher das if(startswith..) leider geht hier aber die Hälfte der Daten verloren.
die Spalten sind sauber durch Tab getrennt, dass weiß ich sicher, aber ich verstehe nicht, wieso er immer nur eine Hälfte der Datensätze einliest??

das if (anzahl>=5) dient dazu, nur die Datensätze einzulesen, die aus 5 Spalten bestehen, also vollständig sind.

Ich hoffe mir kann jemand helfen - THX schonmal vorweg..

Stefan
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.11.2005, 18:52 Nach oben    #2
Benutzer
 
Registriert seit: 15.11.2005
Beiträge: 75
Standard

Hier dürfte jede zweite Zeile verloren gehen: Du liest in jedem Schleifendurchlauf zwei Zeilen (einmal in der while-Bedingung und dann im Schleifenkörper). Ausgewertet wird aber nur die Zeile, die im Schleifenkörper gelesen wurde.

Abhilfe:
Code:
 while (true) { //--- kein buf.readLine() hier, denn damit wird ja bereits eine Zeile gelesen und nicht ausgewertet
  String zeile = buf.readLine();
 if ( zeile == null) break;
 //...
}
Man kann das vielleicht noch schöner programmieren; mancher mag sich an einem "while( true)" stören, aber
ist die Umstellung doch ziemlich einfach.
Murray ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.11.2005, 07:41 Nach oben    #3
Steve231
Gast
 
Beiträge: n/a
Standard

WoW!

Danke Murray - das war genau der Fehler und ich muss zugeben ich wäre da nie selbst draufgekommen - dachte in der while liest er das nicht extra aus, sondern prüft nur kurz ob das wahr ist... Naja, wieder ein Quäntchen schlauer - lol.
Danke nochmal, aber noch eine kurze Frage:

dasd mit dem break, geht das nicht nur in ner switch?
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.11.2005, 09:22 Nach oben    #4
Benutzer
 
Registriert seit: 15.11.2005
Beiträge: 75
Standard

Nein, break geht auch in Schleifen. Man benutzt es - ähnlich wie continue - um vom "normalen" linearen Ablauf der Schleife abzuweichen.

Bsp:

Code:
for ( int i=0; i<3; i++) {
   System.out.println( "#"+i);
   if ( i == 1) break; //--- Schleifenkörper verlassen und Schleife beenden
   System.out.println( "Es geht weiter");
}
System.out.println( "Das war's");
Ausgabe:
#0
es geht weiter
#1
Das war's


Code:
 for ( int i=0; i<3; i++) {
    System.out.println( "#"+i);
    if ( i == 1) continue; //--- Schleifenkörper verlassen und Schleife fortsetzen
    System.out.println( "Es geht weiter");
 }
 System.out.println( "Das war's");
Ausgabe:
#0
es geht weiter
#1
#2
es geht weiter
Das war's
Murray ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.11.2005, 09:28 Nach oben    #5
Steve231
Gast
 
Beiträge: n/a
Standard

Sauber:rolleyes:

Danke nochmal!
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[PHP] Gästebuch auf Textdatei basierend Jann Hendrik Tutorials 4 11.01.2006 07:50
[PHP] Wie kann ich eine Textdatei erstellen und mit Inhalt füllen? Ben Tutorials 2 06.09.2005 11:17
Datei einlesen. cyberdevil87 Allgemeine Java-Programmierung 3 27.06.2005 09:22
Datei einlesen XmX Desktop-Applikationen und Grafik 7 11.05.2005 21:17
Textdatei Zeilenanzahl? MacGyver Allgemeine Java-Programmierung 13 12.02.2005 12:39


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:14 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44