9
votes

Comment imprimer toutes les valeurs d'un tableau dans Perl

J'essaie d'imprimer toutes les valeurs d'un tableau à partir d'un fichier CSV. Je suis en train de le faire manuellement dans l'exemple ci-dessous. Quelqu'un peut-il me montrer le code pour le faire pour tous les champs de la matrice, quel que soit le nombre de champs? J'essaie essentiellement d'imprimer chaque champ sur une nouvelle ligne.

#!/usr/bin/perl
use strict;
use warnings;
use Text::CSV_XS;

my $file = 'test.csv';

my $csv = Text::CSV_XS->new ({
    quote_char          => '"',
    escape_char         => '@',
    binary              => 1,
    keep_meta_info      => 0,
    allow_loose_quotes  => 1,
    allow_whitespace    => 1,
});


open (CSV, "<", $file) or die $!;

while (<CSV>) {
    if ($csv->parse($_)) {
        my @columns = $csv->fields();
        print "$columns[0]\r\n";
        print "$columns[1]\r\n";
        print "$columns[2]\r\n";
        print "$columns[3]\r\n";
        print "$columns[4]\r\n";
        print "$columns[5]\r\n";
        print "$columns[6]\r\n";
        print "$columns[7]\r\n";
    }
    else {
        my $err = $csv->error_input;
        print "Failed to parse line: $err";
    }
}
close CSV;


0 commentaires

5 Réponses :


15
votes
foreach(@columns)
{
    print "$_\r\n";
}
Instead of all the columns[number].

0 commentaires

8
votes

Si vous voulez simplement imprimer les éléments séparés par des espaces: xxx

Si vous souhaitez être un peu plus fantaisie, vous pouvez utiliser joindre : xxx

Si vous avez besoin de faire quelque chose de plus, itérer sur elle: xxx


3 commentaires

Je viens d'essayer la fonction de jointure et cela fonctionne également bien. Cela résout un autre aspect du script que je travaille. Merci beaucoup!


Votre exemple rejoindre n'imprime pas une nouvelle ligne après le dernier élément.


@Mobrule: Si cela est nécessaire, alors il est trivial pour ajouter: imprimer rejoindre ("\ n", @Columns), "\ n";



1
votes

Si vous faites cela à des fins de diagnostic (par opposition à la présentation), vous pourriez envisager Data :: Dumper . En tout cas, c'est un bon outil de savoir si vous souhaitez une impression rapide de données arbitraires plus ou moins.


0 commentaires

10
votes

Pour débogage, Data :: Dump Code> est mon arme de choix. Il imprime fondamentalement des structures de données.

say foreach @columns;           # If you have Perl 5.10+
print $_,"\n" foreach @columns; # If you don't

print "@columns";               # Prints all elements, space-separated by default


0 commentaires

1
votes
{ $"="\n"; print $fh "@files"; }

0 commentaires