# csv einlesen



## Gast (4. Aug 2006)

Hallo Zusammen,

ich habe mal bei "Java ist ein Insel" geschaut und bin auf den Tipp gestossen, das das Einlesen einer csv mit der Klasse StringTokenizer bei leeren Feldern und Sonderzeichen Probleme bereitet. Als Abhilfe ist ein freier Parser empfohlen. (ostermiller.org/utils/CSV.html) worden.

Ich möchte eine CSV-Datei einlesen die zwei verschiedene Zeilenarten hat und es auch vorkommen kann das Felder leer bleiben, also 

Kunde; Name;;;; usw.

Wie löst ihr das Problem? Ich möchte den oben genannten Parser nicht verwenden? Ist unter gnu und dann wäre mein Projekt auch unter gnu. Das wird meiner Firma nicht gefallen.

Danke schon mal für Eure Tipps.


----------



## AlArenal (4. Aug 2006)

http://jakarta.apache.org/commons/sandbox/csv/ ???


----------



## Caffè Latte (5. Aug 2006)

Hi,

ich nutze dazu aus dem Package org.apache.oro.text.regex die Klasse Util. Die enthält eine statische Methode names "split", die der Perl Funktion gleichen Namens nachempfunden wurde:

eine Zeichenkette wird anhand eines Trennzeichens "aufgeteilt" und in einer Collection gespeichert.

http://jakarta.apache.org/oro/api/org/apache/oro/text/regex/Util.html#split(java.util.Collection,%20org.apache.oro.text.regex.PatternMatcher,%20org.apache.oro.text.regex.Pattern,%20java.lang.String)

BTW: Meinst mit "gnu" die GPL? Jakarta steht unter der Apache License: http://www.apache.org/licenses/LICENSE-2.0.txt


----------



## zx81 (6. Aug 2006)

Hallo,

vielleicht hilft dir das?


```
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class CSV {

	private String zeile;
	private ArrayList list = new ArrayList();
	private String[] split = null;
		
	public static void main(String[] args) {
		CSV c = new CSV();
		c.readData();
		c.printData();
	}
	
	public void readData() {
		try {
				FileReader file = new FileReader("C:/test/daten.csv");
				BufferedReader data = new BufferedReader(file);
				while ((zeile = data.readLine()) != null) {
					split = zeile.split(";");
					for(int i=0; i<split.length; i++) {
						//leere Zeilen ignorieren
						if( !(split[i].equals("")) )
						//eventuelle Leerzeichen zwischen zwei ';' entfernen 
						//und Wert in Liste schreiben
						list.add(split[i].trim());
					}
				}
		} catch (FileNotFoundException e) {
			System.out.println("Datei nicht gefunden");
		} catch (IOException e) {
			System.out.println("E/A-Fehler");
		}
	}
	
	public void printData() {
		int max = list.size();
        for(int i=0; i<max; i++) {
			System.out.println(list.get(i));
        }
	}
}
```


----------



## Gast (6. Aug 2006)

Hallo Zusammen,

danke für Eure Antworten. Ich werde den CSV-Parser von Jakarta nehmen. Die Apache-Lizenz finde absolut super. So stell ich mir eine Lizenz vor. Ich darf die Software verwenden (auch in kommerziellen Produkten) und muss meine Software nicht unter diese Lizenz stellen. Einzige Bedingung, ich muss darauf hinweisen, welche Software unter dieser Lizenz ich verwendet habe.

Danke


----------

