Formatierte Ausgabe

Status
Nicht offen für weitere Antworten.
B

Bianca.Burgardt

Gast
Hallo...

ich habe da ein kleines "Sorgenkind":

Ich mache eine Ausgabe in eine txt-Datei. Jetzt weiß ich noch, dass man in C oder C++ bei einem print sagen konnte, an welcher Stelle, also wie viele Zentimeter von Rand weg die Ausgaben beginnen sollte und ob es zentriert oder rechtsbündig ausgegeben werden sollte.
So etwas bräuchte ich jetzt in JAVA, da ich dann doch eine etwas tabellarische Ausgabe hin bekommen sollte.

Gibt es da denn einen Trick!

Vielen Dank
Bianca
 
G

Guest

Gast
Irgendjemand wollte mal sowas von mir haben.
Heute würde ich es ganz anders machen. Zu viel Garbage ;-)

Die Implementierung ist nur für kleine Tabellen zu gebrauchen.
Schreib's am besten um, damit direkt in Streams geschrieben wird.
Code:
/*----------------------------------------------------------------*
* Klasse : LineBuffer
* Aufgabe: Ein einfacher Zeilenpuffer zur formatierten Ausgabe
*          tabellarischer Daten.
* Autor  : zzzzz
* Erstellt am: 11.02.2002
*-----------------------------------------------------------------*
* Bemerkungen:
*   Dies ist eine sehr einfache Implementierung eines Zeilenpuffers
*   Man könnte zusätzlich zu den Spaltenbreiten und Ausrichtung
*   Fromatter-Objekte verwenden, die abhängig vom Typ andere
*   Ausgabe erzeugen würden.
*   z.B. DateFormatter, NumberFormatter etc.
*-----------------------------------------------------------------*
* Änderungen:
*----------------------------------------------------------------*/

/**
* Diese Klasse ist die Implementierung eines einfachen Zeilenpuffers
* zur formatierten Ausgabe tabellarischer Daten.
*
* @author zzzzzzzzzzz
* @version 0.nix
*/
public class LineBuffer {

	/** Linksbündig */
	public static final int LEFT   = 1;
	/** Rechtsbündig */
	public static final int RIGHT  = 2;
	/** Zentriert */
	public static final int CENTER = 3;

	/** Spaltenbreiten */
	int    []widths = null;
	/** Spaltenbreiten */
	int    []alignment = null;
	/** Zeilendaten */
	Object []values = null;
	/** Spaltenpuffer, so breit, wie die breiteste Spalte */
	char   []colbuf = null;
	/** Trennzeichen */
	char separator  = ' ';
	/** Zeilenpuffer */
	StringBuffer buffer = null;

	/**
	* Konstruktor. Neuen Zeilenpuffer erstellen.
	*
	* @param widths Array mit den Spaltenbreiten
	* @param alignment Spaltenausrichtung
	* @param separator Trennzeichen
	* @throws IllegalArgumentException, wenn widths=null oder leer
	*/
	public LineBuffer(int []widths, int []alignment, char separator)	{
		if(widths==null)
			throw new NullPointerException(
			  "LineBuffer.construct(...). widths[] must not be null!"
			);
		if(widths.length==0)
			throw new IllegalArgumentException(
			  "LineBuffer.construct(...). widths[] must not be empty!"
			);
		if(alignment==null)
			throw new NullPointerException(
			  "LineBuffer.construct(...). alignment[] must not be null!"
			);
		if(alignment.length==0)
			throw new IllegalArgumentException(
			  "LineBuffer.construct(...). alignment[] must not be empty!"
			);
		if(alignment.length!=widths.length)
			throw new IllegalArgumentException(
			  "LineBuffer.construct(...). alignment.length does not much widths.length!"
			);

		this.widths = widths;
		this.alignment=alignment;
		this.values = new Object[widths.length];
		this.separator = separator;
		// Längste Spalte und gesamtlänge ermitteln
		int maxLen = 0;
		int length = widths.length-1;
		for(int i=0;i<widths.length;i++) {
			maxLen = maxLen<widths[i]?widths[i]:maxLen;
			length += widths[i];
		}
		this.colbuf = new char[maxLen];
    java.util.Arrays.fill(this.colbuf, ' ');
		this.buffer = new StringBuffer(length);
	}

	/**
	* Trennzeichen setzen
	*
	* @param separator Trennzeichen
	*/
	public void setSeparator(char separator) {
		this.separator = separator;
	}

	/**
	* Alle Werte der Zeile entfernen
	*/
	public void clear() {
		java.util.Arrays.fill(values, null);
	}

