J'ai un ensemble de données délimité par des tabulations avec les chaînes d'agents utilisateur entre guillemets. J'ai besoin d'analyser chacune de ces colonnes et basé sur la réponse de mon other post j'ai utilisé le module Text :: CSV.Analyse du fichier délimité par des tabulations avec des guillemets doubles en Perl
94410634 0 GET "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6.6; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; AskTB5.5)" 1
Le code est un code simple.
#!/usr/bin/perl
use strict;
use warnings;
use Text::CSV;
my $csv = Text::CSV->new(sep_char => "\t");
while (<>) {
if ($csv->parse($_)) {
my @columns = $csv->fields();
print "@columns\n";
} else {
my $err = $csv->error_input;
print "Failed to parse line: $err";
}
}
mais je reçois l'erreur Failed to parse line:
quand je l'essayer sur cet ensemble de données. Qu'est-ce que je fais mal? J'ai besoin d'extraire la 4ème colonne contenant les chaînes d'agent utilisateur pour un traitement ultérieur.
êtes-vous sûr que ce sont des onglets, pas d'espaces? En utilisant * '' * comme sep_char comme ceci * mon $ csv = Text :: CSV-> nouveau ({sep_char => ''}); * (notez aussi les {} s autour des options) fonctionne (bien qu'il fasse l'useragent champ le 8ème champ). – MkV
@MKV - Je suis sûr que le formatage SO supprimé les onglets - dans ma réponse, j'ai explicitement re-construit la chaîne à séparer par des tabulations pour cette raison – DVK
@DVK Spaces expliquerait cependant l'erreur OP. – marcog