-
Hallo, ich habe ein paar kleine Formatierungsprobleme auf meinem outstream.
momentan verwende ich noch COUT um die Formatierung zu regeln, später im Programm werde ich stattdessen fstream verwenden um auf eine txt-Datei zu schreiben.Habe momentan das Problem, dass ich gerne folgende Ausgabe hätte:
// auf dem Outstream PictureLink MyLink CardName BlaBlaBla Edition MMM Rareness Rare Colour Black ManaCosts 1+3B CardType Neverever Price 12.95Wie kann ich denn die Variablen rechtsbündig anordnen?? egal was da von meinem selbstgeschriebenem Scanner an Stringlängen so ankommt? Also ich möchte quasi die strings und doubles die ich habe schön untereinander rechtsbündig am Outstream enden lassen...
Problem 2:
Ich habe einen Vector aus strings und möchte den darin gespeicherten text so ausgeben das sinnvolle Zeilenumbrüche ab einer gewissen Länge gemacht werden
//Outstream Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text//Meine aktuelle Print-Methode void CardReader::Print(std::ostream & ost) const { // Zugriff auf PrivateMember funktioniert nicht (Iterator-Fehler) size_t CardCounter = 1; ost << "--------------------[Print: Vector]--------------------" << endl; for (std::vector<CardInformation>::const_iterator Iter = Vect.begin(); Iter != Vect.end(); Iter++) { ost << "--------------[Karte aus VektorPosition " << CardCounter << "]--------------" << endl; ost << setfill(' ') << cPictureLink << setw(55) << Iter->PictureLink << endl; ost << cCardName << setw(55) << Iter->CardName << endl; ost << cEdition << setw(55) << Iter->Edition << endl; ost << cRareness << setw(55) << Iter->Rareness << endl; ost << cColour << setw(55) << Iter->Colour << endl; ost << cManaCosts << setw(55) << Iter->ManaCosts << endl; ost << cCardType << setw(55) << Iter->CardType << endl; ost << cPrice << setw(55) << Iter->Price << endl; ost << cTournaments << setw(55) << Iter->Tournaments << endl; size_t TextPositonCounter = 0; ost << cCardText << endl; for(std::vector<std::string>::const_iterator IT = Iter->CardText.begin(); IT != Iter->CardText.end(); IT++){ ost << Iter->CardText[TextPositonCounter] << " "; if(TextPositonCounter % 9 == 0) ost << endl; TextPositonCounter++; } ost << endl << endl << endl; CardCounter++; } ost << "--------------------[Print: End]--------------------" << endl; }
-
Problem 0: Da die Streams alle gleich sind, wird eine Lösung für einen Stream für alle funktionieren
Problem 1: Rechtsbündig und Linksbündig:#include <iostream> #include <iomanip> #include <string> #include <array> #include <vector> int main() { using namespace std; vector<array<string, 2>> foo = {{"Hallo", "Welt"}, {"Tri Tra Tru", "lala"},{"Der Kapser der", "ist wieder da"}}; cout << "Unformatiert:\n"; for(unsigned i = 0; i < foo.size(); ++i) { cout << foo[i][0] << foo[i][1] << '\n'; } cout << "\n\nFormatiert:\n"; for(unsigned i = 0; i < foo.size(); ++i) { // HIER steht das wichtige, der Rest des Programms ist bloß Drumherum für das Beispiel cout << setw(15) << left << foo[i][0]; cout << setw(15) << right << foo[i][1] << '\n'; } }Problem 2: Automatischer Zeilenumbruch. Eieiei, das ist ein bisschen schwieriger. Es ist möglich. Du wirst aber dafür einen eigenen Streambuf brauchen, der die Zeichen mitzählt, puffert, an der richtigen Stelle Trennzeichen einfügt und erst dann weitergibt, wenn er sicher ist, dass die Zeile ganz ist. Irgendwo hier im Forum geistert so etwas herum (wahrscheinlich von Autor Werner Salomon, eventuell auch von mir). Ich habe aber gerade keine Zeit, das zu suchen. Wenn du Glück hast liest Werner diesen Thread und zeigt es dir oder du findest es selbst.
-
MathiasS schrieb:
// auf dem Outstream
PictureLink MyLinkGinge mit
#include <iostream> #include <string> #include <stdexcept> struct Printer { Printer(size_t toRight): mtoRight(toRight) {} std::string operator()(std::string const& first, std::string const& second) { if(static_cast<int>(mtoRight) - static_cast<int>(second.length()) - static_cast<int>(first.length()) <= 0) throw std::logic_error("Printer::operator(): The amount of characters to the right size is invalid!"); return first + std::string(mtoRight - second.length() - first.length(), ' ') + second; } private: size_t mtoRight; }; int main() { Printer p(20); std::cout << p("Hallo", "Welt!") << '\n' << p("Bestellung:", "Kaese"); }Zum Problem Zwei: Wann genau das passiert musst du selbst definieren.

