Schöne Ausgabe in Konsole
-
@SeppJ
Wobei man davon ausgehen kann dass ein Tab üblicherweise zu einem "Weiterschieben" des Cursors auf den nächsten "Tab-Stop" führt, und die "Tab-Stops" mindestens 4 Zeichen weit auseinanderliegen.Wenn man nicht den Anspruch stellt dass es auf allen denkbaren Plattformen unbedingt gut aussieht, kann das also durchaus ein akzeptabler Weg sein.
-
Clundsch schrieb:
hab aber grad nicht vor Augen, ob der auf bestimmte Positionen springt, oder einfach nur 5 Leerzeichen oder so.
EDIT: es sind die feste Anzahl an Leerzeichen

Also auf Windows (cmd.exe von Windows 7) sind es feste Positionen, nicht feste Anzahl Leerzeichen.
-
Eine andere Möglichkeit wäre, die Tabelle zu buffern, den breitesten Wert einer Spalte rausfinden, um eine Konstante addieren und dann mithilfe des errechneten Wertes das setw für eine Spalte festzulegen. Für gewöhnlich ist das Ausgeben auf die Konsole so langsam, dass man selbst nen 10x buffern nicht bemerkt

-
template<typename T> size_t maxWidth(const T& table, size_t xPos, size_t yDim) { size_t width = 0; size_t length; for (size_t y = 0; y < yDim; ++y) { std::ostringstream oStream; oStream << table[xPos][y]; length = oStream.str().length(); if (width < length) width = length; } return width; } template<typename T> void printArray2D(const T& table, size_t xDim, size_t yDim) { // lookuptable für Breite erstellen size_t width[xDim]; for (size_t x = 0; x < xDim; ++x) width[x] = maxWidth(table, x, yDim); for (size_t y = 0; y < yDim; ++y) { for (size_t x = 0; x < xDim; ++x) { if (x) std::cout << " | "; std::cout << std::setw(width[x]) << table[x][y]; } std::cout << std::endl; } } int main(void) { const size_t DIM_X = 2; const size_t DIM_Y = 3; int matrix[DIM_X][DIM_Y] = {{165464, 222, 32}, {874, -5665, 62456546}}; printArray2D(matrix, DIM_X, DIM_Y); }ergibt die Ausgabe:
165464 | 874 222 | -5665 32 | 62456546
-
hustbaer schrieb:
@SeppJ
Wobei man davon ausgehen kann dass ein Tab üblicherweise zu einem "Weiterschieben" des Cursors auf den nächsten "Tab-Stop" führt, und die "Tab-Stops" mindestens 4 Zeichen weit auseinanderliegen.Das hätte ich auch gedacht, vor dem Beitrag von Cyres, der offenbar in Windows getestet hat und ein anderes als das mir von Linuxkonsolen bekannte Verhalten beobachtet hat.
-
Ich habe seit glaube ich 2 Jahren nicht mehr unter Windows programmiert, hatte ich mich denn zu TabStops geäußert?

-
Cyres schrieb:
Ich habe seit glaube ich 2 Jahren nicht mehr unter Windows programmiert, hatte ich mich denn zu TabStops geäußert?

Ups, das warst gar nicht du, sondern Clundsch.
-
Ich glaube, dich verwirren hustbaers und mein Doppelpost

hustbaer schrieb:
Also auf Windows (cmd.exe von Windows 7) sind es feste Positionen, nicht feste Anzahl Leerzeichen.
Könnte natürlich auch sein, dass es nicht Systemabhängig, sondern Konsolenabhängig ist. Ich glaube kaum, dass man cmd mit Powershell vergleichen kann.
-
PowerShell hab ich nicht ausprobiert.
cmd.exe (kann hier nur Windows 7 probieren, hab' keine XP Installation griffbereit) macht wie gesagt fixe Tab-Stops.Auch haben Tabs den Vorteil dass die so entstandenen Files einfach in alle möglichen Programme importierbar sind.
Spalten mit Fixbreite (Space-Padding) fressen wohl auch die meisten Programme, nur kann man da u.U. Probleme bekommen wenn ein Wert in einer Spalte doch mal zu lange wird, und man muss manchmal mit Hand "nachbessern", wenn das importierende Programm Spalten erkennt die gar nicht da sind.Space-Padding + Trennzeichen (";" oder sowas) wäre vermutlich noch eine gute Option. ISAM FTW

-
Für das schreiben in Dateien würde ich auch auf jedenfall Tabs benutzen, ich habe mich allerdings am Topic-Titel orientiert

-
Dank euch für die Hilfe....
Ich benutze das "setfill" und es funktioniert perfekt...schönen Tag Cascoin