CSV Parser

Status
Nicht offen für weitere Antworten.

Deepdish

Mitglied
Hy Leute,
ich hab ein kleines Problem mit meinem Java Code.
Mein Java code soll eine .txt Datei einlesen, dass sind diese drei zeilen:

1.5,10,100,3.14
"Text",123.46,"zweiundvierzig",12/31/79
1,1.1,1.2,1.3

Und In Deutschland soll sie so aussehen:

"1,5",10,100,"3,14"
"Text","123,46","zweiundvierzig",31.12.79
1,"1,1","1,2","1,3"

Die .txt Datei sollen wir in unserem workspace reinlegen damit der Algorithmus, den ich gleich vorstellen werde einlesen soll und dann als neue Datei auslesen soll.

Für genauere Information pflege ich die Fragstellung nochmals ein {

CSV-Dateien umwandeln Englisch → Deutsch
In Ihrer Firma werden Daten aus Tabellenkalkulationsprogrammen und Datenbanken
häufig als CSV („comma separated values“) ausgetauscht. Solche Dateien bestehen für
jede Tabellenzeile aus einer Textzeile, darin für jede Tabellenspalte ein Eintrag. Die
Einträge sind durch Komma („.“) getrennt und können Zahlen, Datumsangaben, oder in
doppelte Anführungszeichen eingeschlossene Texte sein. Eine Zahl besteht aus Ziffern,
eventuell einem Dezimalpunkt, und weiteren Ziffern als Nachkommastellen. Weiterhin
können auch Datumsangaben in der Form Monat/Tag/Jahr vorhanden sein. Die Aufgabe
ist nun folgende:
Für die deutsche Niederlassung dieser internationalen Firma sollen diese Dateien an die
deutschen Konventionen angepasst werden, so dass Zahlen mit Dezimalkomma (statt
Dezimalpunkt) dargestellt werden und Datumsangaben mit Punkten in der Form
Tag.Monat.Jahr. Dann kann das Komma allerdings nicht mehr so ohne weiteres als
Trennzeichen verwendet werden, oder alle Zahlen mit Dezimalkomma müssen durch
Anführungszeichen „geschützt“ werden. Eine Beispieldatei aus den USA sähe
folgendermaßen aus: }

Hier der Code den ich soweit programmiert habe. Es handelt sich um ein MINIMALEN FEHLER.. Leider fehlt mir das WISSEN dazu ich hoffe ihr könnt mir helfen!!!
Hier nun der Code:

Java:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.StringTokenizer;

public class Parser  {

    
    int time;//Laufzeitparameter
    String oldformat;//Altes Format
    String dummy;//Hilfsstring 
    String newformat;//Neues Format 
    String ausgabe;
    String dategerman;
    
    
    char comma = '\u002C';// Unicode fuer ,
    char point = '\u002E';// Unicode fuer .
    char solidus = '\u002F';//Unicode fuer 
    

    public void read() {
            
        try {

            File datei = new File("test1.txt");//Einlesen der Textdatei (korrekter Name benoetigt)
            FileReader reader = new FileReader(datei);
            BufferedReader buffer = new BufferedReader(reader);
        
            
            while (buffer.ready()==true){
            
            oldformat = buffer.readLine();
                
                StringTokenizer str = new StringTokenizer(oldformat);
                
                while (str.hasMoreTokens())
                    
                dummy = str.nextToken();    
                time = dummy.length();//Laufzeitvariable
                newformat = replace(time);
                print(newformat);
            }    
    
                buffer.close();
                reader.close();
        } 
            
        catch (IOException e) {
            
        System.err.println("Keine Datei gefunden");
        }
        
    }

    public String replace(int time){            //Methode 
        
        String dummy2;//Lokale Stringvariable
    
    
        for (int i = 0; i < time; ++i){
                dummy2 = oldformat.replace(point, comma);
                newformat = dummy2.replace(solidus,point);    
                            
        }
            ausgabe = dateparser (newformat);    
                    
            return ausgabe;
    }
    
