Seite 1 von 1

Gibt es in Qt ein Befehl wie sscanf?

Verfasst: 19. Mai 2009 00:23
von forgoden
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

Verfasst: 19. Mai 2009 06:33
von Christian81
QString::toInt(). QString::toFloat() + QString::split() sollte da gehen.

Verfasst: 19. Mai 2009 08:09
von solarix
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;

Verfasst: 19. Mai 2009 08:10
von AuE
man kann auch einfach die alten befehle nutzen ;-) war nicht das was du hören wolltest.... ;-)

Re: Gibt es in Qt ein Befehl wie sscanf?

Verfasst: 19. Mai 2009 08:51
von RavenIV
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
erklär doch erst mal, was Du machen möchtest, bzw. was Dein Problem ist.

So ist das ein Stochern im Nebel...

Verfasst: 19. Mai 2009 09:50
von forgoden
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:
start 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
ich kenne zwar QString::split was ich aus der Doku gelesen hab, aber wenn da unterschiedliche Trennzeichen sind, dann wirds wieder umständlich
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.

man kann auch einfach die alten befehle nutzen Wink war nicht das was du hören wolltest....
meinst du jetzt den alten C String nehmen und irgendwie in Qstring konvertieren?

edit: hmm ich entdeckte jetzt regular expression. muss ich mich mal damit beschäftigen

Verfasst: 19. Mai 2009 10:00
von franzf
forgoden hat geschrieben:
man kann auch einfach die alten befehle nutzen Wink war nicht das was du hören wolltest....
meinst du jetzt den alten C String nehmen und irgendwie in Qstring konvertieren?
Nein. Er meint, du sollst den Befehl verwenden, den du veruchst zwanghaft in Qt-Syntax zu pressen ;)
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)