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

perl文件操作

发布时间:2020-12-15 21:04:10 所属栏目:大数据 来源:网络整理
导读:一、打开文件: $OpenFileFlag? =? open(FILEHANDLE,"模式标识符 FileName"); 如果打开成功,则返回真值(非空值);如果打开失败,则返回假值(空值);文件的默认访问模式是只读; 1、使用open函数进行文件重定向: $OpenFlag? =? open(HFCAT,"cat file* |"

一、打开文件:

$OpenFileFlag? =? open(FILEHANDLE,"模式标识符 FileName");

如果打开成功,则返回真值(非空值);如果打开失败,则返回假值(空值);文件的默认访问模式是只读;

1、使用open函数进行文件重定向:

$OpenFlag? =? open(HFCAT,"cat file* |");

则open函数先把cat命令的输出构造成一个文件,然后与文件句柄变量HFCAT关联起来;

$OpenFlag1? =? open(FH1,"> FileName");

$OpenFlag2? =? open(FH2,">&? FH1");

这两行语句的功能是把文件句柄FH1和HF2都关联到文件FileName上,两个文件句柄都向同一个文件中写入数据;

其中第二条语句中的参数">& FH1"告诉Perl解释器使用已经打开的并与文件句柄FH1关联的文件,即:文件句柄FH1和FH2都指向与FH1相关联的文件;

二、关闭文件:

关闭文件使用函数close();如果关闭的文件是管道文件,即重定向的命令时,程序会等待重定向命令执行结束;

close(FILEHANDLE);

三、print、printf和write函数:

这三个函数都是输出函数;其中print是最简单的函数;

1、print?? ("Hello,Perl World/n");?

???? 输出到当前默认的文件中(由select()函数选择),没有调用select()时,默认的输出文件是标准输出STDOUT;

2、print???OUTFILE ?("Hello,Perl World/n") ;

???? 把数据输出到指定文件句柄OUTFILE所指向的文件中;

3、printf? ($FORMATSTRING,arg1,arg2,...,argN);

???? 先格式化数据,然后把格式化后的数据写到默认文件中(由select()函数选择),没有调用select()时,默认的输出

???? 文件是标准输出STDOUT;

4、printf??OUTFILE? ($FORMATSTRING,arg1,arg2,...,argN);

???? 先格式化数据,然后把数据输出到指定文件句柄OUTFILE所指向的文件中;

5、write? ($FORMATSTRING,arg1,arg2,...,argN);

6、write??OUTFILE? ($FORMATSTRING,arg1,arg2,...,argN);

7、select()函数:

????? select(FILEHANDLE);

????? 这个函数把参数FILEHANDLE所指定的文件句柄设置为当前新的默认文件;当对print、printf和write函数的调用

????? 未指定文件时,默认就写入到文件句柄FILEHANDLE所指向的文件中;

8、eof()函数:

????? eof函数判断最后一次读文件操作是否是文件的最后一个记录(检查文件读写位置指针是否已经到达文件尾部),

????? 如果是,则返回非零值(真),如果不是,否则返回零值(假);也就是说,最后一次读取文件时,如果文件读写位

????? 置指针已经到达文件尾部,则eof函数返回非零值(真),如果没有到达文件尾部,则返回零值(假);
????? 一般情况下,带圆括号的eof()函数调用与不带圆括号的eof函数调用的效果是一样的;但是如果与文件输入运算

????? 符<>一起使用的话,效果就不一样了;当在命令行输入多个文件的时候,不带圆括号的eof函数调用在读完每一

????? 个文件的时候,都会认为读到这个文件尾部了,此时返回非零值(真),否则返回零值(假);而带圆括号的eof()函

????? 数调用则会认为只有当所有的文件都读取完了,才会认为是读取文件结束,也就是说只有当文件读写位置指针

????? 到达最后一个文件的尾部时,才会认为读取文件结束,此时eof()函数返回非零值(真),否则返回零值(假);只有

????? 所有文件都读过了,eof()函数才会返回真值,如果只是多个文件中的前面几个文件的结尾,则eof()函数仍然返

????? 回假值,因为还有需要读取的输入;

四、系统读写函数:

1、read()函数:

?????Perl把该函数设计得与UNUX系统中的fread()函数等效,用于从指定文件中读取任意长度的字符(字节)数,并把读

???? 到的数据存储到一个简单变量或数组元素中;调用语法如下:

???? $BytesToRead? =? read(FileVariable,Buffer,Length,BytesTpSkip);

???? FileVariable:用于存储文件句柄的简单变量;

???? Buffer:用于存储read读到的数据的简单变量(或数组元素);

???? Length:最多需要读取的字节数;

???? BytesToSkip:可选项,用于指定读取文件之前需要跳过的字节数;

???? 返回值:返回值为实际读取到的字节数;如果文件读写位置指针已经到达文件的尾部,则read()返回零;如果出

????? 错,则read()返回空值;

2、sysread()函数:

???? 该函数用于更快地读取数据,其实现与UNIX系统中的read()函数等效,与Perl中的read()函数相同;调用语法:

???? $BytesToRead? =? sysread(FileVariable,Buffer,Length,BytesToSkip);

???? Buffer:用于存储读取到的数据的简单变量(或数组元素);

???? BytesToSkip:可选项,用于指定在读取文件之前需要跳过的字节数;

???? 返回值:返回值为实际读取到的字节数;如果文件读写位置指针已经到达文件尾部,则sysread()返回零;如果

???? 出错,则sysread()返回空值;

3、syswrite()函数:

????? 该函数用于更快地写入数据,其实现与UNIX中的write()函数等效;有4个参数:

????? $BytesToWrite? =? syswrite(FileVariable,DataBuffer,Length,BytesToSkip);

????? FileVariable:用于存储文件句柄的简单变量;

????? DataBuffer:用于存放将要写入的数据的缓冲区;

????? Length:需要写入的字节数;

????? BytesToSkip:在写文件之前需要跳过的字节数;

????? 返回值:返回实际写入的字节数;如果出错,则syswrite()返回空值;

4、getc()函数:

????? 该函数用于从指定文件中读取一个字符(字节);其实现与UNIX C语言中的getc()函数等效;调用语法:

????? $Char? =? getc(FileVariable);

????? FileVariable:用于存放文件句柄的简单变量;

????? 返回值:返回读取到的字符;

5、binmode()函数:

????? 该函数用于读取二进制文件;当所在的系统对文本文件和二进制文件有所区别时使用;必须在打开文件之后、

????? 读取文件之前调用;调用语法:

????? binmode(FileVariable) ;

????? FileVariable:用于存放文件句柄的简单变量;

(编辑:李大同)

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

    推荐文章
      热点阅读