# Startparameter in Eclipse mitgeben (Dateiname, sowie ,)??



## aquarium1974 (26. Mrz 2009)

hallo zusammen,

bin neu in java.
ich hab mir aus dem java-codebook6 ein beispiel geschnappt zum einlesen von csv-dateien. 
arbeiten tue ich mit dem eclipse-framework.

die datei erfordert 2 startparapeter, die ich bein programmaufruf mitgeben soll. in eclipse mache ich das ja mit RMT - Run AS - Run Configurations, dann auf Arguments.
Da geb ich dann den volständigen Pfad (c:\temp\adressen.csv) sowie das Trennzeichen mit an, --> also einfach , (Komma) ohne das Ding besonders zu maskieren mit " ", ' ' oder so.

Wie ist denn der korrekte Syntax, wenn ich ein Komma als Parameter mit übergeben will?

Ich krieg immer eine Fehlermeldung, und zwar:
     Fehler beim Parsen der Datei in Zeile 2,
auch mal ne Null-Pointer-Exception (immer abhängig vom Trennzeichen).
Kann mir jemand auf die Sprünge helfen?

Hat das irgendwas mit dem Vector zu tun? bzw. mit dem charat(0) in Zeile 22?


Anbei (aus dem Buch deswegens machts eigentlich keinen Sinn, der ist ja richtig sollte man meinen) der Code:

Quelldatei:
[HIGHLIGHT="Java"]
Name,Vorname,Straße   ,Stadt,PLZ,Telefon
Süß,Herbert,Weidenstraße 7,Bonn,53069,714568
Sauer,Florian,Erlenweg 54,Bonn,53968,400392
Bitter,Claudia,Eichennallee 26,Bonn,53092,660134
Salz,Maria,Tannenhain 4,Bonn,53968,403303
[/HIGHLIGHT]


[HIGHLIGHT="Java"]
/** 
 * 
 * @author   Dirk Louis
 */

import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.text.ParseException;
import java.util.Vector;

public class MoreIO {

    // Instanzbildung unterbinden
    private MoreIO() { }    

    /**
     * Methode zum Einlesen und Parsen von CSV-Dateien
     */
    public static Vector<String[]> readCSVFile(String filename, char delimiter) 
                                                 throws IOException, ParseException {
        Vector<String[]> lines = new Vector<String[]>();
        String[] fields = null;
        String line;
        int countLines = 1;
        int countFields = -1;

        BufferedReader in = new BufferedReader(new FileReader(filename));

        // Dateiinhalt zeilenweise lesen
        while( (line = in.readLine()) != null) {

           // Whitespace an Enden entfernen
           line = line.trim();

           // Leerzeilen übergehen
           if (line.equals("") )
              continue;

           // Felder aus Zeilen extrahieren
           fields = line.split(String.valueOf(delimiter));

           // Wenn erste Zeile, dann Anzahl Felder abspeichern
           if (countFields == -1)
              countFields = fields.length;

           // Sicherstellen, dass alle Zeilen die gleiche Anzahl Felder haben
           if (countFields == fields.length) {
              lines.add(fields);  
              ++countLines;
           } else
              throw new ParseException("Ungleiche Anzahl Felder in "
                                     + "Zeilen der CSV-Datei", countLines);
        }

        // Stream schließen
        in.close();

        // Collection mit Feld-Arrays zurückliefern
        return lines;
    }

}

[/HIGHLIGHT]



sowie:

[HIGHLIGHT="Java"]
/**
 * CSV-Dateien lesen
 *
 * @author Dirk Louis
 */
import java.util.Vector;
import java.io.IOException;
import java.text.ParseException;

public class Start_MoreIO {

    public static void main(String args[]) {

        if (args.length != 2) {
           System.out.println(" Aufruf: Start <Dateiname> <Trennzeichen>");
           System.exit(0);
        } 


        System.out.println("\n Datei lesen und Zeile fuer Zeile ausgeben \n");
        try {
            Vector<String[]> lines = MoreIO.readCSVFile(args[0], args[1].charAt(0));

            // Zeilen ausgeben
            String[] line = null;
            for (int l = 0; l < lines.size(); ++l) {
                line = lines.get(l);
                System.console().printf(" %d.Zeile:", l+1);

                // Felder in Zeile ausgeben
                for (int f = 0; f < line.length; ++f)
                   System.console().printf("\t%s", line[f]);

                System.out.println();
            }

        } catch(IOException e) {
            System.err.println("FEHLER beim Oeffnen der Datei");
        } catch(ParseException e) {
            System.err.println("FEHLER beim Parsen der Datei in Zeile " 
                               + e.getErrorOffset());
        }
    }
}


[/HIGHLIGHT]


----------



## SlaterB (27. Mrz 2009)

du solltest nicht verschiedene Dinge auf einmal testen,

ein Programm zur Problemstellung 'Parameter an Java-Programm übergeben' sollte die Parameter-Anzahl und deren Inhalte ausgeben, 
aber bestimmt nicht irgendwas mit CSV-Dateien machen,
nachdem das geklärt wäre kann man sich gerne neuen Problemen widmen

dein einfaches Eingabe-Test-Programm könntest du zunächst von der Konsole testen:
java TestEingabe x y
kommt Ausgabe 2, x, y?
schonmal gut, dann vielleicht längere Texte, Komma, Leerzeichen, Punkt, *, Anführungszeichen, was du da genau haben wolltest

danach/ parallel in Eclipse testen, auch wieder zunächst mit x und y, 

wo genau gibt es genau welche Probleme bei welchem Programm und welchen Eingaben?


----------



## aquarium1974 (27. Mrz 2009)

hallo,

hat sich schon geklärt,
aber vielen dank für die antwort!


----------

