Chinaunix首页 | 论坛 | 博客
  • 博客访问: 100586
  • 博文数量: 20
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 455
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-06 11:04
文章分类

全部博文(20)

文章存档

2011年(1)

2010年(14)

2009年(4)

2008年(1)

我的朋友

分类:

2010-07-28 15:36:33

> 第6章 ファイル操作とファイルハンドル
  第6章 ファイル操作とファイルハンドル



6-1. 標準入出力

  • Perlでは、ファイルの入出力にファイルハンドルというものを使います。ファイルハンドルとは、今どのファイルを処理しているかを管理するための名前のことです。
  • ファイルの読み込みや書き込みをするには、まずファイルを開いてファイルハンドルに関連付けし、そのファイルハンドルを操作するのが基本手順になります。
  • Perlでは、特別なファイルハンドルとして、以下の3つが用意されています。

    ファイルハンドル 意味 内容
    STDIN 標準入力 パイプ ( *1 ) やリダイレクト ( *2 ) 時にデータを取り込む。コマンドライン時にはキーボード。
    STDOUT 標準出力 パイプやリダイレクト時にデータを出力する。コマンドライン時にはモニター。
    STDERR 標準エラー エラー時に出力される。

    *1 : 標準出力と標準入力を経由してデータを受け渡しする仕組みで、あるプログラムが標準出力に出力した結果を、他のプログラムの標準入力に渡す仕組みをいいます。
    *2 : 標準出力をそのままのテキストファイルなどに書き出す方法をいいます。


    たとえばコマンドラインから操作する場合には、以下のようなスクリプトを実行することができます。

    <スクリプト例>
    #!/usr/local/bin/perl

    print "
    お名前は? \n";
    $name = ;
    print "
    こんにちは、$nameさん\n";

    <出力結果>
    お名前は?
    > TARO (← キーボードから入力)
    こんにちは、TAROさん


    このように、キーボード入力を標準入力であるファイルハンドルSTDINから変数$nameにセットし、文字列を操作・表示させることができます。



6-2. open関数とファイルハンドル

  • 前節ではあらかじめ用意された標準のファイルハンドルを説明しましたが、それ以外のファイルハンドル以外を使う場合には、open関数を使用します。
  • open関数を使ってファイルを読み込む場合の構文は次のようになります。

    ▼ファイルを読み込みモードでオープンする場合 (open命令)
    open ファイルハンドル, "ファイル名";


    ▼ファイルを読み込む処理 (read命令)
    配列 = <ファイルハンドル>


    ▼ファイルのオープンを閉じる処理 (close命令)
    close ファイルハンドル


    たとえばこの一連の処理として、掲示板などで記録ファイルを配列として読み込むには、次のように記述します。(読み込むファイル名をここでは log.txt と仮定します)

    記述例 1| open(IN,"log.txt");
    2| @file = ;
    3| close(IN);
    内容 1| 記録ファイルを、INというファイルハンドルで読み込む。
    2| 読み込んだ記録ファイルを配列@fileにセットする。
    3| 読み込み処理を閉じる。


    記述例の場合、ファイルハンドル名は「IN」という名前を使っていますが、これは自由に名前を指定して構いません。ただし、一般的には英字大文字で指定するようになっています。
    なお、記述例の 1 の部分、ファイルの読み込み処理で、

    open(IN,"< log.txt");


    というように、< を付ける場合もあります。意味は同じです。




6-3. ファイルの読み書き
  • ファイルに書き込み操作を行う場合にも、open関数とファイルハンドルを使います。
  • open関数によるファイルの読み書き操作としては、次のような構文が用意されています。

    意味 構文
    読み込みモードでオープン open (FH, "file")
    open (FH, "< file")
    上書きモードでオープン open (FH, "> file")
    追加書き込みモードでオープン open (FH, ">> file")
    読み書き両用モードでオープン open (FH, "+> file")
    open (FH, "+< file")
    パイプ出力用でオープン open (FH, "| コマンド")
    パイプ入力用でオープン open (FH, "コマンド |")


  • ファイルの上書き

    open(OUT,"> log.txt");
    print OUT "DEF";
    close(OUT);


    <解説>
    log.txtに「DEF」という文字列を上書きします。
    上書きですから、log.txtの中身を消して新たに書き込むことになります。
    仮に、当初 log.txt の中に「ABC」という文字列があった場合、上記の処理後
    中身は「DEF」となります。


  • 追加書き込み

    open(OUT,">> log.txt");
    print OUT "DEF";
    close(OUT);


    <解説>
    log.txtに「DEF」という文字列を追加書き込みします。
    追加書き込みですから、log.txtの中身のに追加連結することになります。
    仮に、当初 log.txt の中に「ABC」という文字列があった場合、上記の処理後
    中身は「ABCDEF」となります。


  • コマンドからパイプ入力用にオープン

    open(IN,"ls -l |");
    @cmd = ;
    close(IN);

    foreach $cmd (@cmd) {
         print "$cmd
    \n";
    }


    <解説>
    ls -l (カレントディレクトリ内のファイル名を取得) というコマンド
    を実行し、その結果を配列@cmdに格納し、表示する。


  • コマンドへパイプ出力用にオープン

    open(OUT,"| /usr/sbin/sendmail");
    print OUT "HELO
    \n";
    close(OUT);


    <解説>
    sendmailへ HELOコマンドを出力。




6-4. その他のファイル操作
  • その他にファイル操作のための関数として、次のようなものがあります。

    ファイルを削除 unlink ファイル名
    ファイル名を変更 rename "変更前のファイル名", "変更後のファイル名"

阅读(293) | 评论(0) | 转发(0) |
0

上一篇:第5章 制御構造

下一篇:第7章 正規表現

给主人留下些什么吧!~~