[c++] Ausgabe in Textdatei: Spaltenweise schreiben
-
hatte ich schon probiert:
outuebergabe << j << " x1 " << genome.phenotype(0) << "\n " << j << " x2 " << genome.phenotype(1) << "\t";die ausgabe ist dann:
p0
p1 p0
p1 p0
p1 p0was mach ich da falsch?
-
Das Ergebnis ist doch genau das, was du laut Quelltext haben willst.
Oder hast du \t und \n in der Ausgabe vertauscht?
-
jedes neue Wertepaar (p0 und p1) soll in eine neue Spalte geschrieben werden.
-
Fellhuhn schrieb:
Das Ergebnis ist doch genau das, was du laut Quelltext haben willst.
Oder hast du \t und \n in der Ausgabe vertauscht?
-
wie gesagt ich bekomme mit dem code das serviert:
p0
p1 p0
p1 p0
p1 p0
-
hmm beschreib bitte nochmal genau, wie du die Ausgabe haben willst.
-
Statt
outuebergabe << j << " x1 " << genome.phenotype(0) << "\n " << j << " x2 " << genome.phenotype(1) << "\t";dann
outuebergabe << j << " x1 " << genome.phenotype(0) << "\t " << j << " x2 " << genome.phenotype(1) << "\n";oder eben:
for(int idx = 0; idx < 2; ++idx) { outuebergabe << j << " x" << (idx+1) << " " << genome.phenotype(idx); if (idx != 1) { outuebergabe << "\t "; } } outuebergabe << "\n";
-
so wollte ich es eben nicht haben: sondern so:
beim ersten Durchlauf:
p0-1
p1-1beim zweiten durchlauf:
p0-1 p0-2
p0-1 p0-2beim dritten:
p0-1 p0-2 p0-3
p0-1 p0-2 p0-3usw.
-
Versteh ich nicht. Ich sehe da keinerlei Zusammenhang zwischen dem was zu schreibst und deinen Variablen.
-
@ fellhuhn: wieso? die Wertepaare sollen jeweils eine eigene Spalte(nicht Zeile) bekommen, die durch einen Tabulator getrennt sind. siehe letzten Beitrag von mir. Bei deinem beispiel wird es eben zeilenweise geschrieben und das möchte ich halt nicht!

-
In deinem Quellcode gibst du offensichtlich für jedes genompaar (nämlich in jedem Schleifendurchlauf) einen Zeilenumbruch aus. Da du aber nur einen einzigen Zeilenumbruch willst ist das offenbar falsch.
In C++ kann man leider nicht ohne weiteres eine spaltenweise Ausgabe machen, da man dazu immer wieder in die vorherige Zeile springen müsste. Das ist aber mit Standard C++ nicht machbar. (Es gibt aber irgendwelche Konsole-Frameworks die das vielleicht können)Die Lösung für Standard-C++ ist also, dir erst die Zeilen zusammenzubasteln und sie dann auszugeben, wenn du fertig bist. Ich würds in etwa wie folgt anstellen:
ostringstream zeile0("Phenotyp 0: "); ostringstream zeile1("Phenotyp 1: "); for(int ii=0, end=ga.population().size(); ii<end; ++ii) { genome = ga.population().individual(ii); zeile0 << width(10) << genome.phenotype(0); zeile1 << width(10) << genome.phenotype(1); } outuebergabe << zeile0.str() << '\n' << zeile1.str() << '\n' << std::flush;
-
Danke, das sollte gehen. Ich hab wohl etwas um die Ecke gedacht!
