通过哈希表读取和更改.txt文件

时间:2013-03-26 10:40:33

标签: perl

我正在努力了解如何设置Hash表 - 这是我想象的我需要的,如果我理解'Perl简介'一书,以及网上的各种建议等等我必须阅读.text / csv文件看起来像这样 - 分号和所有:

PRENOM;NOM;SEXE;AGE;PAYS;TITRE;GENRE
Cédrick;Matisse;m;25-45;Belgique;La peinture de l'amour;romance
Anne-Pascale;Ork;f;15-25;Belgique;La dernière halte des elfes;fantastique
Anne-Pascale;Ork;f;15-25;Belgique;La tentation du gobelin;fantastique

....这只是提取。

我想1)我应该将所有这些放入哈希表中,以便阅读所要求的个人信息:性别,年龄,书籍类型。但是,我似乎无法理解如何将其加载到哈希表中 - 即使在阅读了各种帖子和''Perl书之后。我一直在使用的代码如下:

use strict;
use warnings;

my $fichier = $ARGV[0]; # fichier source

open( DONNEES, '<', $fichier )
or die("Impossible d'ouvrir le fichier $fichier\n");

my %sexe = ( 'f' => 0, 'm' => 0);

my %age = ( '0-15' => 0, '15-25' => 0, '25-45' => 0, '45-65' => 0, '65-' => 0 );

my %genre = ( 'art' => 0, 'divers' => 0, 'education' => 0,
         'essai' => 0, 'fantastique' => 0, 'informatique' => 0,
         'pratique' => 0, 'roman' => 0, 'romance' =>0,
         'sci-fi' => 0);

my $sexe = 0;
my $sexem = 0;

print "$fichier\n";

while ( my $ligne = <DONNEES> ) {

chomp($ligne);

# decoupage de chaque ligne du fichier en 6 colonnes
my ($prenom, $nom, $sexe, $age, $pays, $livre, $genre ) = split( /\t/, $ligne );

等......

当处理已放置空格的文档时,使用数组似乎很容易,将它们放在一列中并读取它们。但是,这里有更多的信息。 问题是

1)如何让我的程序忽略我的文档的第一行(PRENOM; NOM;等)?

2)然后我如何将所需的项目空间放置到正确的哈希表中?事实是程序用分号读取整行的问题之一吗?

我没有再包括在内,因为这是一个课程的作业,这意味着我必须自己完成剩下的工作。在阅读了上面提到的各个元素之后,我的程序将只需打印出多少“女性”或“男性”,多少阅读“浪漫”等等。

最后,如果问题不明确或/和我正在咆哮错误的树,请毫不犹豫地指出我正确的方向。

2 个答案:

答案 0 :(得分:0)

有很多模块可以帮助您完成任务。例如,Text::CSV::Slurp会将CSV转换为哈希数组。

答案 1 :(得分:0)

我相信Tie::Array::CSV非常接近您的需求:

#!/usr/bin/env perl

use strict;
use warnings;

use Tie::Array::CSV;

sub get_column {
  my $last = int rand 10;
  return map { rand 100 } (0..$last);
}

tie my @out, 'Tie::Array::CSV', 'outfile.csv';

for my $column (0..9) {
  my $row = 0;
  $out[$row++][$column] = $_ for get_column();
}

另见post by the author解释该模块背后的原因。