[もくじへトップページへ前ページへ次ページへ]

Sunday, 07-Jan-2001 01:22:06 JST に更新

                                     

 8.ファイル操作

 プログラミングで一番面白いのが、ファイル操作だと思います。ここでいうフ

 ァイル操作とは、プログラムのことではなく、データの保存と読み込みです。

 『りょうかんのプログラミング大学』では、スクリプト学科の中でJavaScript

 とVBScript講座を開いていますが、両言語ともこのファイルの扱いができない

 のです。クッキーでちょっと無理すれば、できないこともないのですが、クッ

 キーは不安定で大量のデータ保存には不向きです。その点、Perlはファイル操

 作が簡単で、確実に書き込みと読み込みができます。

 Perlは、シーケンシャルファイル(テープのように頭から順に書き込み読み込

 みするファイル)とランダムファイル(CDのように途中からでも書き込み読

 み込みできるファイル)ができますが、ここではシーケンシャルファイルにつ

 いて説明します。



  • 書き込み(保存)

    open ( ハンドル, ">ファイル名" );
     print ハンドル 変数;
        :
    close (ハンドル);

    ハンドルはファイル名のニックネームと考えていいでしょう。ファイル名

    の代わりの呼び名です。上書きモードは、ファイル名の頭に「>」、追加モ

    ードは「>>」をつけます。


    上書きモード

    open ( ABC,">abc.txt" );
     print ABC $line;
    close (ABC);

    ファイルを上書きモードでオープンし、$lineを書き込みます。


    open ( ABC,">abc.txt" );
     print ABC @abcdata;
    close (ABC);

    ファイルを上書きモードでオープンし、配列@abcdataを一度に書き込みま

    す。


    追加モード

    open ( ABC,">>abc.txt" );
     print ABC 'test';
    close (ABC);

    ファイルを追加モードでオープンし、最後に1行追加します。


  • 読み込み

    open ( ハンドル, "<ファイル名" );
     変数 = <ハンドル>;
        :
    close (ハンドル);

    読み込みモードは、ファイル名の頭に「<」(省略可)をつけます。


    open ( ABC,"<abc.txt" );
     $line = <ABC>;
     print "$line\n";
    close (ABC);

    ファイルを読み込みモードでオープンし、最初の1行を$lineに代入し、出

    力します。


    open ( ABC,"<abc.txt" );
     while(<ABC>) {
      print;
     }
    close (ABC);

    ファイルを読み込みモードでオープンし、それぞれの行を特殊変数$_に代入

    し、出力します。このように、変数を省略したときは特殊変数$_が使われま

    す。


    open ( ABC,"<abc.txt" );
     @abcdata = <ABC>;
    close (ABC);

    ファイルを読み込みモードでオープンし、一度に配列変数に代入します。


  • 書き込み読み込み両用モード

    open ( ABC,"+<abc.txt" );

    書き込み読み込みのどちらもできますが、ファイルがないとエラーになり

    ます。

    open ( ABC,"+>abc.txt" );

    ファイルを作成してから、書き込み読み込みのどちらもできます。

    open ( ABC,"+>>abc.txt" );

    ファイルがなければ作成してから、すでに存在すればそのまま書き込み

    読み込みのどちらもできます。

  以上の説明を、ひとつのプログラムにまとめます。



 ファイル操作のプログラム

#!/usr/local/bin/perl

print "Content-type: text/html\n\n";

print "<HTML>\n";
print "<TITLE>ファイル操作</TITLE>\n";
print "<BODY>\n";
#
#--------------------------------------------------
#
# 1行分のデータ
#
$line = 'uwagaki1';
#
# 書きこみ
#
open (ABC,">abc.txt");
print ABC "$line\n";
close (ABC);
#
# 読み込み
#
open (IN,"<abc.txt");
$a=<IN>;
print "$a<br>\n";
close (IN);
print "<br>\n";
#--------------------------------------------------
#
# 配列データ
#
@abcdata = ('Tokyo','Osaka','Kyoto','Kagoshima','Aira');
#
# 配列のデータを書き込み
#
open ( OUT,">abc.txt" );
print OUT "@abcdata\n";
close (OUT);
#
# 配列データを直接書き込むと、各要素はスペースで
# 区切られます。split(/区切り文字(半角文字は「\」
# をつける)/,分解する変数)で分解しながら配列@aに
# 代入します。
#
open ( IN,"<abc.txt" );
@a = split(/\ /,<IN>);
close (IN);
#
# @aの要素を特殊変数$_に1個づつ代入しながら表示
#
foreach (@a) {
print "$_<br>\n";
}
print "<br>\n";
#--------------------------------------------------
#
# 1行目のデータ書き込み(上書きモード)
#
$line1 = 'line1';
open (ABC,">abc.txt");
print ABC "$line1\n";
close (ABC);
#
# 2行目のデータ追加書き込み
#
$line2 = 'line2';
open ( ABC,">>abc.txt" );
print ABC "$line2\n";
close (ABC);
#
# abc.txt を読み込み表示
#
open ( ABC, "<abc.txt" );
@a = <ABC>;
close (ABC);
foreach (@a){
print "$_<br>\n";
}
print "<br>\n";
#--------------------------------------------------
#
print "</BODY>\n";
print "</HTML>\n";



 このプログラムに適当な名前をつけて、テキストモードでアップロードします。

 パーミッションは755に設定してください。



  テスト実行

      file.cgi

 をクリックしてください。



  うまく動きましたか?

  動かないときは、サポート掲示板へどうぞ。

[もくじへトップページへ前ページへ次ページへ]