# Gezieltes auslesen mit BufferedReader



## bernd (11. Nov 2004)

```
import java.util.*;
import java.io.*;


public class Datei4 {
    static BufferedReader in;
    static String zeile;
    static String file = "test1.txt";
  public static void main(final String[] args) {
     Vector v = new Vector();
   try {
         in = new BufferedReader(new FileReader(file));  // ließt die Datei aus
         while ((zeile = in.readLine()) != null) {
           System.out.println(zeile); // zeigt den Dateiinhalt an
         }
         in.close();
       }
       catch (Exception e) {
         System.err.println("Fehler bei Datei "+e.toString());
         System.exit(1);
       }


}
}
```

Mit diesem Code kann ich eine Textdatei komplett auslesen!
Wie geht man aber vor, wenn man nur bestimmte (Datensätze) auslesen will?
Gruß Bernd.
 ???:L


----------



## bygones (11. Nov 2004)

entweder solange mit dem BufferedReader lesen bis der gewünschte Datensatz vorhanden ist oder mit dem RandomAccessFile dingens probieren


----------



## Charly (11. Nov 2004)

Füge bei <DATEI> deinen Dateinamen ein und bei <Buchstabe/Zahl> deinen Suchbegriff,
dann sollte es so funzen.

Ich hab das bei mir in eine neue Methode gepackt ...


```
Enumeration enum = <DATEI>.elements();
while (enum.hasMoreElements())
{
	Object obj = enum.nextElement();
	zeile = (String)obj;
	if(zeile.startsWith(<Buchstabe/Zahl>)) 
	{
		   System.out.println(obj);
	}
}
```


----------



## bygones (11. Nov 2004)

Charly hat gesagt.:
			
		

> Füge bei <DATEI> deinen Dateinamen ein
> 
> ```
> Enumeration enum = <DATEI>.elements();
> ```


mhm - und was für ein typ soll <DATEI> sein... String / File ?? beide kennen die methode elements nicht !


----------



## bernd (11. Nov 2004)

Also geht das nicht über einen Index oder so!


----------



## bernd (11. Nov 2004)

deathbyaclown hat gesagt.:
			
		

> Charly hat gesagt.:
> 
> 
> 
> ...


Da blick ich jetzt aber auch nicht so ganz durch!
 :bahnhof:


----------



## Charly (11. Nov 2004)

Achso,

sorry hab nen Vekto erzeugt in den ich die Datei eingelesen habe z.B. "Test.csv" und der Name des Vektors muss bei <DATEI> eingefügt werden.


----------



## Heiko (11. Nov 2004)

Lies doch einfach jede Zeile ein, wie du es ja schon machst und gehe dann zu dem Satz den du suchst. Strings kann man doch so praktisch im IndexOF etc durchsuchen.

So habe ich es jedenfalls getan.


----------



## bernd (11. Nov 2004)

```
import java.util.*;
import java.io.*;


public class Datei4 {
    static BufferedReader in;
    static String zeile;
    static String file = "test1.txt";
  public static void main(final String[] args) {
     Vector v = new Vector();
   try {
         in = new BufferedReader(new FileReader(file));  // ließt die Datei aus
         while ((zeile = in.readLine()) != null) {
           System.out.println(zeile); // zeigt den Dateiinhalt an
           System.out.println(zeile.indexOf("Bernd"));
           
         }
         in.close();
       }
       catch (Exception e) {
         System.err.println("Fehler bei Datei "+e.toString());
         System.exit(1);
       }


}
}
```
Also so!


----------



## bygones (11. Nov 2004)

bernd hat gesagt.:
			
		

> Haste da ein kleines Beispiel zur Hand?


mhm - denk mal nach... heiko sagt: so wie du es machst, nur noch mit indexOf überprüfen... dann in api schaun, wie indexOf geht und selber machen  :wink:


----------



## bernd (11. Nov 2004)

deathbyaclown hat gesagt.:
			
		

> bernd hat gesagt.:
> 
> 
> 
> ...



Sorry hab ich gemacht.
war etwas vorschnell! :meld:


----------



## bernd (11. Nov 2004)

Danke für die Hilfe, ich denke damit kann ich mir was zusammen basteln!


----------



## Heiko (11. Nov 2004)

Gern geschehen, zur Not schau mal bei den Codebeispielen nach da hab ich sowas ähnliches schonmal reingestellt. Auch mit IndexOf etc.

Oder frag weiter bei Problemen.


----------



## bernd (11. Nov 2004)

Mach ich, bin mir sicher daß da noch so einige Fragen anfallen werden!


----------



## bernd (11. Nov 2004)

Ist wohl doch nicht so das woran ich gedacht hatte!
Ich hatte mir das so vorgestellt:

Aufbau der Textdatei:

Peter;Mustermann;Musterweg;3
Herbert;Mueller;Koelnerstrasse;9
Karl;Lustig;Muehlenweg;12

Nun kann ich ja mit IndexOf nicht auf "Herbert;Mueller;Koelnerstrasse;9" zugreifen!


----------



## Heiko (11. Nov 2004)

Ist das eine Zeile mit den drei Strings, oder wie sieht die komplette Datei aus?
Sind das immer 3 Stück pro Datensatz?


----------



## bygones (11. Nov 2004)

