在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6004|回复: 12

[求助] perl文件操作问题

[复制链接]
发表于 2011-11-16 14:51:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
小弟在进行perl的文件操作时,遇到几个问题,望各位大侠予以赐教!
1、我们知道,perl打开文件时,可以指明你想对文件进行啥操作,比如open(SESAME,"<filename");就是说想从文件名是filename的文件中读取数据,现在我的问题就在于如何告诉说我想对一个文件进行读写操作?一次性的,而不是说先使用一个表示写的句柄,写完数据后,再将该句柄关掉,再打开一个读句柄,对刚才写进去的数据进行读取操作!
2、#!/usr/bin/perl -w
     use strict;
my @name_List = qa(a b c d);
open(FH_w,">Name.txt");
for(my $i = 0;$i <= 3;$i++){
print FH_w,$name_List[$i];
print "\n";
}
close FH_w;
open(FH_r,"Name.txt);###
my @List1 = <FH_r>;
print "@List1";
代码如上,现在有一个问题就是如果在输出Name.txt中的内容之前,也就是在###那一行之前,不将FH_w这个句柄关掉的话,就不会产生输出,产生这种现象的原因是啥?
发表于 2011-11-16 22:36:22 | 显示全部楼层
使用open文件句柄,输出数据,缓冲区不会立即被刷新,所以你若不适用close关闭文件句柄的话,就不能产生输出!
发表于 2011-11-16 22:51:29 | 显示全部楼层
1, perl的确支持读写同时,是 "+>" , 和 “+<" 这种,但是支持的不好,很容易出问题,
为了文件的安全,你还是 > 和< 分开,根本不影响你的效率的,
perl处理的速度你根本感觉不到的,很快

2.最好是用完文件就关闭handle,这样是好的习惯, 当然perl也可以替你关闭,
而且读和写用 < 和> 明显的写出来比较好,
你第2个读没写 < ,
 楼主| 发表于 2011-11-17 09:02:00 | 显示全部楼层
回复 2# 爱IC


    那我在这种情况下,不关闭句柄,是否有可能将数据输出?
 楼主| 发表于 2011-11-17 09:03:01 | 显示全部楼层
回复 3# icfbicfb
谢谢您指出问题!
发表于 2011-11-17 10:22:07 | 显示全部楼层
回复 4# l2002924700


    为什么一定要这样操作呢,有什么特殊用途呢?   能把你手头的case说一下吗

    如果是read完了这个文件,还想继续往里面写东西的话,完全可以用追加的模式重新打开文件,继续往里面写东西

    open FILE , ">>  yourfile"  ;
 楼主| 发表于 2011-11-17 10:36:45 | 显示全部楼层
回复 6# 射门靴


    倒没有啥情况,只是在学习《Perl语言入门》时,遇到了这种情况。不过刚才又把《Perl语言入门》这本书中关于“输入与输出”这一章又看了一遍,其中,有这么一段话“因此,输出的结果会先输出到缓冲区,等到输出去满了或者在输出结束时(例如程序运行完毕),才会将它刷新到磁盘(也就是写到磁盘或是其它地方)。”。但是我所写的那个小程序在程序执行完毕之后,依然没有输出,这是为啥呢?是此时在缓冲区中的数据丢失呢?还是在缓冲区中的数据还是在等待啥事情的发生,才能输出数据?
发表于 2011-11-17 10:41:39 | 显示全部楼层
这个单单靠perl有可能是解释不了的

要去查系统I/O文档了
 楼主| 发表于 2011-11-17 13:16:39 | 显示全部楼层
回复 8# 射门靴


    我也感觉到这个可能和操作系统的IO有关
 楼主| 发表于 2011-11-17 14:34:22 | 显示全部楼层
回复 2# 爱IC

刚才我又试了一下,原因似乎不是你所说的那样,而是,我针对同一个文件两次打开句柄,且这两个句柄的方向不一致,前一个句柄是写句柄,后一个句柄是写句柄,这样前一个句柄如果没关闭的话,后一个句柄就无法操作!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-19 11:51 , Processed in 0.020476 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表