Ich versuche, eine TXT-Datei zu analysieren, die Namen in folgendem Format enthält:
%Vor%Dies ist der Code, den ich geschrieben habe:
%Vor% Jeder alternative Aufruf von fscanf
gibt mir einen Namen, während der andere beim Abholen eines Kommas verschwendet wird. Ich habe verschiedene Formate ausprobiert, aber ich kann nicht herausfinden, wie es geht.
Kann mir jemand mit dem richtigen Format helfen?
Das Ändern der Eingabeformat-Zeichenfolge in "%*[,\"]%[^\"]"
würde tun, was Sie wollen:
Das %*
überspringt nur die passende Eingabe.
Ich möchte immer strtok()
oder strtok_r()
function verwenden, um eine Datei zu analysieren. (entweder bevorzugen Sie eine csv-Bibliothek).
Aber nur zum Spaß habe ich einen Code geschrieben, vielleicht magst du es, ich poste keinen Code in meiner Antwort, aber überprüfe @ Codepad Ausgabe, Funktioniert nur für bestimmtes Format.
Der richtige Ansatz sieht für mich so aus:
%Vor%Überprüfen Sie Codepage für die Ausgabe:
%Vor% Was ich im zweiten Code vorschlage, zeichne eine äußere Schleife, um Zeilen von der Datei in einen temporären Puffer zu lesen, dann verwende strtok () Code wie oben: while(fgets(fp, csv, sizeof(csv))){ use strtok code}
Sie müssen fseek () verwenden.
Dieser Code funktioniert erfolgreich:
%Vor% Sie können strtok()
verwenden
lese ganze Zeile und teile sie in Token mit der Delin-Zeichenkette ","
Hinweis: Die Funktion strtok()
verwendet beim Parsen einen statischen Puffer, sodass sie nicht Thread-sicher ist. Verwenden Sie strtok_r()
, wenn dies für Sie von Bedeutung ist.
siehe man strtok_r