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, mittels

    tripples << 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 gekommen 😉

    Ich 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( " " ) );
    

Anmelden zum Antworten