	/**
	* Ganze Zeile setzen. Das Array 'newValues' muß nicht gleich
	* lang sein, wie die Anzahl der Felder in der Zeile.
	* Es werden höchstens so viele Werte kopiert, wie die Zeile
	* lang ist.
	*
	* @param newValues Array mit Objekten
	* @throws IllegalArgumentException, wenn newValues=null oder leer
	*/
	public void setValues(Object []newValues) {
		if(newValues==null)
			throw new NullPointerException(
			  "LineBuffer.setValues(...). newValues[] must not be null!"
			);
		if(newValues.length==0)
			throw new IllegalArgumentException(
			  "LineBuffer.setValues(...). newValues[] must not be empty!"
			);
		clear();
		System.arraycopy(
		  newValues, 0, values, 0,
			Math.min(values.length,newValues.length)
		);
	}

	/**
	* Werte an Position 'index' setzen.
	*
	* @param index Position des zu setzenden Objektes
	* @param value Zu setzendes Objekt
	* @throws ArrayIndexOutOfBoundsException
	*/
	public void setObject(int index, Object value) {
		if(index<0 || index>=values.length)
			throw new ArrayIndexOutOfBoundsException(
				"LineBuffer.setObject(...). index is out of range!"
			);
		values[index] = value;
	}

	/**
	* Setzt einen Int-Wert an der gegeben Position im Puffer.
	*
	* @param index Position des zu setzenden Objektes
	* @param value Zu setzender Wert
	*/
	public void setInt(int index, int value) {
		setObject(index, new Integer(value));
	}

	/**
	* Setzt einen Long-Wert an der gegeben Position im Puffer.
	*
	* @param index Position des zu setzenden Objektes
	* @param value Zu setzender Wert
	*/
	public void setLong(int index, long value) {
		setObject(index, new Long(value));
	}

	/**
	* Setzt einen Float-Wert an der gegeben Position im Puffer.
	*
	* @param index Position des zu setzenden Objektes
	* @param value Zu setzender Wert
	*/
	public void setFloat(int index, float value) {
		setObject(index, new Float(value));
	}

	/**
	* Setzt einen Double-Wert an der gegeben Position im Puffer.
	*
	* @param index Position des zu setzenden Objektes
	* @param value Zu setzender Wert
	*/
	public void setDouble(int index, double value) {
		setObject(index, new Double(value));
	}

	/**
	* Setzt einen Char-Wert an der gegeben Position im Puffer.
	*
	* @param index Position des zu setzenden Objektes
	* @param value Zu setzender Wert
	*/
	public void setChar(int index, char value) {
		setObject(index, new Character(value));
	}

	/**
	* Setzt einen Char-Wert an der gegeben Position im Puffer.
	*
	* @param index Position des zu setzenden Objektes
	* @param value Zu setzender Wert
	*/
	public void setByte(int index, byte value) {
		setObject(index, new Byte(value));
	}

	/**
	* Setzt einen Boolean-Wert an der gegeben Position im Puffer.
	*
	* @param index Position des zu setzenden Objektes
	* @param value Zu setzender Wert
	*/
	public void setBoolean(int index, boolean value) {
		setObject(index, new Boolean(value));
	}

	/**
	* Aktuelle Zeile in den gegebenen StringBuffer schreiben
	*
	* @param buf Zielpuffer
	* @return Zielpuffer
	*/
	public StringBuffer appendTo(StringBuffer buf) {
		for(int i=0;i<widths.length;i++) {
			buf.append(colbuf, 0, widths[i]);
			if(values[i]!=null) {
				String str = values[i].toString();
				int pos1, pos2;
				switch (alignment[i]) {
				case RIGHT:
					pos1 = buf.length() - str.length();
					pos2 = buf.length();
					break;
				case CENTER:
					pos1 = buf.length() - widths[i] + ((widths[i]-str.length())/2);
					pos2 = pos1 + str.length();
					break;
				case LEFT:
				default:
				  pos1 = buf.length() - widths[i];
				  pos2 = pos1 + str.length();
				}
				buf.replace(pos1, pos2, str);
			}
			buf.append(separator);
		}
		buf.delete(buf.length()-1, buf.length());
		return buf;
	}

	/**
	* Aktuellen Zeilenpuffer ausgeben
	*
	* @return Formatierte Zeile als String
	*/
	public String toString() {
		buffer.delete(0, buffer.length());
		appendTo(buffer);
		return buffer.toString();
	}

