Schöne Ausgabe in Konsole



  • ansonsten geht glaub ich auch

    '\t'
    

    als Tabulator. 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 😞


  • Mod

    Clundsch schrieb:

    ansonsten geht glaub ich auch

    '\t'
    

    als Tabulator. 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 😞

    Was ein Tabluator macht, ist systemabhängig. Er wird aber allgemein als ein Trennzeichen angesehen. Kommt eben drauf an, was die Macher der Darstellung eines Tabulators sich unter einer sauberen Trennung vorstellen.



  • @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
    

  • Mod

    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? 😃


  • Mod

    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


Anmelden zum Antworten