    public String dateparser (String newformat){
        
        int k = 0; 
        
        char a [] = new char[8]; 
        char b [] = new char[8]; 
        
        String parsedate; 
        String subdate;
        
        StringBuffer str = new StringBuffer(newformat);    // Hier wird das Objekt str erzeugt
        
        for (int j=0;j<str.length();++j){
            
            if (str.charAt(j) == point && k ==0){
                   ++k;
            subdate = newformat.substring(j-2, j+6); //Erstellung des Substrings Datum mm.dd.yy
                
            for (int c = 0; c < a.length; ++c){  //Positionsveraenderung der Character von mm.dd.yy zu dd.mm.yy
                    
            a[c]= subdate.charAt(c);
            b[c]= subdate.charAt(c);
            
            }    
                    a[0]= b[3];
                    a[1]= b[4];
                    a[3]= b[0];
                    a[4]= b[1];
                    //Loeschen des alten Datums und Einfuegen des neuen Datums in den StringBuffer
                    parsedate  = new String(a);
                    str.delete(j-2, j+2);
                    str.replace(j-2, j+2, parsedate);
             }
              else {}
        }
                dategerman = str.toString();//Parsen des StringBuffers in Ausgabestring
                
        --k;
        return dategerman;
    }
    
    
    public void print(String format) {
            
        try {
            
            FileWriter writer = new FileWriter ("Format.txt");
            BufferedWriter buffer = new BufferedWriter (writer);
            buffer.write(format);
            //buffer.append( System.getProperty("line.separator") );
            
            buffer.close();
            writer.close();
        } 
        
        catch (IOException e) {

        e.printStackTrace();
        }
        System.out.println(format);
        
    }
        public static void main(String[] args) {
            Parser norm = new Parser();
            norm.read();
        }

}
 
Zuletzt bearbeitet von einem Moderator:
M

maki

Gast
Da es sich hierbei um eine Frage bzw. Problem handelt und nicht um Codeschnippsel bzw. ein Projekt habe ich es verschoben.
 

foobar

Top Contributor
Sollen wir zuerst den Fehler erraten, dann eine Frage stellen und die dann selber beantworten oder beschreibst du uns den Fehler kurz?
 

Deepdish

Mitglied
Es wäre nett, den Fehler zu festzustellen. Dann zu Antworten, denn ich weiss gar nicht weiter. Bin verzweifelt!!!
 
M

maki

Gast
"Fehler"

Geht was nicht? Wenn ja, was?
Bekommst du eine fehlermeldung? Wenn ja, welche?
 

Deepdish

Mitglied
Der Filewriter schreibt nicht ordnungsgemäß in die neue datei "Format.txt" diese drei zeilen:
"1,5",10,100,"3,14"
"Text","123,46","zweiundvierzig",31.12.79
1,"1,1","1,2","1,3"

die geparst werden sollen. Er schreibt nur die letzte Zeile in die Datei Format.txt 1,1,1,1,2,1,3 , aber auch ohne den Häkchen.
 

JanHH

Top Contributor
Nimm doch mal einen debugger und guck Dir genau an was Dein Programm so tut. ich finde das alles etwas zu konfus, um es mal so eben nachvollziehen zu können. Die Aufgabenstellung ist allerdings auch konfus: Um ein Element der CSV-Datei konvertieren zu können, muss man ja erstmal wissen, worum es sich dabei überhaupt handelt. Also muss jedes Token geparst und analysiert werden, dann weiss man, was man vor sich hat, und kann es auch konvertieren. Das ist dann schon relativ aufwändig.
 

Ebenius

Top Contributor
Ich hab dann mal den Titel des Themas korrigiert. Hab mich jetzt schon dreimal gewundert, was das ganze mit CVS zu tun hat...