-
Hallo schon mal danke für deine Antwort!
Ich glaube das Problem aus Beispiel 2 habe ich vllt nicht genau genug beschrieben:
die Sachen die links stehen bei mir als zb CardName, PictureLink usw...
sind leider unterschiedlich lang!Die Sachen die rechts davon untereinander stehen sollen sind je nach Scannereinlesen IMMER unterschiedlich lang, das weiß ich vorher noch nicht welche strings und doubles das werden.
Drum wird das glaube ich mit dem Iomanip nicht funktionieren, weil da die jeweiligen zeilen ja kein einheitliches Ende haben oder?
also habs mal so umgeschrieben:
ost << cPictureLink << setw(55) << right << Iter->PictureLink << endl; ost << cCardName << setw(55) << right << Iter->CardName << endl; ost << cEdition << setw(55) << right << Iter->Edition << endl; ost << cRareness << setw(55) << right << Iter->Rareness << endl; ost << cColour << setw(55) << right << Iter->Colour << endl; ost << cManaCosts << setw(55) << right << Iter->ManaCosts << endl; ost << cCardType << setw(55) << right << Iter->CardType << endl; ost << cPrice << setw(55) << right << Iter->Price << endl; ost << cTournaments << setw(55) << right << Iter->Tournaments << endl;erhalte dadurch dann aber für jede zeile ein anderes Ende leider

-
Du willst praktisch einen Blocksatz.
-
Hier noch als Nachtrag das vorläufige einzulesende File ( das echte File wird mehrere tausend Zeilen lang sein... )
Wie man sieht wird jede karte am Outstream ausgegeben und es soll auch jede Karte von ihren Variablen her gleich formatiert sein
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X PictureLink MyLink CardName Vampire Nocturnus Edition M13 Rareness Mythic Rare Colour Black ManaCosts 1 + 3B CardType Creature - Vampire Price 12.95 Euro Tournaments Vintage | Legacy | Extended | Modern | Standard CardText Play with the top card of your library revealed. As long as the top card of your library is black, Vampire Nocturnus and other Vampire creatures you control get +2/+1 and have flying. Strength 3 | Weakness 3 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X PictureLink MyLink CardName Lightning Bolt Edition M10 Rareness Cummon Colour Red ManaCosts 1R CardType Instant Price 0.99 Euro Tournaments Vintage | Legacy | Extended | Modern | Standard CardText Lightning Bolt deals 3 damage to target creature or player. X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X PictureLink Blabla CardName Blabla Edition Blabla Rareness Blabla Colour Blabla ManaCosts Blabla CardType Blabla Price 11.1 Euro Tournaments Blabla| Blabla | Blabla | Blabla | Blabla CardText Blabla Blabla Blabla Blabla Blabla Blabla. X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
-
out schrieb:
Du willst praktisch einen Blocksatz.
LOL so einfach hätte man es auch sagen können -,-
-
Bitte lies meine Antwort, insbesondere mein Beispielprogramm genau! Führ es zur Not selber aus, wenn du mir nicht glaubst:
Unformatiert: HalloWelt Tri Tra Trulala Der Kapser derist wieder da Formatiert: Hallo Welt Tri Tra Tru lala Der Kapser der ist wieder da
-
SeppJ schrieb:
Bitte lies meine Antwort, insbesondere mein Beispielprogramm genau! Führ es zur Not selber aus, wenn du mir nicht glaubst:
Unformatiert: HalloWelt Tri Tra Trulala Der Kapser derist wieder da Formatiert: Hallo Welt Tri Tra Tru lala Der Kapser der ist wieder daAh ok jetzt gehts dankö

-
SeppJ schrieb:
Bitte lies meine Antwort, insbesondere mein Beispielprogramm genau!
War fuer ihn ein typischer Fall von tl:dr...