Ankündigung

Einklappen
Keine Ankündigung bisher.

Textausgabe formatieren

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Textausgabe formatieren

    Hallo zusammen

    Ich habe diverse Variablen, die ich als Textmail (kein HTML) verschicken möchte. Grundsätzlich klappt das auch, nur sieht die Ausgabe alles andere als schön aus.

    Es sollte eine spaltenweise Ausgabe erfolgen, also Textkurz, Textmittel und Textganzganzlang sollen untereinander stehen (siehe untenstehenden Code). Auf Grund der unterschiedlichen Länge der Variablen in der vorhergehenden Spalte ist dem aber nicht so.

    Ich hab nun printf als Befehl gefunden, komme aber mit der Syntax nicht so ganz klar. Ich habe nichts gefunden, um in Strings Zeichen auffüllen zu lassen, oder bin ich völlig blind?

    Oder gehe ich es falsch an und muss die Länge der einzelnen Strings bestimmen und dann entsprechend viele Leerzeichen einfügen? Nur wenn ja, dann wie und wo?

    Code:
    <?php
    $a[1] = "16.12.2005";
    $a[2] = "16. - 19.12.2006";
    $a[3] = "26.12.2005";
    $b[1] = "Textkurz";
    $b[2] = "Textmittel";
    $b[3] = "Textgangganzlang";
    $start= 1;
    $ende = 4;
    do {
       printf("%s %s
    \n", $a[$start], $b[$start]);
       $start ++;
    }
    while ($start < $ende);
    ?>
    Vielen Dank für die Hilfe

    Andy

  • #2
    Zum Auffüllen gibt es str_pad(). Zusammen mit wordwrap(), strlen() und substr() (für die ganz langen Wörter, die du abschneiden musst) müsste das gehen. Falls du mit utf-8 arbeitest, musst du da ev. ein wenig Hand anlegen und die Zeilen "selbst" zusammenbasteln.

    http://php.net/manual/en/function.str-pad.php
    http://php.net/manual/en/function.wordwrap.php
    http://php.net/manual/en/function.strlen.php
    http://php.net/manual/en/function.substr.php

    Basti

    Kommentar


    • #3
      Da sprintf(), bzw. printf() all die von Basti genannten Funktionen mit abdeckt, ist das durchaus die richtige Funktion.
      Zuerst musst du aber die Länge des längsten Elements in $a herausfinden und dann diese Länge einsetzen:
      PHP-Code:
      ...
      $max_a 0;
      for(
      $i $start;$i $ende;$i ++){
          
      $max_a max(strlen($a[$i]), $max_a);
      }
      for(
      $i $start;$i $ende;$i ++){
         
      printf("%-${max_a}.${max_a}s %s
      \n"
      $a[$i], $b[$i]);

      Das Resultat siehst du natürlich nicht im Browser, da dieser mehrere Leerzeichen zu einem zusammenfasst. Schau dir
      den Quelltext an. Hier eine kurze Erklärung der Format-Parameter:
      %-${max_a}.${max_a}s
      | \______/ \_______/|
      1 2 3 4
      • 1 Ausgabe linksbündig (default rechtsbündig)
        2 Minimale Länge, die ausgegeben wird, wird mit Leerzeichen aufgefüllt. Du kannst auch direkt nach dem %-Zeichen
        ein anderes Füllzeichen angeben (mit 'zeichen, z.B. '*)
        3 Maximale Länge, die ausgegeben wird. Achtung, diese Angabe wird in der deutschsprachigen Dokumentation
        unterschlagen. Fehlt diese Angabe, so wird auf jeden Fall der ganze String ausgegeben, auch wenn er länger
        als die vorher genannte Grösse ist
        4 Der Text wird als String behandelt. Andere Typen haben u.U auch eine andere Formatierung
      Die Angaben aus $b brauchen nicht speziell formatiert zu werden, da ja ein Zeilenumbruch folgt.
      Gruss
      L

      Kommentar


      • #4
        Hi.

        Ich wusste garnicht, was printf() so alles kann. Dennoch geht es hier doch, wenn ichs recht verstehe, darum, mehrzeilige Texte in Spalten zu setzen, oder? Bei vielleicht 70 Zeichen Mail-Breite bleiben pro Spalte ja nicht mehr so viele Zeichen übrig, um da noch von Text sprechen zu können.

        Ich hab aber auch noch nicht kapiert, ob die Daten ($a) jeweils einem Text ($b) zugeordnet sind, oder ob jede Spalte für sich unabhängig voneinander aufgebaut werden soll.

        Basti

        Kommentar

        Lädt...
        X