bjoern: Tabulatoren \t Wie einsetzen?

Guten Abend!

Ich lasse meinen Server eine Email verschicken, in der eine Textbasierte Tabelle angezeigt werden soll. Wie mache ich dies? Höchstwahrscheinlich Tabulatoren \t ???

Soll so aähnlich aussehen:

-----------------------------------------------------------------------
|Anzahl | Artikel   | Preis/Stück   | Gesamtpreis |
 -----------------------------------------------------------------------
| 2x | Bananensaft   | 2,00EUR |  4,00 EUR |
| 5x | Erdbeersaft   | 1,00EUR |  5,00 EUR |
 -----------------------------------------------------------------------
|      Zwischensumme: |  9,00 EUR |
|        zzgl. Porto: |  1,00 EUR |
 -----------------------------------------------------------------------
|      Summe*: | 19,00 EUR |
 -----------------------------------------------------------------------
 *Nach $19 Abs. 1 UstGb von d. Umsatzsteuerfrei.

Schon hier sieht man, dass sich alles verschiebt.
Im meinem MailProgram (Outlook) sieht man garnix mehr von den tabulatoren. Hat einfach alles direkt hintereinander Weg, ohne Tabulatoren angezeigt. Was mache ich falsch? wie kriege ich eine vernünftige Tabelle zustande?

Gruß Björn.

  1. Hallo,

    x mal die leertaste?

    gruss

    --
    no strict;
    no warnings;
    79.78 cups of Coffee (Brewed) + Me = Death
    Reklame ist die Kunst, auf den Kopf zu zielen und die Brieftasche zu treffen.
    1. x mal die leertaste?

      Wäre ja zu schön :)

      dass Dumme ist nur, das jeder Artikelname nicht gleich lang ist, ich nicht weiß wie oft das blöde Skript die Leertaste darein zimmern muss.

      Man könnte höchstns alle Artikelnamen durchgehen und den längsten suchen, dann "Längster Artikelname" - "Aktueller Artikelname" und dann den Rest mit Leerzeichen füllen.

      Problem hierbei: da nicht jedes Zeichen gleich viel Platz weg nimmt und jeder artikelname aus anderen Zeichen besteht, wird die Geschichte mit den Leerzeichen außerst ungenau und die ganze Tabelle windschief.

      Außerdem muss dass ja irgendwie mit den Tabulatren gehen, Hoffe ich..

      Denn wozu sind die sonst da??

      Gruß
      Björn

      1. x mal die leertaste?
        Wäre ja zu schön :)
        dass Dumme ist nur, das jeder Artikelname nicht gleich lang ist, ich nicht weiß wie oft das blöde Skript die Leertaste darein zimmern muss.

        Da sollte sprintf helfen.

        Siechfred

        1. Da sollte sprintf helfen.

          Hmmm, könnte was sein. Nur finde ich ist dieses sprintf da so dämlich erklärt, dass ichs überhaupt nicht schnalle wie dass gehen soll.. Die Beispiele sind dort auch nicht grad die Besten. Wird nochnichtmal beispielhabft ausgegeben was bei dem sprintf krams dann raus kommen würde wenn man bestimmte werte in die variablen einsetzt.. Vielleicht bin aich aber auch einfach nur schon viel zu lange am rechner..

          Kann mir mal jemand kurz erklären wie dass funktionieren soll?

          Danke, Björn.

          1. <?php  
              
            $jahr = 99;  
            $monat = 5;  
            $tag = 1;  
              
            $isodatum = sprintf ("%04d-%02d-%02d", $jahr, $monat, $tag);  
            echo("$isodatum");  
              
            ?>
            

            gibt also "0099-05-01" aus. Ok, hab ich kapiert.

            wieso füllt $formatted = sprintf("%01.2f", $money); nach die Variable money 123.4 mit einer Null nach rechts auf?

            Und dann noch eine Andere Frage:

            Ich muss ja auf jeden Fall wissen, auf welche Anzahl von Ziffern ich die Variable auffüllen muss. Wenn ich in meiner Datenbank  unter dem Feld Artikel Unterschiedliche Artikel mit unterschiedlicher Länge habe, wie bekomme ich am besten herraus welcher Artikelname am längsten ist?

            Gruß Björn

            1. Moin!

              wieso füllt $formatted = sprintf("%01.2f", $money); nach die Variable money 123.4 mit einer Null nach rechts auf?

              Weil du als "Formatvorlage" da stehen hast:
              "f" = Float
              "01" = eine Stelle vorm Komma, falls weniger, dann mit Nullen auffüllen
              ".2" = zwei Nachkommastellen (die werden sowieso mit Nullen aufgefüllt)

              Ich muss ja auf jeden Fall wissen, auf welche Anzahl von Ziffern ich die Variable auffüllen muss. Wenn ich in meiner Datenbank  unter dem Feld Artikel Unterschiedliche Artikel mit unterschiedlicher Länge habe, wie bekomme ich am besten herraus welcher Artikelname am längsten ist?

              Du kannst zwei Methoden anwenden. Entweder prüfst du vor dem Zusammensetzen deiner Tabelle die Stringlänge jedes Artikelnamens und nimmst den längsten.

              Oder du setzt einfach eine maximale Länge fest und schneidest längere Texte dann einfach ab. Denn deine Tabelle kann ja auch nicht unbegrenzt breit werden, das würde das Mailprogramm wahrscheinlich auch umbrechen und somit optisch zerstören.

              Die Alternative wäre, zusätzlich für fähige Mailprogramme einen HTML-Teil zu erstellen und <table> zu verwenden.

              - Sven Rautenberg

              --
              My sssignature, my preciousssss!
  2. Tag bjoern.

    Ich lasse meinen Server eine Email verschicken, in der eine Textbasierte Tabelle angezeigt werden soll. Wie mache ich dies? Höchstwahrscheinlich Tabulatoren \t ???

    Schau dir mal den Nachrichtenquelltext diverser Bestellbestätigungen an, da wird die Tabelle immer über Leerzeichen simuliert, da ein Tabulator in Abhängigkeit vom System eine unterschiedliche Breite haben kann. Am elegantesten wäre vielleicht eine gemischte Mail: einen Plaintext-Teil für die Texttabelle und einen HTML-Teil für eine HTML-Tabelle.

    Siechfred

    1. Schau dir mal den Nachrichtenquelltext diverser Bestellbestätigungen an, da wird die Tabelle immer über Leerzeichen simuliert, da ein Tabulator in Abhängigkeit vom System eine unterschiedliche Breite haben kann. Am elegantesten wäre vielleicht eine gemischte Mail: einen Plaintext-Teil für die Texttabelle und einen HTML-Teil für eine HTML-Tabelle.

      Also muss ich es doch so machen, dass ich alles mit Leerzeichen mache? is ja zum kot**n!

      Hmm, da wäre es eine Überlegung wert, ob ich überhaupt eine solche Tabelle da rein baue..

      Trotzdem Danke..