[gelöst] csv einlesen mit FileDialog

Alles rund um die Programmierung mit Qt
Antworten
RogerWilco
Beiträge: 61
Registriert: 26. November 2009 00:08
Kontaktdaten:

[gelöst] csv einlesen mit FileDialog

Beitrag von RogerWilco »

Hallo zusammen,
ich versuche aus einer Textdatei (später dann mal csv) zu lesen,
und dann in ein Array zu schreiben (Array Testspektrum wird in der Funktion übergeben, aber noch nicht benutzt). Leider bleibt der String/Stream(?) leer (Test mit QMessagebox).
Vielleicht weiß hier jemand Rat?
Vorlage war S. 453, Qt4 Gui Entwicklung von Jürgen Wolf.

void myTool::openCsvFile(cSpectrum *TestSpektrum)
{
QString str_FileName;
QString str_Line; // read line by line

str_FileName = QFileDialog::getOpenFileName(this, tr("Datei öffnen"), "", "Alle Dateien (*.*)" );


if (!str_FileName.isEmpty())
{

QFile File(str_FileName);
QTextStream ds(&File);

QMessageBox X;
X.setText(ds.readLine());
X.exec(); // Testausgabe bleibt leer

for (int i=0; i < 5; i++)
{

str_Line = ds.readLine();
QMessageBox Test;
Test.setText(str_Line);
Test.exec();
}
File.close();

}
} :?: :?:
Zuletzt geändert von RogerWilco am 29. November 2009 12:14, insgesamt 1-mal geändert.
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Beitrag von Troll.Soft »

Du hast ein File.close()
wo ist das File.open() ??
tschüß
Troll.Soft
RogerWilco
Beiträge: 61
Registriert: 26. November 2009 00:08
Kontaktdaten:

Beitrag von RogerWilco »

Mhhh... im Beispiel war keins drin.
Allerdings auch kein File.close()

Aber wie müsste das aussehen?

Der folgende Code funktioniert nicht. Was muß ich denn als Parameter bei open() übergeben?


...
if (!str_FileName.isEmpty())
{

QFile File(str_FileName);
File.open();
QTextStream ds(&File);

QMessageBox X; // Testausgabe bleibt leer
X.setText(ds.readLine());
X.exec();
...
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Beitrag von Troll.Soft »

bool QFile::open ( OpenMode mode ) [virtual]

Opens the file using OpenMode mode, returning true if successful; otherwise false.

The mode must be QIODevice::ReadOnly, QIODevice::WriteOnly, or QIODevice::ReadWrite. It may also have additional flags, such as QIODevice::Text and QIODevice::Unbuffered.

Note: In WriteOnly or ReadWrite mode, if the relevant file does not already exist, this function will try to create a new file before opening it.

Note: Because of limitations in the native API, QFile ignores the Unbuffered flag on Windows.

Reimplemented from QIODevice.

See also QIODevice::OpenMode and setFileName().
vermutlich brauchst Du ReadOnly, aber sagt das Deine Doku nicht auch?
ChMaster
Beiträge: 252
Registriert: 23. Februar 2005 14:44
Wohnort: RP -> Alzey
Kontaktdaten:

Beitrag von ChMaster »

Servus,

Wie Troll.Soft es sagte, man braucht den OpenMode. Ausserdem liefert Qt von Haus aus Beispiele mit. Wäre schön, wenn man sie auch benützen würde!

Aber ich bin mal nicht so. ;)

Code: Alles auswählen

void myTool::openCsvFile(cSpectrum *TestSpektrum) 
{
   QString str_FileName;
   QString str_Line;	 // read line by line 

   str_FileName = QFileDialog::getOpenFileName(this, tr("Datei öffnen"), "", "Alle Dateien (*.*)" ); 


   if (!str_FileName.isEmpty()) 
   { 

        QFile File(str_FileName); 
        if( File.open( QIODevice::ReadOnly | QIODevice::Text ) )
        {
            QMessageBox Test;

            QTextStream ds(&File);
            while( !ds.atEnd() )
            {
                 str_Line += ds.readLine() + "\n"; 
            }

            Test.setText( str_Line );
            Test.exec();

            File.close(); 
        }
   }
}
ChMaster
------------ Projekte------------
DBoxFE
DMS
First4 (Plugin-Develper)
RogerWilco
Beiträge: 61
Registriert: 26. November 2009 00:08
Kontaktdaten:

Beitrag von RogerWilco »

Erstmal vielen Dank.
Es stimmt, es gibt eine Menge Doku. Und die Doku ist sicher auch umfassend.
Ich muß nur für mich als Anfänger sagen:
Ich sehe da oft den Wald vor Bäumen nicht. :shock:
Da steht unheimlich viel und für mich als Anfänger ist da vieles nicht glasklar oder ich suche an der falschen Ecke.
Übung macht den Meister.
Aber Danke an die Profis hier, die sich den Newbies annehmen!
:D
Antworten