8
votes

Meilleure façon d'avoir une sortie formatée avec perl

Je veux sortir des chaînes en huit colonnes, mais je veux garder l'espacement identique. Je ne veux pas le faire dans HTML, mais je ne sais pas comment le faire normalement. Exemple:

Something    Something     Something     Something     Something
Else         Else          Else          Else          Else
Another      Another       Another       Another       Another


0 commentaires

4 Réponses :


18
votes

printf xxx

Changer "11" dans le gabarit à une valeur dont vous avez besoin.


4 commentaires

C'est parfait merci, quand j'ai googlé, j'ai trouvé toutes ces méthodes compliquées.


Comme l'éludé, lorsque les choses semblent être compliquées, cela signifie généralement que vous avez plus de contrôle / options. Printf est très puissant, mais envisagez format si vous allez imprimer des rapports formatés. Format Donne la possibilité d'ajouter des en-têtes / des pieds de page, ce qui facilite la modification des fichiers.


Je n'ai pas besoin d'obtenir technique avec des en-têtes ou quoi que ce soit. Il suffit d'avoir des choses émises dans une belle vue sur une feuille


Ensuite, printf est probablement ce qui est nécessaire. Si vos données sont dans un tableau, consultez ma réponse sur la manière de transmettre les valeurs de la matrice en tant que paramètres - il suffit de passer la liste complète de la matrice, plutôt que de spécifier chaque noeud indépendamment.



11
votes

Vous pouvez utiliser Perl's format code> . C'est probablement la méthode "compliquée" que vous ne comprenez pas, probablement parce que cela vous donne de nombreuses options (à gauche | Centre | Justification droite / rembourrage, cadavre de 0, etc.).

EXEMPLE DE PERLDOC : P>

#!/usr/bin/perl -w    

use strict; 

   sub main{    
      my @arr = (['something1','something2','something3','something4','something5','something6','something7','something8']
                ,['else1'     ,'else2'     ,'else3'     ,'else4'     ,'else5'     ,'else6'     ,'else7'     ,'else8'     ]
                ,['another1'  ,'another2'  ,'another3'  ,'another4'  ,'another5'  ,'another6'  ,'another7'  ,'another8'  ]
                );
      
      for my $row (@arr) {
         format STDOUT =
@<<<<<<<<<<<<  @<<<<<<<<<<<<  @<<<<<<<<<<<<  @<<<<<<<<<<<<  @<<<<<<<<<<<<  @<<<<<<<<<<<<  @<<<<<<<<<<<<  @<<<<<<<<<<<<  
         @$row
.
         write;
      }

   }    
       
   main();   


0 commentaires

4
votes

Je regarderais le formatage, mais je le ferais en utilisant Perl 6's (Now Raku) Form.pm, que vous pouvez obtenir comme Perl6: : Formulaire pour Perl 5.

La raison en est que le format intégré a un certain nombre d'inconvénients, tels que le format statiquement défini de manière statique au moment de la compilation (c.-à-d. La construire de manière dynamique peut être douloureuse et nécessite généralement une liste de chaînes), ainsi que toute une liste complète de autres lacunes, telles que l'absence de types de champs utiles (et vous ne pouvez pas les étendre à Perl 5).


1 commentaires

La quantité de lignes changera quotidiennement mais le numéro de colonne restera toujours le même. Pas besoin de construire de manière dynamique ou d'utiliser Eval.



4
votes

Voici un exemple en direct de Perl6 :: Formulaire :

1       2       3       4       5       6       7       8
9       10      11      12      13      14      15      16
17      18      19      20      21      22      23      24


0 commentaires