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:
#!/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 3Laksanakan 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 3Jika 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 getcPerihalan parameter:
- PENANGAN FAIL: Pemegang fail, digunakan untuk menyimpan pengecam fail unik.
- SKALAR: Mula membaca kedudukan.
- PANJANG: Panjang kandungan yang dibaca.
- OFFSET: mengimbangi.
read FILEHANDLE, SCALAR, LENGTH, OFFSET read FILEHANDLE, SCALAR, LENGTHGunakan pemegang fail dan fungsi cetak Hasil daripada pelaksanaan program boleh dihantar ke peranti output (STDOUT: output standard), contohnya:
print FILEHANDLE LIST print LIST printSalinan failDalam 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 failDalam 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 failContoh berikut menunjukkan cara menggunakan fungsinyahpaut untuk memadam fail:
#!/usr/bin/perl rename ("/usr/php/test/file1.txt", "/usr/php/test/file2.txt" );
Nyatakan lokasi failAnda 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),即是否为空文件, |