perl文件操作
一、打开文件: $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()函数仍然返 ????? 回假值,因为还有需要读取的输入; 四、系统读写函数: 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:用于存放文件句柄的简单变量; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |