Perlファイルの操作


Perl はファイルハンドルタイプと呼ばれる変数を使用してファイルを操作します。

ファイルからのデータの読み取りまたは書き込みには、ファイル ハンドルが必要です。

ファイルハンドルは I/O 接続の名前です。

Perl には、STDIN、STDOUT、および STDERR という 3 つのファイル ハンドルがあり、それぞれ標準入力、標準出力、および標準エラー出力を表します。

Perl でファイルを開くには、次のメソッドを使用できます:

open FILEHANDLE, EXPR
open FILEHANDLE

sysopen FILEHANDLE, FILENAME, MODE, PERMS
sysopen FILEHANDLE, FILENAME, MODE

パラメータの説明:

  • FILEHANDLE: ファイル ハンドル。一意のファイル識別子を保存するために使用されます。

  • EXPR: ファイル名とファイル アクセス タイプで構成される式。

  • MODE: ファイルアクセスタイプ。

  • PERMS: 許可ビット。


Open 関数

次のコードでは、open 関数を使用してファイル file.txt を読み取り専用モード (<) で開きます:

open(DATA, "<file.txt");

< は読み取り専用モードを意味します。コード内の

DATA は、ファイルの読み取りに使用されるファイル ハンドルです。次の例では、ファイルを開いてファイルの内容を出力します。

#!/usr/bin/perl

open(DATA, "<file.txt") or die "file.txt 文件无法打开, $!";

while(<DATA>){
   print "$_";
}

次のコードは、( > ) を記述することでファイル file.txt を開きます。

>は書き方を示します。

ファイルを読み取り/書き込みモードで開く必要がある場合は、> または < 文字の前に + 記号を追加できます。

open(DATA, ">file.txt") or die "file.txt 文件无法打开, $!";

この方法では、ファイルの元のコンテンツは削除されません。形式は次のとおりです。

open(DATA, "+<file.txt"); or die "file.txt 文件无法打开, $!";

データをファイルに追加する場合は、データを追加する前に、ファイルを追加モードで開くだけです。

open DATA, "+>file.txt" or die "file.txt 文件无法打开, $!";

>> は、データを最後に追加することを意味します。追加するファイルを読み取る必要がある場合は、既存のファイルの内容を + 記号で追加できます:

open(DATA,">>file.txt") || die "file.txt 文件无法打开, $!";

次の表に、さまざまなアクセス モードを示します:

Mode Description < または r 読み取り専用モードで開き、ファイル ポインターをファイル ヘッダーにポイントします。 > または w書き込みモードで開き、ファイル ポインタをファイル ヘッダーにポイントし、ファイル サイズをゼロに切り捨てます。ファイルが存在しない場合は、作成してみてください。 >> または書き込みモードで開き、ファイルポインタをファイルの末尾に指します。ファイルが存在しない場合は、作成してみてください。 +< または r+ 読み取りおよび書き込みモードで開き、ファイル ポインターをファイル ヘッダーにポイントします。 +> または w+ 読み取り/書き込みモードで開き、ファイル ポインターをファイル ヘッダーにポイントし、ファイル サイズをゼロに切り捨てます。ファイルが存在しない場合は、作成してみてください。 +>> または a+ 読み取り/書き込みモードで開き、ファイル ポインターをファイルの末尾に指します。ファイルが存在しない場合は、作成してみてください。

Sysopen関数

sysopen関数は、パラメーターの形式が異なることを除いて、open関数に似ています。

次の例では、読み取りおよび書き込み (+<ファイル名) モードでファイルを開きます:

open(DATA,"+>>file.txt") || die "file.txt 文件无法打开, $!";

ファイルを更新する前にファイルをクリアする必要がある場合、書き込み方法は次のとおりです:

sysopen(DATA, "file.txt", O_RDWR);

O_CREAT を使用して新しいファイルを作成します。O_WRONLY は書き込み専用モード、O_RDONLY は読み取り専用モードです。

PERMS パラメータは 8 進数の属性値で、ファイル作成後の権限を示します。デフォルトは 0x666 です。

