Analyse einer csv-Datei in Qt

8

Kennt jemand, wie man eine CSV-Datei analysiert und in eine String-Liste einfügt? Im Moment nehme ich die gesamte CSV-Datei und setze sie in die String-Liste. Ich versuche herauszufinden, ob es einen Weg gibt, nur die erste Spalte zu bekommen.

%Vor%     
user3878223 05.12.2014, 14:55
quelle

6 Antworten

11

Da gehen Sie:

FlightParam.csv

%Vor%

main.cpp

%Vor%

main.pro

%Vor%

Erstellen und Ausführen

%Vor%

Ausgabe

%Vor%     
lpapp 05.12.2014, 16:00
quelle
7

Was Sie suchen, ist eine QTextStream Klasse. Es bietet alle Arten von Schnittstellen zum Lesen und Schreiben von Dateien.

Ein einfaches Beispiel:

%Vor%

Alternativ können Sie auch so etwas machen, das dasselbe Ergebnis hätte:

%Vor%     
Shf 05.12.2014 15:45
quelle
4

Probieren Sie die qtcsv Bibliothek zum Lesen und Schreiben von CSV-Dateien aus. Beispiel:

%Vor%

Ich habe versucht, es klein und einfach zu benutzen. Informationen zur Bibliotheksdokumentation und anderen Codebeispielen finden Sie in der Readme -Datei.

    
iamantony 07.05.2015 11:50
quelle
4

Man könnte es lieber so machen:

%Vor%
  • Leistungsstark: Behandelt zitiertes Material mit Kommas und doppelten Anführungszeichen (die ein Anführungszeichen bedeuten) rechts
  • Flexibel: scheitert nicht, wenn das letzte Zitat der letzten Zeichenfolge vergessen wird, und verarbeitet kompliziertere CSV-Dateien; können Sie jeweils eine Zeile verarbeiten, ohne zuerst die gesamte Datei im Speicher lesen zu müssen.
  • Ganz einfach: Lassen Sie diesen Zustandsautomaten einfach in Ihren Code fallen, klicken Sie mit der rechten Maustaste auf den Funktionsnamen in QtCreator und wählen Sie Refactor | Öffentliche Deklaration hinzufügen, und yer gut 2 gehen
  • Performant: verarbeitet CSV-Zeilen schneller als RegEx-Look-ahead für jedes Zeichen
  • Praktisch: benötigt keine externe Bibliothek

Hinweis: Diese Methode trimmt keine Leerzeichen vor oder nach einem Feld. Ich plane, es in der mittelfristigen Zukunft zu verbessern (oder frei zu fühlen), um Lücken vor dem ersten Zitat und nach dem letzten zu entfernen. Wenn keine Anführungszeichen vorhanden sind, können Leerzeichen ebenfalls abgeschnitten werden. Abgesehen davon finde ich im Programmgenerierten CSV im Allgemeinen keine Leerzeichen vor oder nach Anführungszeichen. und der Anführungszeichen-Zustand erlaubt das Einfügen von Kommas in ein Text-Literal-Feld.

Mehr als für Ihren Testfall benötigt wurde, weiß ich; aber eine solide allgemeine Antwort auf das?, dennoch - vielleicht für andere, die es gefunden haben.

Adaptiert von: Ссылка

    
CodeLurker 15.08.2016 12:14
quelle
3

Hier ist der Code, den ich normalerweise verwende. Ich bin der Autor, halte das so, wie es ist, Public Domain. Es hat ein ähnliches Feature-Set und Konzept wie der CodeLurker-Code , außer dass die State-Machine anders dargestellt wird, der Code ist etwas kürzer .

%Vor%
  • Parameter: in , a QTextStream .
  • Parameter: row , a QStringList , der die Zeile erhält.
  • Rückgabe: true wenn eine Zeile gelesen wurde, false wenn EOF.
  • Wird ausgelöst: std::runtime_error , wenn ein Fehler auftritt.

Es analysiert CSVs im Excel-Stil, behandelt Anführungszeichen und doppelte Anführungszeichen entsprechend und erlaubt Zeilenumbrüche in Feldern. Verarbeitet Windows- und Unix-Zeilenendungen ordnungsgemäß, solange Ihre Datei mit QFile::Text geöffnet wird. Ich glaube nicht, dass Qt die Mac-Zeilenenden der alten Schule unterstützt, und dies unterstützt keine nichtübersetzten Zeilenenden, aber heutzutage sollte das kein Problem mehr sein.

Weitere Hinweise:

  • Im Gegensatz zur CodeLurker-Implementierung schlägt dies absichtlich fehl, wenn EOF in Anführungszeichen gesetzt wird. Wenn Sie die -2 zu -1 in der Statustabelle ändern, wird es vergeben.
  • Parses x"y"z als xyz , war nicht sicher, was die Regel für Mid-String-Anführungszeichen war. Ich habe keine Ahnung, ob das stimmt.
  • Performance- und Speichereigenschaften wie CodeLurker (d. h. sehr gut).
  • Unicode wird nicht unterstützt ( wird in ISO-5589-1 ), aber der Wechsel zu QChar sollte trivial sein.

Beispiel:

%Vor%     
Jason C 25.10.2016 00:08
quelle
1
%Vor%

dann

%Vor%

Ich bin nicht sicher, ob eine Add-Funktion zu einem Array hinzugefügt werden kann oder nicht - rufen Sie Spalte 1 auf

    
Dieu Linh 05.12.2014 15:07
quelle

Tags und Links