lies zeilenweise über BufferedReader ein.
Jede Zeile kannst du dann per

```
String[] teile = zeile.split(";");
```
teilen, dann kannst du auf den einzelnen Elemente der Zeile zugreifen...

wenn du nur überprüfen willst, ob ein Element in der Zeile ist, kannst du natürlich auch über indexOf gehen

```
if(zeile.indexOf("Hermann") != -1) {
....
}
```


----------



## Heiko (11. Nov 2004)

Genau so, hätte ichs dann auch gemacht, hab nur mal aus Interesse gefragt. ;-)


----------



## bernd (11. Nov 2004)

Alles klar so gehts! 
Allerdings muss man das was rauskommt wohl noch in einen String umwandeln,
das kann so ja keiner lesen!


----------



## bernd (11. Nov 2004)

Also irgendwas läuft hier nicht richtig!
Wenn ich mit:

```
String[] teile = zeile.split(";");
```
arbeite, und mir teile ausgeben will, bekomme ich sowas wie: java.lang18G56U51
oder so!
 ???:L


----------



## Heiko (11. Nov 2004)

Das ist der "Speicherort" den du ausgibts, zeig mal den Code wie du das machst?


----------



## bernd (11. Nov 2004)

```
import java.util.*;
import java.io.*;


public class auslesen {
    static BufferedReader in;
    static String zeile;
    static String file = "dat1.txt";
  public static void main(final String[] args) {

   try {
         in = new BufferedReader(new FileReader(file));  // ließt die Datei aus
         while ((zeile = in.readLine()) != null) {
              String[] teile = zeile.split(";");

//           System.out.println(zeile); // zeigt den Dateiinhalt an
//           System.out.println(zeile.indexOf("Steinstrasse"));
             System.out.println(teile[0]);
         }
         in.close();
       }
       catch (Exception e) {
         System.err.println("Fehler bei Datei "+e.toString());
         System.exit(1);
       }


}
}
```

Bin schon so durcheinander krieg hier nix mehr auf die Reihe! 
Jetzt werden mir nur noch die Vornamen ausgegeben!
Hätte aber gerne nicht alle, sondern nur einen bestimmten!


----------



## bernd (11. Nov 2004)

Ich glaub jetzt hab ich es!

```
import java.util.*;
import java.io.*;


public class auslesen {
    static BufferedReader in;
    static String zeile;
    static String file = "dat1.txt";
  public static void main(final String[] args) {

   try {
         in = new BufferedReader(new FileReader(file));  // ließt die Datei aus
         while ((zeile = in.readLine()) != null) {
              String[] teile = zeile.split(";");

            if(zeile.indexOf("Peter") != -1) {
                System.out.println(teile[0]);
            }
         }
         in.close();
       }
       catch (Exception e) {
         System.err.println("Fehler bei Datei "+e.toString());
         System.exit(1);
       }


}
}
```

Da hab ich jetzt aber voll auf der Leitung gestanden!


----------



## Heiko (12. Nov 2004)

Wolltest du nicht mehr Daten ausgeben? So bekommst du ja "nur" den Vornamen.


----------



## bernd (12. Nov 2004)

Doch doch, nun sieht es so aus!


```
import java.util.*;
import java.io.*;


public class auslesen {
    static BufferedReader in;
    static String zeile;
    static String file = "dat1.txt";
  public static void main(final String[] args) {

   try {
         in = new BufferedReader(new FileReader(file));  // ließt die Datei aus
         while ((zeile = in.readLine()) != null) {
              String[] teile = zeile.split(";");

            if(zeile.indexOf("Bernd") != -1) {
                System.out.println(teile[0] + " "
                 + teile[1] + " "
                 + teile[2] + " "
                 + teile[3] + " "
                 + teile[4] + " "
                 + teile[5]);
            }
         }
         in.close();
       }
       catch (Exception e) {
         System.err.println("Fehler bei Datei "+e.toString());
         System.exit(1);
       }
  }
}
```

Gruß Bernd.


----------



## Heiko (12. Nov 2004)

Freut mich, dass es geklappt hat. ;-)

Grüße Heiko


----------



## bernd (12. Nov 2004)

Und mich erst! 
Vielen Dank noch für eure Hilfe!


----------



## bygones (12. Nov 2004)

Heiko hat gesagt.:
			
		

> Das ist der "Speicherort" den du ausgibts


den fehler habe ich früher auch gemacht ! es ist nicht der speicherort !
es ist der klassenname und der hashcode des objekts !


----------



## Heiko (12. Nov 2004)

deathbyaclown hat gesagt.:
			
		

> Heiko hat gesagt.:
> 
> 
> 
> ...



 Red ich nur Schwachsinn in letzter Zeit?  ???:L


----------



## bernd (12. Nov 2004)

deathbyaclown hat gesagt.:
			
		

> Heiko hat gesagt.:
> 
> 
> 
> ...



Na da bin ich ja froh daß nicht nur mir alleine solche Fehler passieren! 
Also manchmal glaub, ich es ist besser alles liegen zu lassen
und am nächsten Tag von vorne beginnen!


----------



## Heiko (12. Nov 2004)

bernd hat gesagt.:
			
		

> deathbyaclown hat gesagt.:
> 
> 
> 
> ...



Wem sagst du das.


----------