次の表は、可能なモード値を示しています:

Mode Description
O_RDWR 読み取り/書き込みモードで開き、ファイル ポインターがファイル ヘッダーを指すようにします。
O_RDONLY読み取り専用モードで開き、ファイルポインターをファイルヘッダーにポイントします。
O_WRONLY書き込みモードで開き、ファイルポインタをファイルヘッダーにポイントし、ファイルサイズをゼロに切り詰めます。ファイルが存在しない場合は、作成してみてください。
O_CREATファイルを作成
O_APPENDファイルを追加
O_TRUNCファイルサイズをゼロに切り捨てる
O_EXCL O_CREAT を使用するときにファイルが存在する場合、エラー メッセージが表示されます。返されます。ファイルが存在するかどうかをテストできます。

Close関数

ファイルを使用した後、ファイルハンドルに関連付けられた入出力バッファを更新するためにファイルを閉じる必要があります。ファイルを閉じるための構文は次のとおりです:

sysopen(DATA, "file.txt", O_RDWR|O_TRUNC );

FILEHANDLEは指定されたファイルです。ハンドルが返され、正常に閉じられた場合は true が返されます。

close FILEHANDLE
close

ファイルの読み取りと書き込み

ファイルへの情報の読み取りと書き込みには、いくつかの異なる方法があります:

<FILEHANDL> 演算子

開いているファイル ハンドルから情報を読み取る主な方法は、<FILEHANDLE> です。演算子。スカラーコンテキストでは、ファイルハンドルから単一行を返します。例:

close(DATA) || die "无法关闭文件";

上記のプログラムを実行すると、URL を入力すると次の情報が表示されます。

<FILEHANDLE> 演算子を使用すると、次の情報が表示されます。ファイルハンドルリストの各行の値。たとえば、すべての行を配列にインポートできます。

次の内容の import.txt ファイルの作成を実装します:

#!/usr/bin/perl

print "php中文网网址?\n";
$name = <STDIN>;
print "网址:$name\n";

import.txt を読み取り、各行を @lines 配列に入れます:

$ cat import.txt 
1
2
3

上記のプログラムを実行すると、出力結果は次のようになります:

#!/usr/bin/perl

open(DATA,"<import.txt") or die "无法打开数据";
@lines = <DATA>;
print @lines;    # 输出数组内容
close(DATA);

getc 関数

xgetc この関数は、指定された FILEHANDLE から 1 文字を返します。指定されていない場合は STDIN を返します。

1
2
3

エラーが発生した場合、またはファイル ハンドルがファイルの最後にある場合は、undef が返されます。


read関数

read関数は、バッファのファイルハンドルから情報を読み取るために使用されます。

この関数は、ファイルからバイナリデータを読み取るために使用されます。

getc FILEHANDLE
getc

パラメータの説明:

  • FILEHANDLE: 一意のファイル識別子を保存するために使用されるファイルハンドル。

  • スカラー: 位置の読み取りを開始します。

  • LENGTH: 読み取られたコンテンツの長さ。

  • オフセット: オフセット。

読み取りが成功した場合は読み取られたバイト数を返し、ファイルの終わりの場合は 0 を返し、エラーが発生した場合は undef を返します。

print関数

ファイルハンドルから情報を読み取るすべての関数について、バックエンドの主な書き込み関数はprintです:

read FILEHANDLE, SCALAR, LENGTH, OFFSET
read FILEHANDLE, SCALAR, LENGTH

ファイルハンドルとprint関数を使用して、プログラムの実行結果を出力デバイス(STDOUT:標準)に送信します。出力)、例:

print FILEHANDLE LIST
print LIST
print

ファイルのコピー

次の例では、既存のファイル file1.txt を開き、その各行を読み取り、ファイル file2.txt に書き込みます。

print "Hello World!\n";

ファイルの名前変更

次の例では、既存のファイル file1.txt の名前を file2.txt に変更します。指定されたディレクトリは /usr/php/test/ の下にあります。

#!/usr/bin/perl

