[gelöst] QString zeichenweise als Stream einlesen

Alles rund um die Programmierung mit Qt
Antworten
Ahmet Arslan
Beiträge: 17
Registriert: 12. Juli 2005 11:11
Wohnort: Köln

[gelöst] QString zeichenweise als Stream einlesen

Beitrag von Ahmet Arslan »

Hallo!

Kann mir jemand einen Tipp geben, wie ich einen QString zeichenweise einlesen kann?

Zwar könnte der String auch mit der For-Schleife:

Code: Alles auswählen

for( uint i = 0; i < string.length(); i++ )
durchlaufen werden, jedoch würde ich gerne die push_back - Methode benutzen, um Zeichen wieder in den Stream zurückzuschreiben.

Wenn ich einen QTextStream mit dem String erzeuge, dann habe ich mit read() und readLine() nur die Möglichkeit, den ganzen String einzulesen.

Ich stelle mir das im Grunde genommen wie folgt vor (ist aber Murks!):

Code: Alles auswählen

QString text = "Dies ist ein Test";
  QString result = "";
  QTextStream textStream( text, IO_ReadOnly );
  QTextStream resultStream( result, IO_WriteOnly );
  while( !textStream.atEnd() )
  {
    resultStream << textStream; 
    qDebug( resultStream.read() );
  }
Danke im Voraus!
Zuletzt geändert von Ahmet Arslan am 25. November 2005 20:30, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Und was willst Du damit erreichen?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Ahmet Arslan
Beiträge: 17
Registriert: 12. Juli 2005 11:11
Wohnort: Köln

Beitrag von Ahmet Arslan »

Ich suche nach einer Möglichkeit, einen Stream zeichenweise zu lesen und bei bestimmten auftretenden Zeichen eine Zeichenkette wieder in den Stream zurück zu schreiben.

Zum Beispiel die Zeichenkette:

"xx yy zz"

Nur wenn beim lesen die Zeichenkette "zz" auftritt, dann ist "xx yy" zusammengesetzt zu verstehen, sonst als "xx" und "yy". Um danach "zz" weiterzuverarbeiten, war es in einem anderen Zusammenhang für mich eine geschickte Möglichkeit, die Zeichenkette "zz" wieder in den Stream mit push_back(.) zurückzuschreiben.

Ist das vielleicht nicht nötig?
Sollte ich das bei einem gegebenen String besser im Rahmen der beschriebenen For-Schleife mit der Postionsbestimmung von Zeichenketten arbeiten?
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

inder Doku steht:
QTextStream in(file);
QChar ch1, ch2, ch3;
in >> ch1 >> ch2 >> ch3;
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich würde evtl. erst alles lesen und dann später die Auswertungen machen. So wie Du es beschreibst bleibt dir eh nichts anderes übrig als Zeichen für Zeichen abzuarbeiten. Und da ist es evtl. besser wenn man nicht noch mit Streams rumhantieren muss.
Wenn Du mehr Zeit hast und dich mit regulären Ausdrücken etwas auskennst, wäre evtl. QRegExp eine gute Möglichkeit Strings zu parsen...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Ahmet Arslan
Beiträge: 17
Registriert: 12. Juli 2005 11:11
Wohnort: Köln

Beitrag von Ahmet Arslan »

BartSimpson hat geschrieben:inder Doku steht:
QTextStream in(file);
QChar ch1, ch2, ch3;
in >> ch1 >> ch2 >> ch3;
Ich habe die Doku sorgfältig gelesen! Und außerdem haben ich das Kapitel 10 "Input/Output: Reading and Writing Text" von "C++ GUI programing with Qt" vor mir liegen, das leider genau an der Stelle nicht mehr weiter vertieft, an der es für mich interessant wird. Da heißt es:
Writing Text data isn't difficult, but reading text can be challenging. For complex formats, a full-blown parser might be required. Such a parser would typically work by reading the data character by character using >> on a QChar, or line by line using readLine() and iterating through the returned QString.
Christian81 hat geschrieben:Ich würde evtl. erst alles lesen und dann später die Auswertungen machen. So wie Du es beschreibst bleibt dir eh nichts anderes übrig als Zeichen für Zeichen abzuarbeiten. Und da ist es evtl. besser wenn man nicht noch mit Streams rumhantieren muss.
Wenn Du mehr Zeit hast und dich mit regulären Ausdrücken etwas auskennst, wäre evtl. QRegExp eine gute Möglichkeit Strings zu parsen...
Einfacher ist natürlich die Version mit der For-Schleife, aber ich dachte, wenn es heißt "such a parser would typically work by ...", dann versuche ich es auch besser "typically" zu machen. Leider wird nicht beschrieben, wie und ich habe den Code schon hin und hergewendet. Ohne Erfolg.
Ahmet Arslan
Beiträge: 17
Registriert: 12. Juli 2005 11:11
Wohnort: Köln

Beitrag von Ahmet Arslan »

BartSimpson hat geschrieben:inder Doku steht:
QTextStream in(file);
QChar ch1, ch2, ch3;
in >> ch1 >> ch2 >> ch3;
Du hattest recht! Ich hätte mir diese Stelle der Doku genauer ansehen sollen. Mit diesem Code erreicht man das Lesen eines QStrings als Stream:

Code: Alles auswählen

 
QString test = "Ein String";
QTextStream stream( test, IO_ReadWrite );
  QChar c;
  while( !stream.atEnd() ){
    stream >> c;
    qDebug( QString( c ) );
  }
In der Situation ist das auf jeden Fall besser, als mit QRegExp zu arbeiten.

Ich danke euch für eure Hilfe!
Antworten