0

「Perl入門」の本やWeb上のさまざまな提案などを理解していれば、ハッシュテーブルの設定方法を理解しようと懸命に努力しています.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;etc) をプログラムに無視させるにはどうすればよいですか?

2) 必要なアイテムを適切なハッシュ テーブルに配置するにはどうすればよいですか? プログラムがセミコロンを含む行全体を読み取るという事実は、問題の 1 つですか?

これはクラスの課題であるため、これ以上は含めていません。つまり、残りは自分で考えなければなりません。上記の個々の要素を読み取ることができた後、私のプログラムは、「女性」または「男性」の数、「ロマンス」などを読み取った数を出力するだけです。

最後に、質問が明確でない場合、または間違ったツリーを吠えている場合は、ためらわずに正しい方向に向けてください。

4

2 に答える 2

0

そのタスクを完了するために役立つモジュールがたくさんあります。たとえば、Text::CSV::Slurpは CSV をハッシュの配列に変換します。

于 2013-03-26T10:55:58.900 に答える
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();
}

そのモジュールの背後にある理由を説明している著者による投稿も参照してください。

于 2013-03-26T12:14:37.890 に答える