# 只读方式打开文件
open(DATA1, "<file1.txt");

# 打开新文件并写入
open(DATA2, ">file2.txt");

# 拷贝数据
while(<DATA1>)
{
   print DATA2 $_;
}
close( DATA1 );
close( DATA2 );

functionrenames は、既存のファイルの名前を変更する場合のみ、2 つのパラメーターのみを受け入れます。

ファイルを削除する

次の例は、unlink関数を使用してファイルを削除する方法を示しています:

#!/usr/bin/perl

rename ("/usr/php/test/file1.txt", "/usr/php/test/file2.txt" );

ファイルの場所を指定する

ファイルの場所を取得するには、tell関数を使用できます。 seek関数を使用します ファイル内の場所を指定するには:

tell関数

tell関数はファイルの場所を取得するために使用されます:

#!/usr/bin/perl

unlink ("/usr/php/test/file1.txt");

FILEHANDLE が指定されている場合、この関数はファイル ポインターの位置をバイト単位で返します。指定しない場合は、デフォルトで選択されたファイル ハンドルを返します。

seek 関数

seek() 関数は、ファイル ハンドルを介してファイルの読み取りおよび書き込みポインターを移動することによって、ファイルの読み取りまたは書き込みを行います。読み取りと書き込みはバイト単位で行われます。一意のファイル識別子を保存するために使用されます。

    POSITION: ファイル ハンドル (読み取りおよび書き込み位置ポインター) によって移動されるバイト数を示します。
  • WHENCE: ファイル ハンドル (読み取り/書き込み位置ポインター) が移動を開始する開始位置を示します。指定可能な値は、ファイルの先頭、現在の位置、および 2 です。それぞれファイルの終わり。
  • 次の例は、ファイルの先頭から 256 バイトを読み取ります:
  • tell FILEHANDLE
    tell

    ファイル情報
Perl のファイル操作では、ファイルが存在するかどうか、読み書きできるかどうかなどを最初にテストすることもできます。

最初に次のように file1.txt ファイルを作成できます:
seek FILEHANDLE, POSITION, WHENCE
seek DATA, 256, 0;

上記のプログラムを実行すると、出力結果は次のようになります:

$ cat file1.txt 
www.php.cn

ファイル テスト演算子を次の表に示します:

OperatorDescription
-Aファイルが最後にアクセスされた時刻(単位:日)
-Bバイナリファイルかどうか
-C ドキュメント (inode) インデックス ノードの変更時間 (単位: 日)
-M ファイルが最後に変更された時間 (単位: 日)
-O ファイルは、実UID
-Rソケット(ソケット)の実UID/GID
-Sでファイルやディレクトリを読み込むことができます
-Tテキストファイルかどうか
-W ファイルまたはディレクトリは実UID/GIDで書き込むことができます
-Xファイルまたはディレクトリは実UID/GIDで実行できます
-bはブロックです-スペシャル (特殊ブロック) ファイル (ディスクのマウントなど)
-c は、キャラクタースペシャル (特殊文字) ファイル (I/O デバイスなど) です
-d は、ディレクトリ
-e ファイルまたはディレクトリ名が存在します
-f通常のファイルの場合
-g ファイルまたはディレクトリには setgid 属性があります
-k ファイルまたはディレクトリにはスティッキービットが設定されています
-l シンボリックリンクの場合
-o ファイルは有効なUIDによって所有されています
-p ファイルは名前付きパイプ(FIFO)です
-r ファイルは有効な UID/GID で読み取ることができます
-s ファイルまたはディレクトリは存在しますが、0 ではありません (バイト数を返します)
-t ファイル ハンドルis TTY (システム関数 isatty() の戻り結果。これはファイル名には使用できません) テスト)
-u ファイルまたは setuid 属性を持つディレクトリ
-w ファイルは、有効な UID/GID
-x ファイルは有効な UID/GID で書き込むことができます。
-z を実行します。 ファイルは存在し、サイズは 0 (ディレクトリは常に false)、つまり、空のファイルかどうか、