Thomas: *.txt - "Formatierung"

Hallo,

ich hab' ein nur noch kleines Problem bei einer Script-Anpassung: Beim Schreiben der Felder von einem Formular werden Name und Wert -Paare in dem Script ermittelt und auch korrekt in eine *.txt (oder*.rtf ...) Datei eingefügt, die auf dem Server liegt. Gleichzeitig werden diese Paare per E-Mail verschickt. Funktioniert auch einwandfrei. Nun soll das in E-Mail und Datei optisch folgendermassen ausschauen:

Name1:(links)  Wert1 (mit Abstand zu Name)
Name2:         Wert2

Die Werte sollen also immer in einem bestimmten Abstand zum linken Rand, d.h. übereinander stehen. Ich bin also so vorgegangen:

foreach $sorted_field (@sorted_fields) {
        $holder = $Form{$sorted_field};
        if ($Config{'data_listvertical'}) {
           print Database "\n$sorted_field:\t\t$holder";

Ich habe also vor $holder zwei \t gesetzt, was die Sache auch schon fast erledigt hätte, wenn die Namen alle etwa gleichlang wären. Sind sie aber nicht, sodass sich die Werte in 2 Fällen wieder nach rechts absetzen. Der Tabstopp müsste sozusagen absolut gesetzt werden.

Kann mir jemand sagen, wie das halbwegs einfach zu lösen ist, ohne wegen dieser Kleinigkeit auf HTML umzuschwenken?

Viele Grüsse und vielen Dank für Eure Mühen im Voraus!
Thomas

  1. Kann mir jemand sagen, wie das halbwegs einfach zu lösen ist, ohne wegen dieser Kleinigkeit auf HTML umzuschwenken?

    Viele Grüsse und vielen Dank für Eure Mühen im Voraus!
    Thomas

    Hallo Thomas, das muesste mit "Formaten" zu machen sein, schau mal hier: http://www.phy.uni-bayreuth.de/~btpa25/perl/perl_format.html#einf

    Viele Gruesse, Rolf

  2. Die Werte sollen also immer in einem bestimmten Abstand zum linken Rand, d.h. übereinander stehen. Ich bin also so vorgegangen:
     print Database "\n$sorted_field:\t\t$holder";

    Brauchst Du unbedingt Tabulatoren, oder tun es Leerzeichen auch?
    Wenn letzteres, dann: sprintf() nehmen und die Strings entsprechend formatieren. Du mußt Dir halt überlegen, wie lang diese Spalten sind; wenn Du Deine Daten komplett im Speicher hast, kannst Du vor dem Ausdrucken "mal schnell" drübersuchen und Dir die Länge des längsten Wertes merken.

    1. print Database "\n$sorted_field:\t\t$holder";

      Brauchst Du unbedingt Tabulatoren, oder tun es Leerzeichen auch?

      Klar!

      Wenn letzteres, dann: sprintf() nehmen und die Strings entsprechend formatieren. Du mußt Dir halt überlegen, wie lang diese Spalten sind; wenn Du Deine Daten komplett im Speicher hast, kannst Du vor dem Ausdrucken "mal schnell" drübersuchen und Dir die Länge des längsten Wertes merken.

      Hallo Michael,

      vielen Dank für den Tip, hört sich gut an. Könntest Du das aber bitte noch etwas konkretisieren? sprintf() höre ich zum ersten Mal...(vielleicht ein kleiner Link?). Im Archiv kommt das zwar angewandt einige Male vor, aber ohne grundlegende Erklärung.
      Auch in der Referenz im Link von Rolf (Dank auch!) konnte ich dazu nichts finden. Grote ist ohnehin lokal vorhanden.

      Thomas

      1. Wenn letzteres, dann: sprintf() nehmen und die Strings entsprechend formatieren.

        vielen Dank für den Tip, hört sich gut an. Könntest Du das aber bitte noch etwas konkretisieren? sprintf() höre ich zum ersten Mal...

        sprintf (format, werteliste) ist eine Perl-Standardfunktion, die aus einer Formatliste und einer Liste von Werten eine "druckaufbereitete" Zeichenkette macht.
        Wie man in dem Format Datentypen, Feldlängen, Ausrichtungen, Füllzeichen etc. im Einzelnen angibt, mußt Du der (ausführlichen) Perl-Dokumentation entnehmen.
        (Würdest Du C können, dann könntest Du dieses Wissen direkt übernehmen.)