2016-11-27 6 views
1

Ich lese eine CSV-Datei und möchte jede Zeile in mehrere verschiedene Variablen aufteilen. Ich habe über Strtok, einige Leute empfehlen es, andere sagen, es ist problematisch. Gibt es eine andere Methode, meine Saiten zu spalten?Gibt es eine andere Möglichkeit, eine Zeichenfolge mit einem Komma-Trennzeichen neben Strtok zu teilen?

+1

Was meinst du mit "besser". –

+0

@ErikGodard Von besser, ich meine etwas mehr akzeptiert. Wie ich schon sagte, manche Leute empfehlen strtok nicht, also suche ich etwas "sicherer". – Jasmine

+0

Verwenden Sie eine Fremdanbieterbibliothek. Werfen Sie einen Blick auf die Antworten auf diese Frage für ein paar Empfehlungen: [CSV-Datei in C parsen] (http://stackoverflow.com/questions/14115529/parse-csv-file-in-c) – DaoWen

Antwort

2

Um CSV-Quellzeilen zu analysieren, müssen Sie die Syntax für " getrennte Zeichenfolgen verarbeiten, die , Zeichen einbetten können. Sie können strtok() nicht direkt verwenden. Außerdem betrachtet strtok() Sequenzen von Trennzeichen als einem einzelnen Trennzeichen gleichwertig, was definitiv nicht das ist, was Sie für das Trennzeichen , wollen.

Ich fürchte, Sie müssen einen Parser von Hand schreiben, durch die CSV-Zeilen iterieren, vorzugsweise in einen großen Puffer lesen und eine Art von Zustandsmaschine verwenden.

0

Sie können strchr das Delimeter in einer Schleife und etwas mit jedem Segment tun.

Z. B. werden diese Argumente auf Kommas aufgeteilt und jedes Feld drucken:

int main(int argc, char** argv) 
{ 
    for(int i = 1; i<argc; i++){ 
     char const *p0,*p1; 
     for(p0=argv[i]; (p1=strchr(p0,',')); p0=p1+1){ 
      fwrite(p0,p1-p0,1,stdout); puts(""); 
     } 
     fwrite(p0,strlen(p0),1,stdout); puts(""); 
    } 
} 

Es ist ziemlich einfach.

+1

'strchr()' ist * besser * als 'strtok()', aber Sie können '' 'getrennte Strings mit dieser Funktion immer noch nicht verarbeiten – chqrlie

+0

@chqrlie Sicher, und Sie haben das gut beantwortet. Ich versuche im Allgemeinen nur den Kern von Fragen statt zu versuchen, herauszufinden, was das OP wirklich braucht, ich persönlich denke, es ist besser für die Website. – PSkocik

Verwandte Themen