String rechtsbündig?

Wu-mc

Mitglied
Hallo Forum,

geht es und wenn ja wie, das ich einen String rechtsbündig mache?

Es soll folgendes an einen Drucker ausgegeben werden:

500 x 6 3000
20 x 8 160

nur natürlich alles schön untereinander. Nächstes Problem ist das der Drucker "\t" nicht erkennt. Gibt es da vielleicht noch andere Zeichen oder Escape Sequenzen für Drucker?

mfg

Niko Will

Edit: Schade die leerzeichen werden nicht wiedergegeben, ich hoffe man versteht trotzdem was ich meine, also das die 1 von 160 nicht unter der 3 steht sonder unter der 0.
 
Zuletzt bearbeitet:
Nutze doch die printf-Funktion:
Code:
printf ("%5d + %5d = %5d\n", a, b, c);
Das Beispiel gewährleistet, dass jede Zahl mit mindestens 5 Stellen ausgegeben wird.
Ist sie länger, so werden mehr als 5 Stellen ausgegeben.
Natürlich musst du dann einen Zeichensatz verwenden, der die gleiche Breite für jeden Buchstaben hat, so wie "Courier New".

OS
 
Hallo Onkel Schuppig,

vielen Dank für deine Antwort, aber ich bin mir nicht sicher ob das das richtige für mich ist. Es sollen Geldbeträge angezeigt werden, mit genau zwei Stellen hinter dem Komma und das dann rechts ausgerichtet, so das jeweils die einer, zehner, hunderter und tausender untereinander stehen. Wenn eine Zahl aber keine tausender hat soll auch nicht irgendwie mit Nullen aufgefüllt werden, das ist keine schöne Lösung.

Das nächste ist das printf für STDOUT, also für Bildschirmausgabe da ist (bitte korregiert micht falls das falsch sein sollte) und deshalb nicht für meine Druckerausgabe geeignet.

Grüße

Niko Will
 
Hmm, probiere doch mal folgenden Code-Schnipsel aus:
Code:
#include <stdio.h>

void PrintProdukt(FILE* p_file, double faktor1, double faktor2) {
   char puffer[80];

   produkt = faktor1 * faktor2;
   sprintf (puffer, "%.2lf x %.2lf = %.2.lf\n", faktor1, faktor2, produkt);
   fprintf (p_file, "%80s", puffer);
}

int main(int argc, char** argv) {
   // Datei im Modus "Anhängen" öffnen
   FILE* p_file = fopen ("ausgabe.txt", "a");
   if (p_file) {
      PrintProdukt (500, 6);
      PrintProdukt (2,5);
      fclose (p_file);
   }

   return 0;
}
Nach dem programmlauf erhälst du eine Datei "ausgabe.txt" mit folgendem Inhalt:
Code:
500.00 x 6.00 = 3000.00
    2.00 x 5.00 = 10.00
Kommst du damit weiter?

Grüße OS
 
Zuletzt bearbeitet:
Wie gibst Du die Sachen denn auf dem Drucker aus? Schickst du einfach die Daten an LPR1 oder nutzt Du die Windows - Druckfunktionen?
 
@ Onkel Schuppig

ist vielleicht ein Ansatz, aber vom groben überfliegen würde ich sagen ist das auch nicht das was ich suche, da dann die anderen Sachen nicht untereinander stehen. Prinzipiell soll es eigentlich sowas wie ne Tabelle werden nur ohne Rahmen und die letzte Spalte rechts orientiert.

@ jokey2

Das ganze ist auf Windows CE und der Drucker ist so ein spezieller, mit API. Die Ausgabe geht mit WriteFile ( ... ). Bin mir jetzt nicht sicher ob das API spezifisch oder Windows Sache ist.
 
Hi.

Also standardmäßig erfolgt die Ausgabe rechtsbündig an der gesetzten Feldgrenze.

Der Code von Onkel Schuppig hat nun die gesamte Zeile rechtsbündig in einem 80 Zeichen großen Feld ausgegeben.

Probier doch mal diese Funktion:
Code:
print_row (int x, float y, char* str, float z) {
  printf ("%-6i %-8.2f %-30s %10.2f\n", x, y, str, z);
}

  print_row (3, 3.456, "obst und gemuese", 5.59494);
  print_row (3, 1040.494, "fleisch und fisch", 5949.9403);

Diese Funktion gibt einen int linksbündig ausgerichtet in einem 6 Zeichen Feld aus, dann kommt ein float auch linksbündig in einem 8 Zeichen großen Feld mit 2 Nachkommastellen, dann ein String - linksbündig, 30 Zeichen groß - und zum Schluß ein float bei 10 Zeichen Feldbreite und 2 Nachkommastellen rechts ausgerichtet.

Die Ausgabe sieht dann so aus:
Code:
3      3.46     obst und gemuese                     5.59
3      1040.49  fleisch und fisch                 5949.94

Nun mußt du nur noch die Typen und Feldbreiten anpassen so wie du es haben willst. Und :rtfm: printf

Gruß
 
Du schreibst also mit WriteFile auf den Drucker, dessen Hanbdle Du vorher mit CreateFile erzeugt hast.
Da ist es mit der Formatierung wahrscheinlich etwas schwierig. Am einfachsten könnte es noch sein, wenn Du einen sogenannten Fixed Font verwendest, also einen font, bei dem alle Buchstaben die gleiche Breite haben (z.B. Courier oder CourierNew). Mit TrueType-Fonts ist es schwieriger, da Du irgendwie die Länge des Strings auf der Zeichenfläche ermitteln müßtest.
Evtl. kannst Du ja mit dem Senden von Steuerzeichen den 'Cursor' des Printers auf eine bestimmte Stelle setzen.
Allgemein ist das Drucken eine ziemlich heikle Angelegenheit. Am einfachsten geht es noch, wenn Du die Druckfunktionen von CDocument nutzen kannst. Da kannst Du dann nämlich auf einem DeviceContext zeichnen.
Wenn es sich da allerdings um einen Kassendrucker mit nur einem (fixed) Font handelt, dann ->siehe deepthroat ;-)
 
Zuletzt bearbeitet:
Hallo alle zusammen,

das von deepthroat sieht ganz gut aus, werde ich nachher gleich mal ausprobieren.
Ja handelt sich um ein Kassenbondrucker, also fixed type Schriftarten.
Werde das jetzt mal testen und melde mich dann wieder.

Vielen Dank schonmal für eure Antworten

Grüße, Niko
 
Zurück