[gelöst] QString Formatierungsprobleme

Alles rund um die Programmierung mit Qt
Antworten
butze
Beiträge: 39
Registriert: 7. Mai 2007 23:01

[gelöst] QString Formatierungsprobleme

Beitrag von butze »

hoi!

ich hab ein mehr oder weniger triviales Problem:

2 double -Qvectoren (je einer für x und einer fuer y Werte) sollen in eine Textfile abgespeichert werden.

Dabei gehe ich folgendermaßen vor:


Code: Alles auswählen


	for (int i = 0; i < anzahlDerVectorPaare; i++){
		QString fileName = port_arr[i].getName()+".txt";
		QFile file(fileName);
	
		file.open(QIODevice::WriteOnly);
		QTextStream out(&file);
		int zeilenUmbruch = 0;
		for (int j = 0; j<port_arr[i].getxVectorPtr()->size(); j++){
			double x = port_arr[i].getxVectorPtr()->at(j);
			double y = port_arr[i].getyVectorPtr()->at(j);
			QString point = QString::number(x) + "/" + QString::number(y) + "\t";

			out << point;
			zeilenUmbruch ++;
			if (zeilenUmbruch == 5)
			{
				zeilenUmbruch = 0;
				out << endl;
			}		
		}
		file.close();
		
	}


Das Problem ist dabei, dass zum Einen der zeilenUmbruch nicht kommt, also alle Daten nacheinander geschrieben werden (mit \n hab ich es anstelle von endln; auch versucht)
Dann gibt es noch weitere Formatierungsprobleme: Alle Werte haben leerzeichen zwischen den einzelnen Zahlen, bsp: statt 012345 gibt es 0 1 2 3 4 5 in der txtfile.

Zu allem Überfluss kommt bei jedem tab (\t, der komischerweise funktioniert) ein kleines rechteckiges Kästchen mit in die txt.


über google /Trolltec konnte ich leider nichts finden :(

Gruß

BuTze
Zuletzt geändert von butze am 16. August 2007 11:43, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Es sind keine Leerzeichen sondern \0 - Bytes. Da Du QTextStream benutzt wird es als unicode (utf-16) abgespeichert. Deshalb funktioniert wohl auch \n nicht.

Siehe http://doc.trolltech.com/4.3/qtextstream.html#setCodec
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Sephral
Beiträge: 201
Registriert: 1. Februar 2006 09:40
Kontaktdaten:

Beitrag von Sephral »

Hallo,

alternativ würde ich mir mal QSettings anschauen.
QSettings kann z.B. QPointF direkt in ein File schreiben und auch wieder auslesen.

Selbiges gilt auch für komplette Listen (QList<QVariant>).

Kommt natürlich darauf an, was du am Ende damit anstellen willst.

Ciao,
Sephral
butze
Beiträge: 39
Registriert: 7. Mai 2007 23:01

Beitrag von butze »

hi!

danke für eure Antworten. Damit hab ich das Problem jetzt so gelöst:

Code: Alles auswählen

    for (int i = 0; i < port_arr[0].getNbOfObjects(); i++)
    {
        QString fileName = port_arr[i].getName()+".txt";
        QFile file(fileName);
        emit writeLog("writing to: " + fileName);
        file.open(QIODevice::WriteOnly);
        QTextStream out(&file);
        out.setCodec("ISO 8859-1");
        for (int j = 0; j<port_arr[i].getxVectorPtr()->size(); j++)
        {
        	QString number = QString::number(j);
            QString xString = QString::number(port_arr[i].getxVectorPtr()->at(j));
            QString yString = QString::number(port_arr[i].getyVectorPtr()->at(j));
            //fill all numbers with 0 up to 7 chars
            out <<	number.rightJustified(7,'0')
          			+ "\t\t"
            		+ xString.rightJustified(7, '0') 
            		+ " / " 
            		+ yString.rightJustified(7, '0')
            		<< endl;
        }
        file.close();

Dass die Tabs angezeuigt wurden und die neuen zeilen nicht, das lag anscheinend an dem Windows-editor. PsPad und viele andere Testviewer zeigen es korrekt an!
Antworten