Gibt es in Qt ein Befehl wie sscanf?

Alles rund um die Programmierung mit Qt
Antworten
forgoden
Beiträge: 120
Registriert: 10. Februar 2008 17:52

Gibt es in Qt ein Befehl wie sscanf?

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

QString::toInt(). QString::toFloat() + QString::split() sollte da gehen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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;
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

man kann auch einfach die alten befehle nutzen ;-) war nicht das was du hören wolltest.... ;-)
RavenIV
Beiträge: 267
Registriert: 21. Januar 2009 14:24
Wohnort: Waldshut

Re: Gibt es in Qt ein Befehl wie sscanf?

Beitrag 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...
Linux, das längste Text-Adventure aller Zeiten
forgoden
Beiträge: 120
Registriert: 10. Februar 2008 17:52

Beitrag 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
Zuletzt geändert von forgoden am 19. Mai 2009 10:09, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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)
Antworten