Gibt es in Qt so etwas ähnliches wie sscanf? Hab lange gesucht und dazu nix gefunden.
fgets(oneline, 255, filein);
sscanf(oneline, "%f %f %f", &get_x, &get_y, &get_z);
was man aus #include <stdio.h> kennt.
ähnlich wie .arg() nur einlesen statt schreiben
Gibt es in Qt ein Befehl wie sscanf?
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
in deinem Fall (mit Spaces) ginge auch:
Code: Alles auswählen
QString oneline = "23.1 42.2 66.6";
QTextStream str(&oneline);
float f1,f2,f3;
str >> f1 >> f2 >> f3;
Re: Gibt es in Qt ein Befehl wie sscanf?
erklär doch erst mal, was Du machen möchtest, bzw. was Dein Problem ist.forgoden hat geschrieben:Gibt es in Qt so etwas ähnliches wie sscanf? Hab lange gesucht und dazu nix gefunden.
fgets(oneline, 255, filein);
sscanf(oneline, "%f %f %f", &get_x, &get_y, &get_z);
was man aus #include <stdio.h> kennt.
ähnlich wie .arg() nur einlesen statt schreiben
So ist das ein Stochern im Nebel...
Linux, das längste Text-Adventure aller Zeiten
danke für die Tipps.
Was ich wirklich machen wollte ist, die Daten etwas smart auszulesen.
sie haben Werte wie z.B. x,y,z manchmal getrennt durch andere Zeichen.
z.b. sieht es so aus:
Im obigen Beispiel würde beim splitten
6:
384
664
1
1
rauskommen. Der Doppelpunkt muss weg. Klar kann man das mit einem Befehl einfach löschen, aber wenn es komplexer wird, wenn noch viele andere Zeichen dazu sind, werden die vielen Befehle doch irgendwie umständlich? sscanf würde nur (line, "%d:;%d;%d;%d", &get_1, &get_2, &get_3, &get_4); genügen
Wenn irgendwelche Störbuchstaben dazwischen sind, oder eine Zahl fehlt soll auch das das Programm lesen können.
edit: hmm ich entdeckte jetzt regular expression. muss ich mich mal damit beschäftigen
Was ich wirklich machen wollte ist, die Daten etwas smart auszulesen.
sie haben Werte wie z.B. x,y,z manchmal getrennt durch andere Zeichen.
z.b. sieht es so aus:
ich kenne zwar QString::split was ich aus der Doku gelesen hab, aber wenn da unterschiedliche Trennzeichen sind, dann wirds wieder umständlichstart macro:
1:;334;478;1;1
2:;676;42;1;1
3:;1064;104;1;1
4:;1100;704;1;1
5:;566;798;1;1
6:;384;664;1;1
Im obigen Beispiel würde beim splitten
6:
384
664
1
1
rauskommen. Der Doppelpunkt muss weg. Klar kann man das mit einem Befehl einfach löschen, aber wenn es komplexer wird, wenn noch viele andere Zeichen dazu sind, werden die vielen Befehle doch irgendwie umständlich? sscanf würde nur (line, "%d:;%d;%d;%d", &get_1, &get_2, &get_3, &get_4); genügen
Wenn irgendwelche Störbuchstaben dazwischen sind, oder eine Zahl fehlt soll auch das das Programm lesen können.
meinst du jetzt den alten C String nehmen und irgendwie in Qstring konvertieren?man kann auch einfach die alten befehle nutzen Wink war nicht das was du hören wolltest....
edit: hmm ich entdeckte jetzt regular expression. muss ich mich mal damit beschäftigen
Zuletzt geändert von forgoden am 19. Mai 2009 10:09, insgesamt 1-mal geändert.
Nein. Er meint, du sollst den Befehl verwenden, den du veruchst zwanghaft in Qt-Syntax zu pressenforgoden hat geschrieben:meinst du jetzt den alten C String nehmen und irgendwie in Qstring konvertieren?man kann auch einfach die alten befehle nutzen Wink war nicht das was du hören wolltest....
Mach ein #include <stdio.h>, und verwende sscanf, um aus dem const char* deine Zahlen zu extrahieren. Wenn du die Datei mit Qt-streams einliest, gibt es für die gelesenen QStrings (QByteArrays) auch Möglichkeiten, die in eine const char* zu bekommen. (->Doku)