Am Rande: Hast Du irgendeinen Grund, warum Du in Zeile 20 und 21 die Unicode-Notation benutzt und nicht einfach ',' und '.' schreibst? Tipp: Es gibt keinen. ;)

Ebenius
 
Zuletzt bearbeitet:

Deepdish

Mitglied
Hy,
also ich konnte das Problem beheben. Der fehler lag in der read methode! jehuuu

@Ebenius Was genau meinst du damit. Ich hab es geändert. Anstatt die ASCII Zeichen habe ich jetzt "," und "." initialisiert.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Methoden Parser für gängige Datumsformate? Allgemeine Java-Themen 1
W CSV-Parser Allgemeine Java-Themen 1
I DOM-Parser - Element im Element an bestimmten Stellen auslesen Allgemeine Java-Themen 1
L Generator für einen Parser implementieren Allgemeine Java-Themen 13
B StAX Parser - mehrere Methoden, ein XML Allgemeine Java-Themen 4
offi EDIFACT Parser Allgemeine Java-Themen 7
Neumi5694 Parser - Zerlegen verschachtelter Funktionen Allgemeine Java-Themen 2
RalleYTN Lua Parser? Allgemeine Java-Themen 2
O Sax-Parser ließt XML-File doppelt Allgemeine Java-Themen 1
Thallius Simple JSON Parser Error null Allgemeine Java-Themen 6
A Konstrukt ohne Main für Xml-Parser Allgemeine Java-Themen 1
F Parser Framework/Plugin für Datei in Custom-Format Allgemeine Java-Themen 2
H Best Practice Ideensuche: Flexibel hinzufügbare eigene Parser Allgemeine Java-Themen 6
J Best Practice Parser für Taschenrechner Allgemeine Java-Themen 4
V String nicht im String literal pool speichern - Parser Allgemeine Java-Themen 30
A Parser verursacht Speicherprobleme auf Server Allgemeine Java-Themen 2
P RegEx mit HTML Parser für Java möglich? Allgemeine Java-Themen 10
H Kleiner HTML Parser (Facharbeit) Allgemeine Java-Themen 11
G REST Client / URL Parser Allgemeine Java-Themen 2
F ical4j Parser Allgemeine Java-Themen 7
M String tokenizer / parser Allgemeine Java-Themen 3
M Übergabe mehrer Files an selbstprogrammieren Parser Allgemeine Java-Themen 4
Landei Design-Problem Formel-Parser Allgemeine Java-Themen 10
S HTML => DOM - Welcher Parser für meine Zwecke? Allgemeine Java-Themen 3
E Parser basteln mit CUP Allgemeine Java-Themen 6
T HTML Parser Allgemeine Java-Themen 7
R Script parser Allgemeine Java-Themen 6
T Mathematik Parser Library? Allgemeine Java-Themen 4
N DOM Parser Allgemeine Java-Themen 2
J Parser / Scanner / Tokenizer gesucht Allgemeine Java-Themen 3
S Textfeld Parser sinnvoll? Allgemeine Java-Themen 3
B Parser für logische Ausdrücke Allgemeine Java-Themen 9
D Parser-generator für mathematische Funktionen Allgemeine Java-Themen 12
T Webseite (HTML) Parser gesucht Allgemeine Java-Themen 8
R Parser: Datei auslesen, Datei erstellen - Geschwindigkeit Allgemeine Java-Themen 16
T Parser für BBCode? Allgemeine Java-Themen 3
S html parser Allgemeine Java-Themen 3
G Parser erstellen Allgemeine Java-Themen 12
T Suche BBCode-Parser in Java Allgemeine Java-Themen 2
A Parser für \ Allgemeine Java-Themen 12
J Java Parser Tool verfügbar? Allgemeine Java-Themen 3
A api latex bzw. latex parser Allgemeine Java-Themen 2
B tipps zum schreiben eines mathematischen parser Allgemeine Java-Themen 13

Ähnliche Java Themen

Neue Themen


Oben