QFile Zeilen auslesen und Inhalt abspeichern [gelöst]
QFile Zeilen auslesen und Inhalt abspeichern [gelöst]
Hi,
ich möchte mit einem QFileDialog eine Datei auswählen und diese dann Zeile für Zeile auslehsen. Bis ein bestimmtes schlagwort drin vorkommt.
Desweitern möchte ich wenn andere Schlagwörter vorkommen er mir das was Hinter diesen Wörtern steht (sind alle durch ein = getrennt) in die Jeweiligen Variablen schreibt und danach eine Zeile weiter springt.
Jetzt weis ich halt nicht wie man das mit QFile macht.
Wäre für Hilfe dankbar.
Gruß
Qt-nator
ich möchte mit einem QFileDialog eine Datei auswählen und diese dann Zeile für Zeile auslehsen. Bis ein bestimmtes schlagwort drin vorkommt.
Desweitern möchte ich wenn andere Schlagwörter vorkommen er mir das was Hinter diesen Wörtern steht (sind alle durch ein = getrennt) in die Jeweiligen Variablen schreibt und danach eine Zeile weiter springt.
Jetzt weis ich halt nicht wie man das mit QFile macht.
Wäre für Hilfe dankbar.
Gruß
Qt-nator
Zuletzt geändert von Qt-nator am 14. Mai 2008 08:34, insgesamt 1-mal geändert.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Muss man mit dem readline machen oder. Nur versteh ich das nicht so ganz.
Würde das gehn?
Liest er dann alle Zeilen aus??
Würde das gehn?
Code: Alles auswählen
while (!file.atEnd())
{
QString line = file.readLine();
}
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Schau Dir endlich die Doku zu QFile an!!!Qt-nator hat geschrieben: Liest er dann alle Zeilen aus??
Das ist ja das Schlimme - man muss es nicht mal. Einfach mal die Seite durchlesen, es wird genau das Problem welches er hat in 'Read more' erklärt - aber anscheinend ist selbst das zu schwer :/RHBaum hat geschrieben:Vielleicht isses aber auch nur zu kompliziert, um von QFile auf QIODevice zu kommen (in der Doku) ...
Zuletzt geändert von Christian81 am 13. Mai 2008 15:22, insgesamt 1-mal geändert.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Was? Die 3 Zeilen in der Doku:Qt-nator hat geschrieben:Wenn ichs doch nicht verstehe!!!
Code: Alles auswählen
Reading Files Directly
The following example reads a text file line by line:
QFile file("in.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
while (!file.atEnd()) {
QByteArray line = file.readLine();
process_line(line);
}
The QIODevice::Text flag passed to open() tells Qt to convert Windows-style line terminators ("\r\n") into C++-style terminators ("\n"). By default, QFile assumes binary, i.e. it doesn't perform any conversion on the bytes stored in the file.
Using Streams to Read Files
The next example uses QTextStream to read a text file line by line:
QFile file("in.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QTextStream in(&file);
while (!in.atEnd()) {
QString line = in.readLine();
process_line(line);
}
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Aehm ja, dann muss man tiefer ansetzen .... und nicht die QT ist dein eigentliches Problem.Wenn ichs doch nicht verstehe!!!
Fuer die QT sollte man:
- c++ koennen, und das zwar ganz gut
- Dokumentationen lesen koennen
2. punkt eigentlich fuer alles was mit programmieren zu tun hat.
Also schau dir genau an mit was du Probleme beim verstehen hasst.
Normal brauch ich nicht mal eine zeile in der Doku zu lesen ... sondern ich "seh" eigentlich nur die funktionssignatur, also namen und parameter, und weiss zu 90% was "die" damit wollen. nachlesen muss ich dann nur noch "details" ueber das verhalten.
Klar, kann man das ned von anfang an, uebung .etc klar. Aber mit der Qt anfangen zu ueben .... ich weiss ned.
Also mit der STL und so sollt man sich schon bissi auskennen, und spaetestens wenn man sich die STL anschaut, sollt man nen gefuehl fuer sowas bekommen.
Und ja dein Code oben sollt so funktionieren. Ich hoffe es war nicht nur reines Glueck
atEnd() und readline() machen genau das, wie sie heissen
readline liefert dir aber nen QByteArray zurueck, welches der QString aber auch automatisch wandeln kann.
Bleibt eigentlich nur die Frage, warum fragst uns ? das kann man doch probieren ? und grad so lernt man auch dabei. Und Compilerfehler lesen lernen, ist auch nen sehr wichtiger Punkt.
Ciao ...
process = verarbeiten (in dem falle)process_line
vielleicht besser verstaendlich in dem falle waer:
Code: Alles auswählen
QFile file("in.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
while (!file.atEnd()) {
QByteArray line = file.readLine();
// nun tue hier irgend etwas mit der ausgelesenen zeile
}
Ciao ...
Vielen Vielen Dank RHBaum für die erklärung hat es echt verständlicher gemacht.
Das mein erster bescheidener Versuch:
Lässt sich jedenfalls Kompilieren jetzt muss ichs nur noch einbinden und testen.
Meine Frage wäre jetzt ob das der Richtige weg ist.
Wegen Doku lesen... hätte ich ausführlicher machen sollen.. hab sie nur überflogen..
Das mein erster bescheidener Versuch:
Code: Alles auswählen
void
ImportExport::Import(void)
{
QString strDataName;
QFileDialog::Options options;
QString strFileName = QFileDialog::getOpenFileName(0, tr("Parameter Map Open"), strDataName, tr("Parameter Map (*.map)"));
QFile file(strFileName);
QTextStream Text(&file);
file.open(QFile::ReadOnly);
while (!file.atEnd())
{
QByteArray strLine = file.readLine();
if(strLine.startsWith("Version="))
{
QString strText = strLine.mid(8);
strText.toDouble();
QMessageBox::information(0, tr("Save"), (strText));
}
else if(strLine.startsWith("Description="))
{
QString strText = strLine.mid(12);
QMessageBox::information(0, tr("Save"), (strText));
}
}
}
Meine Frage wäre jetzt ob das der Richtige weg ist.
Wegen Doku lesen... hätte ich ausführlicher machen sollen.. hab sie nur überflogen..