=head1 NAME Enjoy! Perl Programming - No.23 =head1 SYNOPSIS データの保存 - ファイル操作(4) =head1 DESCRIPTION Perl言語におけるファイル操作の4回目。 今回はファイルの内容を表示する方法について見てみよう。 =head2 ファイルの内容を表示する ファイルの内容は編集しない。確認の為にさっと内容を表示したい。 このような場合には、次のようにする。 1.ファイルを読込みモードでオープンする 2.ファイルハンドルから1行づつ読み込む 3.読み込んだ行に対して何か処理する 4.ファイルをクローズする 例としてある年の「静岡県小型二輪車登録台数」を表示してみよう。 "data-0023.txt" 市 郡 名,小 型 静 岡 市,"5,683" 清 水 市,"2,847" 浜 松 市,"8,592" 磐 田 市,"1,623" 袋 井 市,844 静岡県合計,"47,799" # [例題23-1] $FileName = "data-0023.txt"; open FILEHANDLE, "$FileName" # ファイルオープン or die "File open error: $!"; while ( ) # ファイルハンドルから1行づつ読込み { print; # 読み込んだ行を標準出力に表示 } close FILEHANDLE; # ファイルクローズ 隠れている"$_"特殊変数を表示させるとこの様になる。 open FILEHANDLE, "$FileName" # ファイルオープン or die "File open error: $!"; while ( defined( $_ = ) ) { print $_; } close FILEHANDLE; # ファイルクローズ もちろん自分で用意した変数にデータを格納しても良い。 open FILEHANDLE, "$FileName" # ファイルオープン or die "File open error: $!"; while ( defined( $line = ) ) # $line変数に格納 { print $line; } close FILEHANDLE; # ファイルクローズ =head2 ファイルハンドルの動き "open"関数でファイルと結び付けたファイルハンドルは、"<>"で囲む ことでファイルから中身を取り出すことが出来る。 これをスカラー変数に代入するとファイルをオープンした直後では 一番最初の行が返される。 $line = print $line; # 市 郡 名,小 型 もう一度同じことを行うと次の行(2行目)が返される。 $line = print $line; # 静 岡 市,"5,683" このように""をスカラー変数で評価するとファイルの 先頭から1行づつ順番に行が返される。 しかしどんな時もこの動きをするという訳ではない。 次の例を見てみよう。 # [例題23-2] open FILEHANDLE, "$FileName" # ファイルオープン or die "File open error: $!"; $/ = ""; # 行セパレータをクリアする $line = ; # 一気に読み込む print $line; close FILEHANDLE; # ファイルクローズ この例ではスカラー変数に読み込んでいるにも関わらず、ファイルの 内容の全てが読み込まれていることが分かる。 通常、ファイルの行区切りを定義している"$/"特殊変数には改行文字"\n" が定義されている。これをクリアすることで改行文字で分割されずに ファイルの内容をスカラー変数に一気に読み込むことが出来る。 =head1 SEE ALSO "open"と"die" 関数の各ドキュメントページ。 "perlopentut"ファイルオープンチュートリアルページ。 =head1 編集後記「Perl以前」 次にプログラム言語に触れたのは社会人となってからだった。 新入社員でソフトの開発部隊に3ヶ月程借り出された。 当時マイクロソフトはMS-DOSしか売っていなかったし、職場に数台有った マッキントッシュSE/30はよく爆弾マークを表示して止まっていた。 仕事に入る前に短期間だが先輩SEからプログラミングの講習を受けた。 今思えば、この時がプログラム言語を体系的に学んだ最初(そして最後) の体験だったのだなあと思う。その時に学んだのはC言語。ポインタ は結局分からずじまいだった。。。 スクリプト実行環境 OS : Windows ME, NT4.0, 2000 Perl: ActivePerl v5.6.1 build 631 マガジン登録/解除 マガジン名:Enjoy! Perl Programming マガジンID:0000082873 登録/解除:http://www.lares.dti.ne.jp/~y-kazu/perl/ 配信   :週刊 編集/発行:吉田和弘(Yoshida Kazuhiro) E-Mail  :y-kazu@lares.dti.ne.jp このメールマガジンは、インターネットの本屋さん『まぐまぐ』を 利用して発行しています。http://www.mag2.com/ 感謝!!