加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl—— 文件读写

发布时间:2020-12-15 23:52:09 所属栏目:大数据 来源:网络整理
导读:一 读取一行 读取一行的方式有两种,分别为:??? (1) 使用方法 readline(FILEHANDLE) ; (2) 使用符号 # my 申明为局部变量,作用域my $filename = "a.txt";my $encoding = "";my $handle = undef;#打开open($handle,"",$filename) || die "$0 : can't open $fil

一 读取一行

读取一行的方式有两种,分别为:??? (1) 使用方法 readline(FILEHANDLE) ; (2) 使用符号<>

# my 申明为局部变量,作用域
my $filename = "a.txt";
my $encoding = "";
my $handle = undef;

#打开
open($handle,"<",$filename) || die "$0 : can't open $filename for reading:$!";

#read a line,读取时包含该行的n符号也会读取 方式一
$line = <$handle>;

#去除行的n
chomp($line);
print $line;

#read a line 方式二
$line = readline($handle);
print $line;

#关闭
close($handle);

二 读取所有行到列表中

使用 @array = <FILEHANDLE>

my $filename = "a.txt";
my $encoding = "";
my $handle = undef;

open($handle,$filename) || die "$0 : can't open $filename for reading:$!";

#read a line
$line = <$handle>;
print $line;

#把剩余的行都读取到一个list里面
@arr = <xxFile>;
#遍历@arr
foreach $a (@arr) {
	print $a;
}

close($handle);

三 写入一行

使用 print FILEHANDLE LIST

#写文件
$xxfilename = "xx.txt";
# 写入模式 >表示覆盖之前的文件,>>表示追加在文件的尾部
open (xxFile,">>",$xxfilename) or die "could not open $xxfilename : $!";
print xxFile ("aaaaaaaaaaabbddn");#注意圆括号前有空格,若没有则会出错提示为undefined subroutine &main::xxFile
close(xxFile);

四 复制文件,一行对一行

#把一个文件的内容复制到另外一个文件中

$srcFilename = "xx.txt";
$destFilename = "out.txt";

open(srcFile,$srcFilename) or die "file could not open $srcFilename : $!";
open(destFile,">",$destFilename) or die "file could not open $destFilename : $!";
#循环写入,读取一行,写入一行
while($line = <srcFile>) {
	print destFile ($line);
}
close(srcFile);
close(destFile);

五 复制文件,读取任意字节数

读取:read FILEHANDLE,SCALAR,LENGTH

写入:syswrite FILEHANDLE,SCALAR

my $buffer = undef;
my $BUFSIZE = 4 * (2 ** 10);
my $srcFilename = "a.txt";
my $srcHandle = undef;

my $destFilename = "a_dest.txt";
my $destHandle = undef;

open($srcHandle,$srcFilename) || die "$0 can't open $srcFilename : $!";
open($destHandle,$destFilename) || die "$0 can't open $destFilename : $!";

while(read($srcHandle,$buffer,$BUFSIZE)) {
	unless(syswrite $destHandle,$buffer){ #当写入出错时会执行unless里的语句,与if语句相反
		die "can't write to $destFilename : $!";
	}
}

#关闭文件
close($srcHandle) || die "can't close $srcFilename : $!";
close($destHandle) || die "can't close $destFilename : $!";

六 复制二进制文件

对二进制文件(如图片)进行操作时,与普通文件不一样,需要对文件引用对进行处理,使用 binmode FILEHANDLE

#操作二进制文件
my $buffer = undef;
my $BUFSIZE = 4 * (2 ** 10);
my $srcFilename = "bg1.png";
#my $encoding = ":encoding(UTF-16LE)";
my $srcHandle = undef;

my $destFilename = "bg1_dest.png";
my $destHandle = undef;

#打开二进制文件
open($srcHandle,$destFilename) || die "$0 can't open $destFilename : $!";


##二进制处理##
for my $handle($srcHandle,$destHandle) {
	binmode($handle) || die "binmode failed";
}

while(read($srcHandle,$buffer){ #当写入出错时会执行unless里的语句,与if语句相反
		die "can't write to $destFilename : $!";
	}
}


#关闭文件
close($srcHandle) || die "can't close $srcFilename : $!";
close($destHandle) || die "can't close $destFilename : $!";

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读