Manipulasi fail Perl


Perl menggunakan pembolehubah yang dipanggil jenis pemegang fail untuk memanipulasi fail.

Membaca atau menulis data daripada fail memerlukan pemegang fail.

Pengendali fail ialah nama sambungan I/O.

Perl menyediakan tiga pemegang fail: STDIN, STDOUT dan STDERR, yang masing-masing mewakili input standard, output standard dan output ralat standard.

Untuk membuka fail dalam Perl, anda boleh menggunakan kaedah berikut:

open FILEHANDLE, EXPR
open FILEHANDLE

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

Perihalan parameter:

  • FILEHANDLE: pemegang fail, digunakan untuk menyimpan pengecam fail unik.

  • EXPR: ungkapan yang terdiri daripada nama fail dan jenis akses fail.

  • MOD: Jenis akses fail.

  • PERMS: Bit kebenaran.


Fungsi buka

Dalam kod berikut kami menggunakan fungsi buka untuk membuka fail.txt dalam mod baca sahaja (<):

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

< menunjukkan mod baca sahaja.

DATA dalam kod ialah pemegang fail yang digunakan untuk membaca fail Contoh berikut akan membuka fail dan mengeluarkan kandungan fail:

#!/usr/bin/perl

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

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

Kod berikut membuka fail untuk menulis (. > ) file.txt:

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

> menunjukkan kaedah penulisan.

Jika anda perlu membuka fail dalam mod baca-tulis, anda boleh menambah tanda + sebelum aksara > atau < fail. , formatnya adalah seperti berikut:

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

Jika anda ingin menambah data pada fail, anda hanya perlu membuka fail dalam mod tambah sebelum menambahkan data:

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

> ;> bermaksud untuk Menambah data ke penghujung fail sedia ada Jika anda perlu membaca kandungan fail yang hendak dilampirkan, anda boleh menambah tanda +:

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

Jadual berikut menyenaraikan mod akses yang berbeza:

Fungsi


Fungsi Sysopen

sysopen adalah serupa dengan fungsi terbuka, kecuali bentuk parameternya berbeza.

Contoh berikut membuka fail untuk membaca dan menulis (+<nama fail):

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

Jika anda perlu mengosongkan fail sebelum mengemas kini fail, kaedah penulisan adalah seperti berikut:

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

Anda boleh menggunakan O_CREAT untuk mencipta fail baharu, O_WRONLY ialah mod tulis sahaja, O_RDONLY ialah mod baca sahaja.

Parameter PERMS ialah nilai atribut oktal, yang menunjukkan kebenaran selepas fail dibuat. Lalai ialah 0x666.

Jadual berikut menyenaraikan nilai mod yang mungkin:

模式描述
O_RDWR读写方式打开,将文件指针指向文件头。
O_RDONLY只读方式打开,将文件指针指向文件头。
O_WRONLY写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
O_CREAT创建文件
O_APPEND追加文件
O_TRUNC将文件大小截为零
O_EXCL如果使用O_CREAT时文件存在,就返回错误信息,它可以测试文件是否存在
O_NONBLOCK                    非阻塞I/O使我们的操作要么成功,要么立即返回错误,不被阻塞。

Tutup fungsi

Selepas fail digunakan, fail perlu ditutup untuk menyegarkan penimbal input dan output yang dikaitkan dengan pemegang fail Sintaks untuk menutup fail adalah seperti berikut:

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

FILEHANDLE ialah pemegang fail yang ditentukan, dan mengembalikan benar jika ia berjaya ditutup.

close FILEHANDLE
close

Membaca dan menulis fail

Terdapat beberapa cara yang berbeza untuk membaca dan menulis maklumat pada fail:

<FILEHANDL> Operator

Kaedah utama membaca maklumat daripada pemegang fail terbuka ialah operator <FILEHANDLE> Dalam konteks skalar, ia mengembalikan satu baris daripada pemegang fail. Contohnya:

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

Selepas program di atas dilaksanakan, maklumat berikut akan dipaparkan Selepas kami memasukkan URL, kenyataan cetakan akan dikeluarkan:

<. 🎜>Apabila kita menggunakan operator <FILEHANDLE> ; ia akan mengembalikan senarai setiap baris dalam pemegang fail, contohnya kita boleh mengimport semua baris ke dalam tatasusunan.

Cipta fail import.txt dengan kandungan berikut:

#!/usr/bin/perl

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

Baca import.txt dan letakkan setiap baris ke dalam tatasusunan @lines:

$ cat import.txt 
1
2
3

Laksanakan atur cara di atas, Hasil output ialah:

#!/usr/bin/perl

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

fungsi getc

fungsi xgetc mengembalikan satu aksara daripada FILEHANDLE yang ditentukan, jika tidak dinyatakan, mengembalikan STDIN:

1
2
3

Jika ralat berlaku, atau dalam fail Jika pemegangnya berada di hujung fail, undef dikembalikan.


