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

読んでいただいてありがとうございます。

Perlをはじめたばかりなのと プログラミング自体もまだまだですので
困っております。

テキストデータ 例えば

apple りんご
banana バナナ
orange オレンジ

などというファイルから読み込んで、

my $data ={
my @english,
my @japanese,
};

などの、配列の構造体に格納するにはどのようにしたら
よいのでしょうか。

最初、本を少し読んだだけの知識で、

use strict;
use warnings;

my $filename = 'data.txt';

my $data = {
my @english,
my @japanese
};

open(IN,$filename) or die "$filename: $!";
while(my $line=<IN>){
for(my $i=0;$i<N;$i++){
($data->{@english}[$i],$data->{@japanese}[$i])=split(/ /,$line);
print "$data->{@english}[$i]\n";
}
}
close(IN);
}

などと書いて、

apple
banana
orange

と表示されるのを期待したのですが、
ダメでした。

参考までに私の誤ったプログラムものせましたが、
全然違っているかもしれませんので、まったく新たに
アドバイスしていただいてもかまいません。

これを応用したものを使いたいので ぜひともどなたかお教え
いただければと思います。
よろしくお願いします。

A 回答 (4件)

#1です。

大した回答になっていなかったので、再投稿します。
Perlを学んで数日ということで、サンプルコードを載せておきます。

use strict;
use warnings;

my (@english, @japanese);
open IN, "<data.txt" or die $!;
flock IN, 1;
while (<IN>) {
chomp;
split(/\s+/);
push @english, $_[0];
push @japanese, $_[1];
}
close IN;

my $data = { english => [@english], japanese => [@japanese] };
print $data->{japanese}[1];

最初は、@english と @japanese それぞれの配列に入れています。
最後に、お望みの形にする為に、$dataに格納しています。
    • good
    • 0

"...などの、配列の構造体に格納"ということから、


恐らく、ハッシュ(いわゆる連想配列)に格納したい、
ということのなのでしょうね。

ハッシュ変数は頭に "%" をつけたものです。
もしそれをご存知ないようでしたら
まずそこまで勉強されるのがよいでしょう。

ハッシュに特化した関数がいろいろあり簡単に記述できます。
    • good
    • 0

テキストデータから読み込まずに


Perlコードに直書きで配列に格納した状態にすることはできますか?
なんか、そのコード見てると読み込む以前の所から怪しい気がしたもので…。
    • good
    • 0
この回答へのお礼

そうなのです。。。Perl初めて2、3日なもので。。。その状態で
プログラムを書いていると
何があっていて何が間違っているのか分からず。。。

今は例というか 練習として上記のような少しのデータでしたが、
実際に扱うことになるのは大量のデータが入ったファイルなので
ファイルから読み込んで配列に格納するということがしたかったのです
(>_<)

お礼日時:2008/12/18 09:17

このプログラムには致命的な点があります。


$data = { } の意味をもう一度学習されると良いでしょう。
これは、無名ハッシュのリファレンスです。

ハッシュなのに my @english, my @japanese を格納しても意味がありませんので、
ここは、$data = { english => undef, japanese => undef } などとして、$data->{english}[$i] 等として使うと良いかもしれません。
ややこしいなら、リファレンスを使わずに書いてみましょう。
    • good
    • 0

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