2016-05-22 12 views
0

Ich möchte die Community Gedanken zu einem Problem. Ich habe einen Speicher- und Ladezustand in meinem Programm erstellt. Wenn ich speichere, erstelle ich eine * .csv-Datei, die die Informationen in einem bestimmten Format speichert. Wenn ich lade, lädt es die geparste * .csv-Datei. Das Problem ist, wenn ich parse, in meiner zweiten Zeile kann es so viele Zeilen wie der Benutzer will, weil es eine Beschreibung Textfeld ist. Das Format der CSV ist wie folgt:Laden und Analysieren eines CSV in Java

Benutzertitel - 1 Zeile

Anwenderbeschreibung - eine beliebige Anzahl von Zeilen

Kopf -1 Linie

Adresse Standorte -1 Zeile pro Adresse

Beispiel:

Myawesometitle,

Dies ist eine Beschreibung,

Eine sehr gute Beschreibung,

Nbr, Adresse, Stadt, Bundesland, Postleitzahl

1,5643 Marktstraße, Cincinnati, OH, 80985

2,12345 Main Avenue, Denver, CO, 67890

Wie kann ich die Benutzerbeschreibung mit mehreren Zeilen umgehen? Ich kann entweder durch parsen/n oder

Danke,

+2

Verwenden Sie einen fertigen CSV-Leser/Schreiber, die mit Zeilenumbrüchen für Sie, oder besser, wählen Sie ein besser strukturiertes, Format als CSV, wie JSON oder XML beschäftigen. –

+0

Warum nicht: parse die erste Zeile als Benutzertitel, dann lesen Zeile, bis Sie die eindeutige Header-Zeile (vielleicht einige ** Symbole in dieser Zeile, mit denen Sie es identifizieren können) setzen, dann weiter Zeilen analysieren. – user3494047

+1

CSV-Dateien bestehen aus Zeilen und Feldern. Zeilen werden durch \ n Zeichen, Felder nach, oder getrennt; Charakter. Wenn ein Feld \ n enthält, oder; Dies führt zu Problemen beim Parsen der Datei. Die Konvention besteht darin, die Zeichenfolge, die problematische Zeichen enthält, in doppelte Anführungszeichen zu schreiben. "Der Parser muss nach doppelten Anführungszeichen suchen und alle interpretieren, die in Anführungszeichen – Carlo

Antwort

2

Wenn Sie nicht CSV sind verpflichtet, speziell zu verwenden Ich ermutige Sie JSON-Format zu verwenden, es ist viel dynamischer und Schema frei, weil zum Beispiel, Sie können die Listen [] als Wert verwenden, und in Ihrem Fall passt es perfekt zu einer unbegrenzten Anzahl von Adressen.

Zum Beispiel:

{ 
    "User title" : "Myawesometitle" 

    "User description" : "This is a description" 

    "Header" : "A very good description" 

    "Address locations" : 
    [ 
      { 
       "Nbr" : "1,5643" 
       "address" : "marketstreet" 
       "city" : "Cincinnati" 
       "state" : "OH" 
       "zip" : "80985" 
      }, 
      { 
       "Nbr" : "2,12345" 
       "address" : "main avenue" 
       "city" : "Denver" 
       "state" : "CO" 
       "zip" : "67890" 
      } 
    ] 
}