fungsi baca

fungsi baca digunakan untuk membaca maklumat daripada pemegang fail penimbal.

Fungsi ini digunakan untuk membaca data binari daripada fail.

getc FILEHANDLE
getc

Perihalan parameter:

  • PENANGAN FAIL: Pemegang fail, digunakan untuk menyimpan pengecam fail unik.

  • SKALAR: Mula membaca kedudukan.

  • PANJANG: Panjang kandungan yang dibaca.

  • OFFSET: mengimbangi.

Mengembalikan bilangan bait yang dibaca jika bacaan berjaya, 0 jika di penghujung fail dan undef jika ralat berlaku.

fungsi cetak

Untuk semua fungsi yang membaca maklumat daripada pemegang fail, fungsi penulisan utama di bahagian belakang ialah cetakan:

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

Gunakan pemegang fail dan fungsi cetak Hasil daripada pelaksanaan program boleh dihantar ke peranti output (STDOUT: output standard), contohnya:

print FILEHANDLE LIST
print LIST
print

Salinan fail

Dalam contoh berikut kami akan membuka fail1.txt yang sedia ada dan baca Ambil setiap baris dan tuliskannya ke dalam fail file2.txt:

print "Hello World!\n";

Penamaan semula fail

Dalam contoh berikut, kami menamakan semula fail1.txt sedia ada kepada file2.txt, nyatakan Direktori berada di bawah /usr/php/test/:

#!/usr/bin/perl

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

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

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

fungsi

menamakan hanya menerima dua parameter dan hanya menamakan semula fail sedia ada.

Padam fail

Contoh berikut menunjukkan cara menggunakan fungsi

nyahpaut untuk memadam fail:

#!/usr/bin/perl

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


Nyatakan lokasi fail

Anda boleh mendapatkan lokasi fail menggunakan fungsi

beritahu dan nyatakan lokasi dalam fail dengan menggunakan fungsi cari:

fungsi beritahu

fungsi memberitahu digunakan untuk mendapatkan lokasi fail:

#!/usr/bin/perl

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

Jika FILEHANDLE ditentukan fungsi ini mengembalikan kedudukan penuding fail, dalam bait. Jika tidak dinyatakan, mengembalikan pemegang fail pilihan lalai.

fungsi seek

fungsi seek() ialah untuk membaca atau menulis fail dengan mengalihkan penunjuk baca dan tulis fail melalui pemegang fail, dan membaca dan menulis dalam bait :

tell FILEHANDLE
tell

Penerangan parameter:

  • PENANGAN FAIL: Pemegang fail, digunakan untuk menyimpan pengecam fail unik.

  • KEDUDUKAN: Menunjukkan bilangan bait yang akan dialihkan oleh pemegang fail (baca dan tulis penunjuk kedudukan).

  • WENCE: Menunjukkan kedudukan permulaan apabila pemegang fail (penunjuk kedudukan baca dan tulis) mula bergerak Nilai yang mungkin adalah 0, 1, dan 2; fail, kedudukan semasa dan Tamat fail.

Contoh berikut membaca 256 bait dari permulaan fail:

seek FILEHANDLE, POSITION, WHENCE

Maklumat fail

Pengendalian fail Perl juga boleh dilakukan pertama Uji sama ada fail itu wujud, sama ada ia boleh dibaca dan ditulis, dsb.

Kita boleh membuat fail file1.txt dahulu, seperti berikut:

seek DATA, 256, 0;
rrree

Laksanakan atur cara di atas, hasil output ialah:

$ cat file1.txt 
www.php.cn

Pengendali ujian fail ditunjukkan dalam jadual di bawah :

操作符描述
-A文件上一次被访问的时间(单位:天)
-B是否为二进制文件
-C文件的(inode)索引节点修改时间(单位:天)
-M文件上一次被修改的时间(单位:天)
-O文件被真实的UID所有
-R文件或目录可以被真实的UID/GID读取
-S为socket(套接字)
-T是否为文本文件
-W文件或目录可以被真实的UID/GID写入
-X文件或目录可以被真实的UID/GID执行
-b为block-special (特殊块)文件(如挂载磁盘)
-c为character-special (特殊字符)文件(如I/O 设备)
-d为目录
-e文件或目录名存在
-f为普通文件
-g文件或目录具有setgid属性
-k文件或目录设置了sticky位
-l为符号链接
-o文件被有效UID所有
-p文件是命名管道(FIFO)
-r文件可以被有效的UID/GID读取
-s文件或目录存在且不为0(返回字节数)
-t文件句柄为TTY(系统函数isatty()的返回结果;不能对文件名使用这个测试)
-u文件或目录具有setuid属性
-w文件可以被有效的UID/GID写入
-x文件可以被有效的UID/GID执行
-z文件存在,大小为0(目录恒为false),即是否为空文件,