![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
次のようなファイルがある場合、%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'};
No.2ベストアンサー
- 回答日時:
#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";
}
こんな感じで良いかな。
No.3
- 回答日時:
ファイルの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 と表示される。
のように使えます。
※スクリプトの字下げに全角スペースを使っているので、コピーする場合はタブなどに置き換えてご利用ください。
No.1
- 回答日時:
参考になるソースを示しますので、読んで見てください。
# ハッシュの配列を静的に作る
%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
と言う結果が返ってきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(行政) 兵庫県立図書館はなぜ専門書が少ないのか? 1 2022/07/23 12:32
- Perl perlをバージョンアップしたら、今まで正常に動いていたプログラムが、エラーになってしまった 3 2022/10/05 15:44
- UNIX・Linux postfix smtpサーバーリレーがTLSハンドシェーク失敗 1 2022/08/15 15:45
- オープンソース stable diffusionのインストールがうまくいきません。 1 2023/06/20 13:09
- C言語・C++・C# numpyスライス機能を使った数値計算 2 2023/05/08 16:01
- その他(パソコン・スマホ・電化製品) windows 2000のスロットにGPIBカードを装着できますか。 1 2022/09/10 21:47
- フリーソフト イーファンビューでwebpファイルが開けません 1 2022/07/12 07:07
- その他(プログラミング・Web制作) laravel 本番環境でメールが送れません。 1 2023/02/17 17:57
- 英語 提示した名言の"be to be able to do"の意味等について 4 2023/05/17 10:02
- Excel(エクセル) エクセルでのアクセス履歴をとりたいです 1 2022/06/13 17:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストファイルで提出とは?
-
Perlの質問:行と列を入れ替え...
-
perlについて
-
openした後、closeしないでプロ...
-
Perl 特定のフォルダ以外削除
-
perl LWPでURLにアクセスした時...
-
perlをバージョンアップしたら...
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlのrequireの動き方について...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
双方向リスト(?)
-
HTML::TemplateのTMPL_LOOPにつ...
-
if($key){ ($key eq 'aaa') ||...
-
連番ごとに印をつける
-
変数に何も入ってないとき
-
ハッシュを無名変数へ代入して...
-
Perlのリファレンスについて
-
VB6の公式リファレンスはありま...
-
DBIを使用してデータを連想配列...
-
bashのリファレンス的なWEB...
-
ハッシュの配列を作ることは可...
-
Yahooの掲示板のような掲示板を...
-
重複する値を表示しない
-
Perl構造体、出力方法
-
ファイルからデータを読み込ん...
-
クラスの作り方
-
構造体の配列の指定方法
-
サブルーチンの返値に配列のハ...
-
C言語について。
-
Perlで縦横変換のような事をし...
おすすめ情報