CSV Dateien einlesen und tabelarisch darstellen

Alles rund um die Programmierung mit Qt
Antworten
moe
Beiträge: 7
Registriert: 7. Oktober 2011 18:05

CSV Dateien einlesen und tabelarisch darstellen

Beitrag von moe »

Hallo zusammen;

über ein Beispiel Programm konnte ich eine csv datei mit Hilfe der Klasse QFile einlesen. Nächster Schritt wäre nun, die eingelesene CSV Datei tabellarisch in Qt darzustellen. Mit Hilfe der Klasse QTableWidget ist dies möglich. Allerdings muss ich jetzt nun wissen, wie ich die Anzahl der Spalten bzw. der Zeilen aus der eingelesenen Datei herausfinde um die Tabelle zu erstellen. Außerdem muss ich wissen, wie ich auf den Inhalt des jeweileigen Feldes der csv datei zugreife. Da ich noch ganz am Anfang der QT Programmierung stehe, wäre es sehr nett, wenn ihr mir helfen könnt.
Über Antworten wäre ich sehr dankbar. Gruß MO
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: CSV Dateien einlesen und tabelarisch darstellen

Beitrag von brax »

Wenn Du die Datei mit einem QTextStream einliest, kannst Du sie Zeilenweise einlesen, dadurch weißt Du dann schonmal wieviele Zeilen Du hast.

Die einzelnen Zeilen kannst Du über QString::split mit Komma als Separator zu einer QStringList machen, damit weißt Du dann wieviele Spalten Du hast (wenn die csv Datei inkonsistent ist, also Zeilen enthält, die weniger Werte haben als andere, wird das ganze etwas komplizierter, dann würde ich vorschlagen als Anzahl von Spalten das Maximum zu nehmen und die mit weniger mit NaN oder so aufzufüllen).
ScyllaIllciz
Beiträge: 200
Registriert: 9. Juli 2010 19:31

Re: CSV Dateien einlesen und tabelarisch darstellen

Beitrag von ScyllaIllciz »

Du kannst Dir auch mal QxtCsvModel aus der qxt lib anschauen.
moe
Beiträge: 7
Registriert: 7. Oktober 2011 18:05

Re: CSV Dateien einlesen und tabelarisch darstellen

Beitrag von moe »

Hallo nochmals,
habe einen Code gefunden, der mir eine CSV Datei in einer Tabelle darstellt. Allerdings stürzt mein Programm ab, sobald ich eine CSV Datei ausgewählt habe.
Vielleicht erkennt jemand von euch das Problem und kann mir helfen.
Vielen Dank schonmal im Voraus.

Hier mein Quellcode:

#include "mainwindow.h"
#include <QtCore>
#include <QTextStream>
#include <QFile>

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{

QString fileName=QFileDialog::getOpenFileName(this,tr("Datei oeffnen"),"","Alle Dateien(*.*)");
QFile f(fileName );

//File oeffnen nur zum Lesen
if( f.open( QIODevice::ReadOnly ) )
{
QTextStream ts( &f );
QList<QStringList> list;
int row = 0, col = 0;

//liest das ganze File und splittert die einzelnen Strings in Substrings und fügt sie der Liste hinzu
while( !ts.atEnd() ){list << ts.readLine().split( "," );
}
//das geöffnete File schließen
f.close();

tableWidget->setRowCount ( list.count() ); // Anzahl der Zeilen der Tabelle
tableWidget->setColumnCount( list[0].count() ); // Anzahl der Spalten in der Tabelle

tableWidget->setUpdatesEnabled( false ); // zur schnelleren Bearbeitung bei großen Listen

foreach( QStringList l, list )
{
foreach( QString str, l )
{tableWidget->setItem( row, col++, new QTableWidgetItem( str ));}
row++; col=0;
}
tableWidget->setUpdatesEnabled( true ); // Fertig mit Laden
setCentralWidget(tableWidget);
}

}
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Re: CSV Dateien einlesen und tabelarisch darstellen

Beitrag von upsala »

An welcher Stelle stürzt dein Programm ab und was sagt der Debugger dazu?
Antworten