537 Stimmen

Umgang mit Kommas in einer CSV-Datei

Ich bin auf der Suche nach Vorschlägen, wie eine CSV-Datei zu behandeln ist, die von unseren Kunden erstellt und dann hochgeladen wird und die möglicherweise ein Komma in einem Wert enthält, z. B. einen Firmennamen.

Einige der Ideen, die wir in Betracht ziehen, sind: Bezeichner in Anführungszeichen (Wert "," Werte ", "usw.) oder die Verwendung eines | anstelle eines Kommas. Das größte Problem ist, dass wir es einfach machen müssen, sonst wird der Kunde es nicht tun.

1voto

G_real Punkte 1047

Ich benutzte Csvreader Bibliothek, aber durch die Verwendung, dass ich Daten durch Explodieren von Komma(,) in Spaltenwert bekam.

Wenn Sie also Daten aus einer CSV-Datei einfügen möchten, die in den meisten Spaltenwerte ein Komma(,) enthält, können Sie die unten stehende Funktion verwenden. Autor Link => https://gist.github.com/jaywilliams/385876

function csv_to_array($filename='', $delimiter=',')
{
    if(!file_exists($filename) || !is_readable($filename))
        return FALSE;

    $header = NULL;
    $data = array();
    if (($handle = fopen($filename, 'r')) !== FALSE)
    {
        while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)
        {
            if(!$header)
                $header = $row;
            else
                $data[] = array_combine($header, $row);
        }
        fclose($handle);
    }
    return $data;
}

1voto

parag patel Punkte 2313

Ich habe die papaParse-Bibliothek verwendet, um die CSV-Datei zu parsen und die Schlüssel-Wert-Paare (Schlüssel/Kopfzeile/erste Zeile der CSV-Datei-Wert) zu erhalten.

Hier ist ein Beispiel, das ich verwende:

https://codesandbox.io/embed/llqmrp96pm

Die Datei dummy.csv dient der Demonstration des CSV-Parsing.

Ich habe es in reactJS verwendet, obwohl es leicht und einfach in einer mit einer beliebigen Sprache geschriebenen Anwendung zu replizieren ist.

1voto

Eric Punkte 19

Sie können die csv-Datei wie folgt lesen.

Dies nutzt Splits und sorgt für Leerzeichen.

ArrayList List = new ArrayList();
static ServerSocket Server;
static Socket socket;
static ArrayList<Object> list = new ArrayList<Object>();

public static void ReadFromXcel() throws FileNotFoundException
{   
    File f = new File("Book.csv");
    Scanner in = new Scanner(f);
    int count  =0;
    String[] date;
    String[] name;
    String[] Temp = new String[10];
    String[] Temp2 = new String[10];
    String[] numbers;
    ArrayList<String[]> List = new ArrayList<String[]>();
    HashMap m = new HashMap();

         in.nextLine();
         date = in.nextLine().split(",");
         name = in.nextLine().split(",");
         numbers = in.nextLine().split(",");
         while(in.hasNext())
         {
             String[] one = in.nextLine().split(",");
             List.add(one);
         }
         int xount = 0;
         //Making sure the lines don't start with a blank
         for(int y = 0; y<= date.length-1; y++)
         {
             if(!date[y].equals(""))
             {   
                 Temp[xount] = date[y];
                 Temp2[xount] = name[y];
                 xount++;
             }
         }

         date = Temp;
         name =Temp2;
         int counter = 0;
         while(counter < List.size())
         {
             String[] list = List.get(counter);
             String sNo = list[0];
             String Surname = list[1];
             String Name = list[2];
             for(int x = 3; x < list.length; x++)
             {           
                 m.put(numbers[x], list[x]);
             }
            Object newOne = new newOne(sNo, Name, Surname, m, false);
             StudentList.add(s);
             System.out.println(s.sNo);
             counter++;
         }

1voto

virgban Punkte 59

Anhand eines Beispiels kann gezeigt werden, wie Kommas in einer .csv-Datei angezeigt werden können. Erstellen Sie eine einfache Textdatei wie folgt:

Speichern Sie diese Textdatei als Textdatei mit der Endung ".csv" und öffnen Sie sie mit Excel 2000 unter Windows 10.

aa,bb,cc,d;d "In der Tabellenkalkulation sollte die untere Zeile wie die obige aussehen, außer dass unten ein Komma statt eines Semikolons zwischen den d's angezeigt wird." aa,bb,cc, "d,d", Das funktioniert sogar in Excel

aa,bb,cc, "d,d", Dies funktioniert sogar in Excel 2000 aa,bb,cc, "d ,d", Dies funktioniert sogar in Excel 2000 aa,bb,cc, "d , d", Dies funktioniert sogar in Excel 2000

aa,bb,cc, " d,d", Dies schlägt in Excel 2000 wegen des Leerzeichens hinter dem ersten Anführungszeichen fehl aa,bb,cc, " d ,d", Dies schlägt in Excel 2000 wegen des Leerzeichens hinter dem ersten Anführungszeichen fehl aa,bb,cc, " d , d", Dies schlägt in Excel 2000 wegen des Leerzeichens hinter dem ersten Anführungszeichen fehl

aa,bb,cc, "d,d " , Dies funktioniert auch in Excel 2000, sogar mit Leerzeichen vor und nach dem zweiten Anführungszeichen. aa,bb,cc, "d ,d " , Dies funktioniert auch in Excel 2000, sogar mit Leerzeichen vor und nach dem 2. aa,bb,cc, "d , d " , Dies funktioniert auch in Excel 2000, sogar mit Leerzeichen vor und nach dem 2ten Anführungszeichen.

Regel: Wenn Sie ein Komma in einer Zelle (einem Feld) einer .csv-Datei anzeigen möchten: "Beginnen und beenden Sie das Feld mit einem doppelten Anführungszeichen, aber vermeiden Sie Leerzeichen vor dem ersten Anführungszeichen".

0voto

l3x Punkte 29224

Stellen wir uns zunächst die Frage: "Warum ist es notwendig, Kommas bei CSV-Dateien anders zu behandeln?"

Für mich lautet die Antwort: "Wenn ich Daten in eine CSV-Datei exportiere, verschwinden die Kommas in einem Feld und mein Feld wird in mehrere Felder aufgeteilt, in denen die Kommas in den Originaldaten erscheinen." (Das liegt daran, dass das Komma das CSV-Feldtrennzeichen ist.)

Je nach Situation können auch Semikolons als CSV-Feldtrennzeichen verwendet werden.

In Anbetracht meiner Anforderungen kann ich ein Zeichen verwenden, z. B. ein einzelnes Anführungszeichen mit niedriger 9, das wie ein Komma aussieht.

Hier ist, wie Sie es in Go machen können:

// Replace special CSV characters with single low-9 quotation mark
func Scrub(a interface{}) string {
    s := fmt.Sprint(a)
    s = strings.Replace(s, ",", "‚", -1)
    s = strings.Replace(s, ";", "‚", -1)
    return s
}

Das zweite kommaähnliche Zeichen in der Funktion Ersetzen ist die Dezimalzahl 8218.

Beachten Sie, dass dieses Dezimaltrennzeichen nicht wie ein Komma aussieht, wenn Sie Kunden haben, die nur Ascii-Zeichen lesen können. In diesem Fall empfehle ich, das Feld mit dem Komma (oder Semikolon) mit doppelten Anführungszeichen gemäß RFC 4128 zu umschließen: https://www.rfc-editor.org/rfc/rfc4180

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X