QString in Trippel zerlegen
-
Nabend, ich schreibe einen kleinen FAT12-Decoderm und nun moechte ich vor allem wegen der besseren Visualisierung einen QString in Trippel, also in 3er-Bloecke zerlegen.
mein Code sieht bis jetzt so aus:for ( int i = 0; i < tmp.length(); i++ ) { qDebug() << "2 i: " << i << "char: " << tmp[i]; tmp2.append(tmp[i]); if (i % 3 == 0) { tripples << tmp2; tmp2.clear(); } qDebug() << tmp2; }
tripples ist eine QStringList, tmp mein Eingabe-QString und tmp2 ein QString zum Zwischenspeichern.
das ganze gibt nur Murks aus
ich hab dann Versucht, mittelstripples << tmp.left( 3 ); tmp.remove( 0,3 );
das ganze einfach als 3er einzulesen und die gelesenen zu loeschen. dabei hab ich das ding einfach tmp.length()/3 mal durchlaufen lassen. Das is aber auch nichts.
In 2er Bloecke hab ich hinbekommen, Nibbles tauschen auch, aber am 3er beis ich mir die Zaehne aus.C167
-
tripples << tmp.left( 3 ); tmp.remove( 0,3 );
das war prinzipiell schon gut, nur harmoniert das mit dem schleifenzaehler nicht, weil sich "tmp.length()" staendig veraendert.
tust du so:
while (tmp.size()) { QString triple= tmp.left(3); tmp.remove( 0,3 ); }
-
wenn ich das auf
while ( tmp.size() ) { tripples << tmp.left( 3 ); tmp.remove( 0,3 ); }
aendere, gehts *jubel*
auf ne simple while() waere ich nie gekommenIch hab zwar grade ne ganze Weile gebraucht, um zu kapieren, warum er mir aus eingegebenen "1234" ein "214|3" bastelt. Ich Tausche ja die Nibbles vorher *klatsch*
Okay, vielen Dank
C167€dit: oh mann, und meine doch recht umstaendliche Zerleung in 2er geht damit ja auch sehr einfach...
vorher:nibbles.clear(); QString tmp; for ( int i = 0; i < newValue.length(); i++ ) { tmp.append( newValue[i] ); if ( i%2 == 1 ) { nibbles << tmp; tmp.clear(); } } tmp.clear(); if ( newValue.length() % 2 == 1 ) { nibbles << newValue[newValue.length()-1]; }
nachher;
nibbles.clear(); while ( newValue.length() ) { nibbles << newValue.left( 2 ); newValue.remove( 0,2 ); }
der anschliessende Tauscher laesst sich wohl nicht mehr vereinfachen, oder?
for ( int i = 0; i < nibbles.size(); i++ ) { tmp = nibbles[i]; if ( tmp.length() % 2 == 0 ) { nibbles[i][0] = tmp[1]; nibbles[i][1] = tmp[0]; } } line_step1->setText( nibbles.join( " " ) );