QTextStream? [gelöst]

Alles rund um die Programmierung mit Qt
Antworten
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

QTextStream? [gelöst]

Beitrag von Whitefurrows »

Hallo,

warum bekomme ich im folgenden Beispiel von ts.readAll() ein anderes Ergebnis wenn ich vorher ts.readLine() ausführe?

Code: Alles auswählen

QTextStream ts (device);
ts.setCodec("UTF-8");

while( !ts.atEnd() )
{
QString line = ts.readLine();
//...
}

ts.seek(NULL);
QString text = ts.readAll();
Der Text sieht in qDebug() schon identisch aus, allerdings ist der erzeugte MD5-Hash aus "text" ein anderer, wenn zuvor ts.readLine() genutzt wurde. Vermutlich fehlen dann irgend welche Steuerzeichen wie z.B. "\r".

Gibt es eine Möglichkeit dass bei ts.readLine() die Steuerzeichen wie "\n" und "\r" nicht entfernt werden?

Vielen Dank schon mal...
Zuletzt geändert von Whitefurrows am 22. November 2010 13:50, insgesamt 1-mal geändert.
dazedly
Beiträge: 197
Registriert: 3. Oktober 2010 15:38
Kontaktdaten:

Beitrag von dazedly »

Du könntest die newlines wieder selbst einfügen. Warum sollte readline ein newline am Ende der Zeile einlesen?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Es ist nunmal ein stream - wenn man was rausgelesen hat ist es weg. Also was erwartest Du?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Beitrag von Whitefurrows »

OK, war mir so nicht wirklich klar, das es bei einem Stream so ist. Wie kann ich es aber dann machen?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Was machen? Alles lesen? Warum willst du etwas doppelt lesen?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Beitrag von Whitefurrows »

Doppelt will ich nichts lesen. Ich möchte eine Text-Datei zeilenweise lesen, aber auch mit den Steuerzeichen am ende einer Zeile wie "\n", "\r" und "\n\r". Diese werden nämlich nach dem lesen beim generieren des MD5-Hash berücksichtigt.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ein md5-Hash wird auf den Inhalt einer Datei erstellt. Ein QTextStream liest die Daten einer Datei interpretiert als QString ein. Was soll das ganze also?? Ein QTextStream ist definitiv nicht das korrekte Werkzeug um einen Hash zu erstellen...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Beitrag von Whitefurrows »

Genauer gesagt sind es CSV-Dateien. In der ersten Zeile steht der MD5-Hash welcher den Daten ab der zweiten Zeile entspricht. Vor dem einlesen muss der Hash geprüft werden um ggf. anschließend die Daten zu importieren, welche dann Zeilenweise zu lesen sind. Dabei sind die Steuerzeichen dann unwichtig, da sie nur zum prüfen des Hash benötigt werden. Was wäre für diese Aufgabe dann das richtige Werkzeug bzw. wie könnte es funktionieren?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wie du schon mitbekommen hast modifiziert ein QTextStream die Daten. Er interpretiert die Daten als Strings. Du willst die Daten als das was sind sind - eine Folge von Bytes. Wie wäre es also mit QIODevice::read() ?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Beitrag von Whitefurrows »

Das wäre soweit auch OK, aber wie bekomme ich dann mit read nur die Folge von Bytes ab der Zweiten Zeile?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Indem man nach \n sucht würde ich sagen ...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Beitrag von Whitefurrows »

Schon klar, aber wie kann ich mit dem QIODevice nach "\n" suchen und dann alles nach dem "\n" bzw. "\n\r" lesen? Weil das "\r" darf in dem Hash nicht berücksichtigt werden, falls vorhanden.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Doku -> QIODevice::read bzw. QIODevice::readAll -> QByteArray::indexOf() ... :roll:
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Beitrag von Whitefurrows »

Die liebe Doku sehr gut, aber auch groß und ich hatte leider nicht das richtige gefunden. Vielen Dank für die Hilfe, jetzt funktioniert alles!
Antworten