初心者用 Perl講座(http://www.bioinfo.sfc.keio.ac.jp/class/genpro/Texts/Perl4_7.htm)の課題2-1で、2つのファイルを続けて出力するスクリプトを書く問題を試してみたのですが、うまくできませんでした。(http://d.hatena.ne.jp/azaburecipes/20080928/1222586802)どなたか2つのファイルを続けて出力するプログラムの書き方がわかる方がいらっしゃったら教えてくださると助かります。お願いします。

回答の条件
  • 1人2回まで
  • 登録:2008/09/28 16:37:29
  • 終了:2008/10/01 10:40:33

回答(5件)

id:hirotie No.1

hirotie回答回数25ベストアンサー獲得回数12008/09/28 16:49:05

ポイント100pt

こうすればできるかな?

(当方動作チェックしてませんので、出来なければポイント要りません)

#!/usr/bin/perl

open(FILE, "food.txt");

while(<FILE>){

print $_;

}

close FILE;

open(FILE2, "food2.txt");

while(<FILE2>){

print $_;

}

close FILE2;

下記はダミーです

http://q.hatena.ne.jp/answer

id:azaburecipes

迅速な回答をありがとうございます。うまく作動しました。ありがとうございます。

komadas-Computer:~ komada$ chmod +x eat3.pl

komadas-Computer:~ komada$ ./eat3.pl

I like an apple.

He ate a banana.

I cooked some corn.

She has some donuts.Pooh likes honey.

He finds honeycomb and eats honey.

He also likes honey pies.

But, he is often followed by honey bees. komadas-Computer:~ komada$

2008/09/28 17:09:03
id:ele_dir No.2

ele_dir回答回数263ベストアンサー獲得回数202008/09/28 16:53:21

ポイント100pt

#!/usr/bin/perl

open(FILE, "<food.txt");</p>

while(<FILE>){

print $_;

}

close FILE;

open(FILE, "<food2.txt");</p>

while(<FILE>){

print $_;

}

close FILE;

これで良いのではないでしょうか?

http://q.hatena.ne.jp

id:azaburecipes

アドヴァイスをありがとうございます。

eat4.plという名前でためしてみました。

komadas-Computer:~ komada$ chmod +x eat4.pl

komadas-Computer:~ komada$ ./eat4.pl

open(FILE,: bad interpreter: No such file or directory

komadas-Computer:~ komada$

書き方は何通りかあるのでしょうね。ファイルの書き方など参考になります。


追記:余計な記号をとったらうまく動きました。ありがとうございます。

2008/09/28 23:14:27
id:perlcodesample No.3

perlcodesample回答回数4ベストアンサー獲得回数02008/09/28 19:34:34

ポイント100pt

 以下のようにするとファイルが3つ以上の場合も対応できます。

#!/usr/bin/perl
use strict;
use warnings;

my @files = @ARGV; #引数から複数のファイル名を受け取る。

foreach my $file ( @files ){ # ファイル名の数だけループする。
    open( my $fh, "<", $file )
        or die "Cannot open $file";
    
    while( my $line = <$fh> ){ # 1行読み込み
        print $line; # コマンドラインに出力
    }
    close( $fh );
}
__END__

http://q.hatena.ne.jp/ //ダミー

id:azaburecipes

貴重なアドヴァイスをありがとうございます。

もしこのスクリプトを使わせてもらうときに、例えば、food.txt、food2.txt、food3.txtという3つのファイルを使いたいときは、どこに書き込んだらいいでしょうか。それともほかに作業が必要だったりするのでしょうか。かなり初歩的な質問でお手数をおかけしてすみません。

2008/09/28 23:11:16
id:ele_dir No.4

ele_dir回答回数263ベストアンサー獲得回数202008/09/28 20:23:10

ポイント100pt

</p>というタグが入っているためエラーが出たようです。すみません。

折角ですので、いろいろな書き方を書いてみました。

投稿のとき、なぜか分かりませんが、強制的に</p>が入ってしまいます。

実行の際は取り除いてください。

当環境では、正常に動作したので、恐らく大丈夫だと思います。

ちなみに、「<」を使ったのは、明示的に、ファイルの読み取り、書き込みを示したかったためです。

この向きを逆にすると、ファイルを作成します。下記、例。

なお、コメント欄を開けていたければ、以降、そちらに記入いたします。

http://q.hatena.ne.jp

※\は半角の¥記号です。どうも、ここに投稿すると、強制的に変換されるようです。


-------------------------------

#!/usr/bin/perl

print "test 0\n";

open(FILE, ">test.txt");

print FILE "test\n";

close(FILE);



#</p>を除いたたももの。

print "test 1\n";

open(FILE, "<food.txt");</p>

while(<FILE>){

print $_;

}

close FILE;

open(FILE, "<food2.txt");</p>

while(<FILE>){

print $_;

}

close FILE;



#$_が無くても、$_だけは特殊なので動いてくれる。

print "test 2\n";

open(FILE, "<food.txt");</p>

while (<FILE>){

print ;

}

close FILE;

open(FILE, "<food2.txt");</p>

while(<FILE>){

print ;

}

close FILE;



#同じスクリプトは不要なので、ファイル名だけ呼び出して、あとはまとめてみた。 ここでは、配列を使用。

print "test 3\n";

@file_name = ("food.txt","food2.txt");

while(<@file_name>){

open(FILE, "<$_");

while (<FILE>){

print $_;

}

}



#forでも似たようなことができる

print "test 4\n";

@file_name = ("food.txt","food2.txt");

for $file (@file_name){

open(FILE, "<$file");

for $line (<FILE>){

print $line;

}

close FILE;

}

id:azaburecipes

いろいろな書き方を教えてくださってありがとうございます。それぞれの方法を試してみて、すべて動かすことができました。(http://d.hatena.ne.jp/azaburecipes/20080929/1222669288)いくつもの書き方を試して動かしてみて、何か大事なことを学んだような気がします。

2008/09/29 17:51:14
id:perlcodesample No.5

perlcodesample回答回数4ベストアンサー獲得回数02008/09/29 06:12:58

ポイント100pt

>もしこのスクリプトを使わせてもらうときに、例えば、food.txt、food2.txt、food3.txtという

>3つのファイルを使いたいときは、どこに書き込んだらいいでしょうか。

>それともほかに作業が必要だったりするのでしょうか。

>かなり初歩的な質問でお手数をおかけしてすみません。

 

このスクリプト名を sample.pl で保存したとすると、

perl sample.pl food.txt food2.txt food3.txt

としてコマンドライン引数でファイル名を渡してあげます。

また

perl sample.pl food.txt food2.txt food3.txt > output.txt

とすると、ディスプレイでなくファイルに出力できます。

http://q.hatena.ne.jp //ダミー

id:azaburecipes

お返事が遅くなってすみません。perlcodesampleさんのアドヴァイスをたよりに試してみたのですが、うまく動かすことができませんでした。(http://d.hatena.ne.jp/azaburecipes/20080930/1222740255)どこか間違っているところや、抜けているところがあったらアドヴァイスをいただけると助かります。

2008/09/30 11:08:54

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません