電子書籍の厳選無料作品が豊富!

次のようなファイルがある場合、%hash1と%hash2を同じ配列として扱いたいと思っています。
例えば、hash[0]{A}とアクセスすれば'01'、hash[1]{B}とアクセスすれば'002'となるようにしたいと思っています。ご教授ください。

--------------------
A B C
01 001 0001
02 002 0002

%hash1 = {'A'=>'01', 'B'=>'001', 'C'=>'0001'};
%hash2 = {'A'=>'02', 'B'=>'002', 'C'=>'0002'};

A 回答 (3件)

#1 です。

答えです。(なんとなく。)

#/usr/local/bin/perl

@data = ( {'A'=>'01', 'B'=>'001', 'C'=>'0001'},
{'A'=>'02', 'B'=>'002', 'C'=>'0002'});

foreach $j (sort keys %{$data[0]}) {
print $j. ' ';
}
print "\n", '-'x 10, "\n";
for $i (0 .. scalar(@data)-1) {
foreach $j (sort keys %{$data[$i]}) {
print $data[$i]{$j}. ' ';
}
print "\n";
}

こんな感じで良いかな。
    • good
    • 0

ファイルの1行目が項目名で、各項目は空白(タブ)で区切られている、という前提で。



sub read_data {
  my (@key, @data);
  local $_;
  open FH, shift or die $!;

  chomp($_ = <FH>);   # キー取り出し
  @key = split /\s+/;

  while (<FH>) {      # データ取り出し
    chomp;
    my %d; @d{@key} = split /\s+/;
    push @data, \%d;
  }

  close FH;
  return @data;
}

という関数を作成すると、

@hash = read_data("ファイル名");
print $hash[0]{A};   # 01 と表示される。
print $hash[1]{B};   # 002 と表示される。

のように使えます。
※スクリプトの字下げに全角スペースを使っているので、コピーする場合はタブなどに置き換えてご利用ください。
    • good
    • 0

参考になるソースを示しますので、読んで見てください。




# ハッシュの配列を静的に作る
%c = ( A => [ qw(aa ab ac ad ae) ],
B => [ qw(ba bb bc bd be) ],
C => [ qw(ca cb cc cd ce) ] );
# 静的に作ったハッシュの配列を取り出してみる
foreach $i (sort keys %c) {
for $j (0 .. scalar(@{$c{$i}})-1) {
print '$c{'. $i. '}['. $j. ']='. $c{$i}[$j]. ' ';
}
print "\n";
}
print "\n";


# ハッシュの配列を動的に作る
%g = ();
open(IN, 'in.data') || die "open error";
while(<IN>) {
chop;
my(@w);
@w = split(/ /);
$g{uc(substr($_, 0, 1))} = \@w;
}
close(IN);
# 動的に作ったハッシュの配列を取り出してみる
foreach $i (sort keys %g) {
for $j (0 .. scalar(@{$g{$i}})-1) {
print '$g{'. $i. '}['. $j. ']='. $g{$i}[$j]. ' ';
}
print "\n";
}
print "\n";


動的に作る。の方は、

aa ab ac ad ae
ba bb bc bd be
ca cb cd ce cf

こんなデータを読み込むようになっています。どちらの場合でも、

$g{A}[0]=aa $g{A}[1]=ab $g{A}[2]=ac $g{A}[3]=ad $g{A}[4]=ae
$g{B}[0]=ba $g{B}[1]=bb $g{B}[2]=bc $g{B}[3]=bd $g{B}[4]=be
$g{C}[0]=ca $g{C}[1]=cb $g{C}[2]=cd $g{C}[3]=ce $g{C}[4]=cf

と言う結果が返ってきます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!