Solved textFile lesen zeile für zeile
-
@Galilio ja, und um mich selbst zu zitieren:
@J.Hilk said in textFile lesen zeile für zeile:
Weil ich ne Vermutung habe:
QVector<double> stringToVector(const QString &str){ QVector<double> vResult; QString s = str.split("(01,01)",QString::KeepEmptyParts).last(); auto splitRef = s.splitRef(" "); for(auto item : splitRef) vResult.append(QString::number(item)); return vResult; }
-
super danke
dazu eine Frage bitte, da ich qt4 verwende kann ich "auto" gar nicht benutzen. -
@Galilio auto hab ich nur der Schreibfaulheit halber geschrieben, war einige Zeichen kürzer:
QVector<double> stringToVector(const QString &str){ QVector<double> vResult; QString s = str.split("(01,01)",QString::KeepEmptyParts).last(); QVector<QStringRef> splitRef = s.splitRef(" "); foreach (QStringRef item, splitRef) vResult.append(QString::number(item)); return vResult; }
-
Sry, hab die falsche Funktion genommen!!!
Anstatt
vResult.append(QString::number(item));
sollte das
vResult.append(item.toDouble());
sein
-
@J.Hilk
ich bekomme folgende Fehlermeldung:
error C2039: 'splitRef' : is not a member of 'QString'Dieses fehler trifft dieses Zeile:
QVector<QStringRef> splitRef = s.splitRef(" ");
-
This function was introduced in Qt 5.4.
Wusste ja nicht das du mit Qt 4 arbeitest als ich das erstellt habe. Mach aus splitRef nen split aus QVector<QStringRef> mach QStringList und aus QStringRef mach QString
-
@J.Hilk
danke -
Sorry noch eine Frage:
ich möchte auch alle leere Strings löschen.
z.B ich habe folgende Zeil gelesen:
-0.5 0 0 0 0 0 0 0
Zweichen jeden Wert liegen immer 3 bis 4 leere Tasten und wenn ich so schreibe :QVector<double> vResult; QStringList splitList = str.split(" "); foreach (QString item, splitList) vResult.append(item.toDouble()); for(int i =0; i<vResult.size()-1; i++) { if(vResult[i] == 0) { vResult.remove(i); } qDebug() << "vResult[i] = "<<"i"<< i <<vResult[i]; return vResult; }
dann hat das splitList eine Länge von 34 und wie ich vorgegangen bin, ist falsch.
Es werden nicht alle leere Taste gelöscht.
sorry noch mal -
@Galilio Das Problem ist, wenn du split nutzt, brauchst du irgendwas, dass als Trennzeichen funktioniert. Häufig nimmt man dafür
,
oder;
wo auch der Begriff CSV-Datei herkommt. Comma separated Values.In der Datei die du gepostet hast, konnte ich als Trennzeichen nur ein Leerzeichen aus machen. split(' ') macht dann aus zwei Leerzeichen 2 Einträge mit Leeren Strings.
toDouble
gibt, wenn eine Umwandlung fehlgeschlagen ist - was es bei einem leeren String tut, 0.0 wieder.Das einfachste ist es wenn du das abfängst:
QVector<double> vResult; QStringList splitList = str.split(" "); foreach (QString item, splitList) if(!item.isEmpty()) vResult.append(item.toDouble()); return vResult;
du kannst auch eine variable dem
toDouble
übergeben, um zu sehen ob die Umrechnung erfolgreich war:QVector<double> vResult; QStringList splitList = str.split(" "); bool ok; foreach (QString item, splitList){ if(!item.isEmpty()){ vResult.append(item.toDouble(&ok)); qDebug() << "String to Double erfolgreich:" << ok; }else qDebug() << "Stringlist item war leer"; } return vResult;
-
@J.Hilk
vielen vielen dank