Seite 1 von 1

[gelöst] csv einlesen mit FileDialog

Verfasst: 28. November 2009 12:46
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();

}
} :?: :?:

Verfasst: 28. November 2009 13:41
von Troll.Soft
Du hast ein File.close()
wo ist das File.open() ??
tschüß
Troll.Soft

Verfasst: 28. November 2009 13:53
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();
...

Verfasst: 28. November 2009 14:11
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?

Verfasst: 28. November 2009 14:18
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(); 
        }
   }
}

Verfasst: 29. November 2009 12:13
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