	/**
	* Einfaches Demo starten.
	*/
	public static void main(String argv[]) {
		// Ausgabepuffer erstellen
		StringBuffer buf = new StringBuffer();

		// Zeilenpuffer mit 5 Spalten je 5 Zeichen lang
		// und | als Feldtrennzeichen erstellen
		LineBuffer line = new LineBuffer(
		  new int[] {5, 5, 5, 5, 5},
			new int[] {LEFT, RIGHT, RIGHT, CENTER, RIGHT},
			'|'
		);
		// Überschriften ausgeben
		line.setValues(new Object[] {"Feld1","Feld2","Feld3","Feld4","Feld5"});
		buf.append("\n").append(line).append("\n");
		line.setValues(new Object[] {"-----","-----","-----","-----","-----"});
		line.appendTo(buf).append("\n");

		// Paar Zeilen in Ausgabepuffer ausgeben
		for(int i=1; i<=20; i++) {
			line.setInt(0, (int)(Math.random()*(((i%2)==0)?9999:999)));
			line.setInt(1, (int)(Math.random()*999));
			line.setInt(2, (int)(Math.random()*99));
			line.setInt(3, (int)(Math.random()*999));
			line.setInt(4, (int)(Math.random()*(((i%2)==0)?9999:999)));
			line.appendTo(buf).append("\n");
		}
		// Ausgabepuffer in String umwandeln und ausgeben
		System.out.print(buf.toString());

/*
	Test: Zeitmessung bei 1000000 Zeilen
	Aufruf: java LineBuffer>ausgabe.txt

		long time=System.currentTimeMillis();
		for(int i=1; i<=1000000; i++) {
			line.setInt(0, (int)(Math.random()*(((i%2)==0)?9999:999)));
			line.setInt(1, (int)(Math.random()*999));
			line.setInt(2, (int)(Math.random()*99));
			line.setInt(3, (int)(Math.random()*999));
			line.setInt(4, (int)(Math.random()*(((i%2)==0)?9999:999)));
			line.appendTo(buf).append("\n");
			if((i%100)==0) {
			  System.out.print(buf.toString());
			  buf.delete(0, buf.length());
			}
		}
		// Ausgabepuffer in String umwandeln und ausgeben
		System.out.print(buf.toString());
		System.out.print("Zeit in ms: "+(System.currentTimeMillis()-time));
*/

	}
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
D Formatierte Ausgabe vom ProcessBuilder Allgemeine Java-Themen 4
V gutes Lernmaterial bezüglich formatierte Ausgaben in Java Allgemeine Java-Themen 2
T formatierte Textausgabe in Datei Allgemeine Java-Themen 2
S E-Mail an nicht-RFC822-formatierte Adresse Allgemeine Java-Themen 4
R HTML Seiten in formatierte Textseiten konvertieren Allgemeine Java-Themen 3
kodela Gemittelte Ausgabe von Buchstaben Allgemeine Java-Themen 11
L Event Handling Ausgabe von Radioboxen und befüllen von Comboboxen Allgemeine Java-Themen 1
curranux Ausgabe als Textdatei schreiben. Allgemeine Java-Themen 2
Master3000 Komisches Zeichen als Ausgabe in der Konsole Allgemeine Java-Themen 20
R In der Ausgabe sollte anstelle des obersten Sterns ein "+" stehen nur scheitere ich bei der Implementierung Allgemeine Java-Themen 9
L Ausgabe von in Echtzeit ausgeführten Code Allgemeine Java-Themen 9
B System.out Ausgabe auf jtextarea Fehlersuche Allgemeine Java-Themen 8
J Ausgabe von Links nach Rechts ausgeben? Allgemeine Java-Themen 2
AssELAss Log4j Logging Ausgabe für jede Klasse in seperates File Allgemeine Java-Themen 2
heyluigi Random Integer Array Ausgabe nach Größe sortieren Allgemeine Java-Themen 6
B Game of life Ein und Ausgabe Configurations Datei Allgemeine Java-Themen 17
Exdroid BlueJ Wie bekomme ich die Ausgabe in eine TXT Datei? Allgemeine Java-Themen 2
M Input/Output CMD Ausgabe als ButtonEvent Allgemeine Java-Themen 5
Tausendsassa Input/Output Problem mit der gleichzeitigen Ausgabe zweier Threads Allgemeine Java-Themen 8
S 2-spaltige Ausgabe als Tabelle ausgeben Allgemeine Java-Themen 12
C Hilfe bei einer Point Ausgabe Allgemeine Java-Themen 7
B JFrame Text Ausgabe Allgemeine Java-Themen 7
D Variablen Ausgabe bzw. einlese Fehler Allgemeine Java-Themen 7
M Eclipse Keine Ausgabe mehr bei Fehlern Allgemeine Java-Themen 3
O log4j, Problem bei Ausgabe null-Wert Allgemeine Java-Themen 0
J Ausgabe nach Excel Allgemeine Java-Themen 1
balwan Unverständlichkeit einer Ausgabe Allgemeine Java-Themen 4
K Input/Output Ausgabe in Textdatei Allgemeine Java-Themen 7
B Barcode4j Ausgabe Formatieren Allgemeine Java-Themen 3
S Speichern/Laden/Hinzufügen/Löschen der Array-Wörter; unerwartete Ausgabe Allgemeine Java-Themen 6
H Scanner: Ausgabe erst nach Abbruch Allgemeine Java-Themen 8
K Methoden Ausgabe erfolgt nicht Allgemeine Java-Themen 6
T Ausgabe falsch! Allgemeine Java-Themen 5
W Input/Output Ausgabe eines Statements Allgemeine Java-Themen 5
P Falsche Ausgabe Allgemeine Java-Themen 5
nutellastulle Zugriff, Übergabe, Bearbeitung und Ausgabe von Jlist Allgemeine Java-Themen 6
D Ausgabe von C# Konsolenanwendung lesen Allgemeine Java-Themen 5
O Input/Output CMD-Ausgabe abfangen und in Datei speichern Allgemeine Java-Themen 8
P Pdf ausgabe Allgemeine Java-Themen 3
schlingel Process - Ausgabe leer Allgemeine Java-Themen 5
C Ausgabe unklar Allgemeine Java-Themen 2
J Applet Ausgabe beim Speichern ausblenden Allgemeine Java-Themen 4
Rudolf Java Ausgabe einer Texttabelle im Prompt Allgemeine Java-Themen 4
P Ausgabe der berechneten Fakultaet Allgemeine Java-Themen 12
M Ausgabe in Datei zum Ausdruck Allgemeine Java-Themen 2
E formartierte Ausgabe zur Laufzeit Allgemeine Java-Themen 2
D Bildschirm Flackert bei Ausgabe Allgemeine Java-Themen 4
K Windows Fehlerkanal -> Ausgabe in Datei Allgemeine Java-Themen 6
H Ausgabe von zwei Textfeldern Allgemeine Java-Themen 3
R log4j - Ausgabe der Logs Allgemeine Java-Themen 3
L in zufälligen Sekunden Ausgabe machen Allgemeine Java-Themen 2
W Ausgabe beschleunigen? Allgemeine Java-Themen 3
O Backslashes werden in der Ausgabe nicht übernommen Allgemeine Java-Themen 5
X Ausgabe auf JEditorPane Allgemeine Java-Themen 5
B Ausgabe auf der Konsole bei Nebenläufigkeit, Threads und Synchronisation Allgemeine Java-Themen 8
A Ausgabe in OpenOffice Calc oder pdf Allgemeine Java-Themen 3
T Ausgabe in txt.Datei speichern Allgemeine Java-Themen 23
S Boolean Ausgabe JasperReports Allgemeine Java-Themen 2
M Consolen Ausgabe Allgemeine Java-Themen 3
G Ausgabe mit tag Allgemeine Java-Themen 3
W Ausgabe von Fließkommazahlen formatieren Allgemeine Java-Themen 2
D Ausgabe HTML-Seite Allgemeine Java-Themen 5
H Externe Prozesse und Inputstreams - ausgabe in JTextArea Allgemeine Java-Themen 3
G Ausgabe in eine txt Datei schreiben? Allgemeine Java-Themen 7
T Wieso erfolgt keine Ausgabe. /Excel Allgemeine Java-Themen 19
J Ausgabe der Quelltext Zeilennummer? Allgemeine Java-Themen 12
B serlvet system.out ausgabe Allgemeine Java-Themen 4
B Ausgabe auf stdout "löschen" und dafür neue Ausgab Allgemeine Java-Themen 10
X e.printStackTrace Ausgabe in Datei umleiten? Allgemeine Java-Themen 14
B Ausgabe mit print wird verzögert Allgemeine Java-Themen 9
D Dateien und ordner ausgabe Allgemeine Java-Themen 5
M Rekursive Ausgabe einer linkedList Allgemeine Java-Themen 8
M Ausgabe in Console formatieren`? Allgemeine Java-Themen 12
D Seltsame Ausgabe beim zusammenführen zweier Dateien Allgemeine Java-Themen 14
I Composite Pattern für Ausgabe von Ausdruck Allgemeine Java-Themen 3
H falsche ausgabe Allgemeine Java-Themen 15
S Datei Ausgabe Allgemeine Java-Themen 4
T Fehlersuche bzw. woher kommt diese ausgabe? Allgemeine Java-Themen 2
S Endlos-Schleife bei Ausgabe von ArrayList Allgemeine Java-Themen 6
L Ausgabe auf GUI verzögert Allgemeine Java-Themen 2
D Die Ausgabe von Tidy in eine Datei umleiten Allgemeine Java-Themen 3
R Vorzeichen bei der Ausgabe Allgemeine Java-Themen 7
G Problem mit Ausgabe-Kanälen Allgemeine Java-Themen 2
T Ausgabe bei Struktogrammen Allgemeine Java-Themen 2
G JTextField: Feld für Ausgabe von Meldungen Allgemeine Java-Themen 14
G Einlesen der Ausgabe eines Shellskripts mit Java Allgemeine Java-Themen 2
B Fehler bei Ausgabe in Datei Allgemeine Java-Themen 11
G Ausgabe Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben