Seite 1 von 2

Warum geht <QByteArray>.split("Split") nicht

Verfasst: 3. Juli 2007 12:51
von qtp
Hy,

in meinem Code lese ich ein QByteArray aus und möchte es teilen. Dafür gibt es ja die Fkt. split().
Der muss man aber ein char übergeben und ich stehe gerade völlig auf dem Schlauch, wie ich da "Split" übergeben muss?

Derzeit noch so (wird nicht kompiliert):

Code: Alles auswählen

QByteArray ba;
QList<QByteArray> baList;
// ba wird mit Daten gefüllt
baList=ba.split("Split"); //->geht nicht!!??

Verfasst: 3. Juli 2007 13:10
von May-C
"Split" ist ja wohl kein char oder ?

Folgendes wird funktionieren:

Code: Alles auswählen

baList=ba.split('s');

Verfasst: 3. Juli 2007 13:24
von qtp
Stimmt!, Klar! :D

Aber ich brauche unbedingt die Möglichkeit mehrere zeichen als Splitter zu benutzen, da es zu wahrscheinlich ist, dass das eine Zeichen auch nur so da drin ist!

Verfasst: 3. Juli 2007 13:28
von @udisello
Dann pack das ganze in einen String und wende dessen Split Funktion an.
QStringList split ( const QString & sep, SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const

Verfasst: 3. Juli 2007 13:59
von qtp
Und kann ich dann danach das einzelne Teile des QStringList wieder in QByteArrays zurückverwandeln?

Verfasst: 3. Juli 2007 14:15
von @udisello
Sollte kein Problem darstellen. Einfach über die Stringliste jagen und
QByteArray & append ( const QString & str )
verwenden.

Verfasst: 3. Juli 2007 15:51
von qtp
Mmh, jetzt hab ich aber ein anderes problem: Ich habe das QByteArray durch

Code: Alles auswählen

QString str(ba);
in ein QString umgewandelt, aber str hat nicht den Inhalt von ba, sondern nur die ersten 3 Zeichen. Warum denn das?

Verfasst: 3. Juli 2007 16:02
von @udisello
was steht denn in ba?

Verfasst: 4. Juli 2007 11:26
von qtp
Der Inhalt einer ganzen .dat Datei!

Verfasst: 4. Juli 2007 11:29
von @udisello
Dann liegt es vielleicht daran
QString::QString ( const QByteArray & ba )

Constructs a string initialized with the byte array ba. The given byte array is converted to Unicode using fromAscii(). Stops copying at the first 0 character, otherwise copies the entire byte array.

Verfasst: 4. Juli 2007 11:38
von qtp
Mmh, und wie kann ich das trotzdem alles in den String kopieren?

Verfasst: 4. Juli 2007 12:19
von upsala
Gar nicht. Mach es manuell. So aufwendig ist es nicht, eine Split-Methode nachzubilden.

Verfasst: 4. Juli 2007 12:22
von qtp
Mmh, Kannst du mir vllt. einen kleinen Denkanstoß geben? (bisschen Code?)

Verfasst: 4. Juli 2007 12:28
von macman
qtp hat geschrieben:Der Inhalt einer ganzen .dat Datei!
Dann solltest Du das einlesen der Datei noch mal überdenken. Bisher hast Du es anscheinend mit QIODevice::readAll() gemacht, besser wäre QTextStream::readAll(). Da könntest Du ein Encoding setzen und hättest es sofort in einem String.

Verfasst: 4. Juli 2007 12:32
von qtp
Das mit QTextStream hab ich schon probiert, aber da stimmt der Inhalt des QStrings nicht mehr mit dem Original in der Datei überein!

EDIT: Was meinst du mit Encoding setzen ?