# CSV-file zeilenweise einlesen, was bearbeiten, nächste Zeile



## -horn- (25. Okt 2008)

moien,

ich habe eine CSV-datei die so ähnlich aufgbeaut sein soll.

durchnummerierung1;wert1;wert2;wert3;wertn
durchnummerierung2;wert1;wert2;wert3;wertn
durchnummerierungn;wert1;wert2;wert3;wertn


ich würde nun gerne diese csv-datei so zeilenweise einlesen, dass ich mit den werten eine berechnung durchführen kann und erst danach die nächste zeile aufgerufen wird.
dabei muss ich auch die stelle des wertes in der zeile wissen.

wie würde das gehen?

grüße, Andreas


----------



## -horn- (25. Okt 2008)

moien,

noch nicht gut, aber funktioniert.


```
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package readline;

/**
 *
 * @author Andreas
 */
/* Listing1809.java */

import java.io.*;

public class Listing1809
{
  public static void main(String[] args)
  {
    LineNumberReader f;
    String line;

    try {
      f = new LineNumberReader(
          new FileReader("c:\\csv.txt"));
      while ((line = f.readLine()) != null) {
          
          String[] daten = line.split(";");
          System.out.print("Datenlaenge: " + daten.length + " ");
          
          System.out.print(f.getLineNumber() + ": ");
          System.out.print(line);
          
          int tmp = 0;
          for(int i=1; i<daten.length; i++){
              tmp = tmp + Integer.parseInt(daten[i]);
          }
          System.out.println(" = " + tmp);
          
      }
      f.close();
    } catch (IOException e) {
      System.out.println("Fehler beim Lesen der Datei");
    }
  }
}
```

quellen:
teils http://forum.de.selfhtml.org/archiv/2005/5/t108544/
teils http://www.javabuch.de/


----------



## musiKk (25. Okt 2008)

Ich benutze für CSVs diese Lib.


----------



## -horn- (27. Okt 2008)

musiKk hat gesagt.:
			
		

> Ich benutze für CSVs diese Lib.



hmmm,
auch sehr interessant. werd ich mal genauer angucken müssen 

Danke dir!


----------



## just-me (7. Nov 2008)

Hallo, 

habe folgendes Problem. soll von einer csv-Datei spalteweise auslesen. habe schon den CsvReader probiert, komme aber nicht weiter.

Kann mir bitte jemand helfen!

mfg
chris


----------



## ARadauer (7. Nov 2008)

wo ist das problem?


----------



## Guest (7. Nov 2008)

das ich nicht weiß wie ich die spalten auslese!

ich weiß nicht wie ich die spalte festlegen soll.

wenn ich zum beispiel die spalte F auslesen will wie definiere ich das?


----------



## Verjigorm (7. Nov 2008)

Wie definierst du Spalte F?

Wenn F für den 6. Eintrag steht:

Zeilenweise einlesen und aus jeder Zeile den 6. Eintrag auslesen (und am besten speichern/ausgeben)
Den 6. Eintrag kriegste z.B. mit String.split()


----------



## just-me (7. Nov 2008)

ich definiere gar nicht. ich habe eine csv datei mit 30000 verschiedenen werten bekommen uns soll nur die werte von einer spalte in einen vector schreiben.

ich kann zwar die daten lesen, indem ich einfach alles durch ; trenne eben mit split, aber die werte stehen ja dann alle in einer wurscht da. wie kann ich da immer den 6. wert bekommen. ich meine vom anfang der zeile?


----------



## SlaterB (7. Nov 2008)

String[] parts = zeile.split(";");

String sechsterPart = parts[5]; // oder 6 oder was auch immer

?


----------



## Verjigorm (7. Nov 2008)

just-me hat gesagt.:
			
		

> ich definiere gar nicht. ich habe eine csv datei mit 30000 verschiedenen werten bekommen uns soll nur die werte von einer spalte in einen vector schreiben.
> 
> ich kann zwar die daten lesen, indem ich einfach alles durch ; trenne eben mit split, aber die werte stehen ja dann alle in einer wurscht da. wie kann ich da immer den 6. wert bekommen. ich meine vom anfang der zeile?



Vielleicht mal einfach schauen, was split() zurückgibt ....


----------



## just-me (7. Nov 2008)

dankee!!!
hat geholfen


----------



## Guest (14. Nov 2008)

hallo! hab ne frage...
ist es möglich spalten in einem csv-file nach einem bestimmten kriterium auszulesen.

meine z.b. wenn es die spalte nachname gibt, und ich lese die gesamte csv-datei aus und stoße auf die spalte nachname, dann will ich wissen in welcher spalte sich diese befindet, damit ich dann nur noch diese spalte auslesen kann.

hat vll jemand eine idee wie ich das machen könnte?

lg
manu


----------



## SlaterB (14. Nov 2008)

kommt darauf an, was du unter 'ich lese die gesamte csv-datei aus ' verstehst,

wenn du z. B. einen StringTokenizer benutzt und dabei auf eine bestimmten Text stößt, 
dann wirst du sehr wahrscheinlich nicht wissen, in welcher Spalte du gerade bist,

hast du dagegen die aktuelle Zeile mit String.split() aufgeteilt und bist gerade an Array-Position 12, 
dann fällt es einem umso leichter, die Spalte herauszufinden (12  )

wenn dir StringTokenizer, String.split() nix sagt oder du spezielle APIs verwenden willst aber deren Möglichkeiten noch nicht kennst,
dann ist mein Vorschlag:
erstmal ausprobieren, sich damit vertraut machen, dann weißt du hoffentlich was womit möglich ist


----------



## Guest (14. Nov 2008)

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

public class Input
{
	String line;
	String[] split = null;
	int integer;
	String value;
	
	Vector OR_Ab = new Vector();
	Vector OR_Aw = new Vector();
	Vector OR_evi = new Vector();
	Vector OR_ev0 = new Vector();
	Vector OR_th = new Vector();
	Vector OR_tv = new Vector();
	/**
	 * @param fileName
	 */
	public Input(String fileName)
	{

		/**
		 * Read until the end of the file
		 */

		try
		{
			BufferedReader br = new BufferedReader(new FileReader(fileName));

			while ((line = br.readLine()) != null)
			{
				split = line.split(";");
				
				if (split.equals("Ab"))
				{
				// hier würde ich gerne überprüfen ob in der zeile beim lesen Ab             
                                                                // vorkommt,
				// wenn ja, dann würde ich gerne wissen in welcher spalte sich ab 
                                                                // befindet
				// und anschließend alle werte dieser spalte auslesen
				}
					

				for (int i = 0; i < split.length; i++)
				{
					String column = split[4];
					OR_Ab.add(column);
				}
			}
			br.close();
		}
		catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}
```

so sieht mein code aus und dass würde ich gerne an dieser stelle tun
// hier würde ich gerne überprüfen ob in der zeile beim lesen Ab             
// vorkommt,
// wenn ja, dann würde ich gerne wissen in welcher spalte sich ab 
// befindet
// und anschließend alle werte dieser spalte auslesen


----------



## SlaterB (14. Nov 2008)

> if (split.equals("Ab")) 
ein Array kannst du nicht mit einem String vergleichen,

du musst eine Schleife verwenden wie du sie später schon hast:
>  for (int i = 0; i < split.length; i++) 
dann allerdings nicht ständig auf das 4. Element zugreifen:
>  String column = split[4]; 

sondern auf das i-te:
 String column = split_; 
nun kannst du den String column mit Ab vergleichen, wenn der Vergleich true ergibt, dann ist der aktuelle Wert von i die Spaltennummer von Ab_


----------

