Text in Spalten

Lemieux66

Mitglied
Hallo zusmmen, ich habe da eine kleines Problem mit dem einteilen meines einegeben Textes.
Ich möchte in meinem .txt File das Datum und ein Text drin haben, aber wenn der Text nicht immer gleich lang ist, verschiebt es mir das Datum, z.b:

Text1 ---------------- 19.Januar 2009
Text2 ist groesser ------------------------ 19.Januar 2009
Text33333 ----------- 19.Januar 2009


Weiss jemand welchen Befehl ich da nehmen muss, damit ich quasi Linien reserveiren kann, dass es mir nichts verschiebt?

Gruss

Lemieux
 
Moin,

da Du keine näheren Infos gegeben hast, kann ich nur raten:

formatiere die Variable, die den Text enthält, so lang, wie den längsten vorkommenden Text und fülle bei kürzerem Text mit Blank (0x020) auf!

Einen konkreten Befehl dafür wird es (vermutlich) nicht geben!

Oder poste mal Deinen Code, mit dem Du die Datei füllst (bitte mit Code-Tags - der Button mit '#'), vielleicht sieht man dann mehr .....

Gruß
Klaus
 
Hi

du könntest dir eine Funktion schreiben, die bevor die Datenausgegeben werden den längsten Text ermittelt, und die Länge in einer Variablen speichert. Anschließend werden zu den normalen --- soviele --- ausgegeben, wie die Differenz vom aktuellen Text zum längsten Beträgt.
 
Hier der Code, mit dem ich den Text in eine .txt Datei abspeichere und später wieder holen gehe. Es sollte auch in der Datei die Zeilen "schön" untereinander anzeigen.

Code:
ofstream datei("Ablage.txt", ios_base::out | ios_base::app);
                
                i = zaehlen();    
                cout << "Bitte den " << i-1 << "ten Text eingeben:";
 
                if (cin.getline (dvd[0].titel,101)) 
                {
                                    
                                     datei << "\t" << dvd[0].titel << "\t\t\t\t\t\t" << timestamp << endl;
                    
                } 
                else  


                    
                {
                                     cerr << "fehler beim einlesen" << endl;
                }


Das rot Markierte ist der Teil, wo ich dann den Text eingebe und der Abstand drin sollte.
Besten Dank für deine Bemühungen.

Gruss
 
Nord-Süd-Richtung hat es schon gesagt, einfach die Zeichenketten bis zu einer bestimmten Anzahl mit Leerzeichen auffüllen.
So in etwa:
C++:
// Achtung Die Funktion ist unsauber, bitte untenstehen Post anschauen von deepthroat :)
char * Column(char * text, int max) {
  int i = 0;
  char * a = (char *) malloc(max);	// Create new space in memory
  
  a[max] = '\0'; // Set end of string
  
  for(i = 0; text[i] != '\0'; i++, a[i-1] = text[i-1]);	// copy characters till end of string found
  
  while(i < max) {	// Set all other characters to ' ' AND overwrite the old \0, too!
    a[i] = ' ';
    i++;
  }
  
  return a;
}

Aufrufen müsstes du die Funktion so:
C++:
char text[40] = "Text";
char langerText[40] = "Long Text, really loong!";

datei << Column("Description", 39) << " " << "Timestamp" << endl;
datei << Column(text, 39) << "|" << timestamp << endl;
datei << Column(langerText, 39) << "|" << timestamp << endl << endl;


Viele Grüße
 
Zuletzt bearbeitet:
Hi.

@Bullja: Schönes Speicherleck was du dort programmiert hast. \edit: Und ein Off-By-One Fehler ist auch noch drin... Und was passiert wenn der übergebene Text größer als max ist? :-o

Warum einfach wenn's auch komplizierter geht?! ;-]
C++:
#include <iomanip>

using namespace std;

// Text linksbündig mit einer Mindestbreite von 40 Zeichen ausgeben
datei << left << setw(40) << "ein text" << '|';

// Text rechtsbündig mit einer Mindestbreite von 30 Zeichen und Füllzeichen '_'
datei << right << setw(30) << setfill('_') << "noch ein text" << endl;
usw.

Die Breite der Spalten müßtest du wie von Nord-Süd-Richtung bereits gesagt vorher berechnen wenn du sicherstellen willst, dass alles in die Spalten passt.

Gruß
 
Zuletzt bearbeitet:
Oh das sind ja viele Antworten....
muss sie mal probieren welche denn am besten oder am einfachsten funktioniert.
Aber die von deepthroat gefällt mir schon ziemlich gut...

Ich melde mich, vielen Dank eüch allen

Gruss
 
So ich hatte nun endlich Zeit die verschiedenen Möglichkeiten zu testen...
Ich muss sagen, die kürzeste ist meiner Meinung nach die Beste.

Die Idee von deepthroat hat alles drin was ich brauche, ich kann ja den Text eh nicht zu lange im "DOS Fenster" darstellen, weill es ja dann die Zeile wechselt.

Vielen Dank für eüre Hilfe. :)
 

Neue Beiträge

Zurück