免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1777 | 回复: 7
打印 上一主题 下一主题

[求助+大惑不解]“\n”的问题。。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-08-03 16:24 |只看该作者 |倒序浏览
文本文件格式
$type1\t$type2\t\n等等,若干行。

读取程序

  1.     $filetoopen = "文件名字";
  2.     if (-e $filetoopen) {
  3.         open(FILE, "$filetoopen");
  4.         flock(FILE, 2);
  5.         sysseek(FILE, 0, 0);
  6.         sysread(FILE, my $myfiledata,(stat(FILE))[7]);
  7.         flock(FILE, 8);
  8.         close(FILE);

  9.         chomp $myfiledata;
  10.         $myfiledata = "$myfiledata\n";
  11.   
  12.         my $key =0;
  13.         $key =1 if ($myfiledata =~s/(.+?)\t(.+?)\t\n/);

  14.         print $key;
  15.         print $myfiledata;

  16.     }
复制代码

$key 的数值居然是0!!! 文件不含\n吗?
换成 $key =1 if ($myfiledata =~s/(.+?)\t(.+?)\t/); 倒是可以。。
但是可以print 出来 $myfiledata 的数值。

代码

  1.     $filetoopen = "文件名字";
  2.     if (-e $filetoopen) {
  3.         open(FILE, "$filetoopen");
  4.         flock(FILE, 2);
  5.         sysseek(FILE, 0, 0);
  6.         sysread(FILE, my $myfiledata,(stat(FILE))[7]);
  7.         flock(FILE, 8);
  8.         close(FILE);

  9.         chomp $myfiledata;
  10.         my @myfiledata=split(/\n/,$myfiledata); # 添加的
  11.         $myfiledata = join("\n",@myfiledata); # 添加的
  12.         $myfiledata = "$myfiledata\n";
  13.   
  14.         my $key =0;
  15.         $key =1 if ($myfiledata =~s/(.+?)\t(.+?)\t\n/);

  16.         print $key;
  17.         print $myfiledata;

  18.     }
复制代码

居然就一切正常??为什么?汗。。  
难道sysread出来的数值不能用正则判断?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-08-03 17:26 |只看该作者

[求助+大惑不解]“\n”的问题。。

$key =1 if ($myfiledata =~s/(.+?)\t(.+?)\t/);
不對吧..
$key =1 if ($myfiledata =~m/(.+?)\t(.+?)\t/);
才對...

论坛徽章:
0
3 [报告]
发表于 2004-08-03 19:07 |只看该作者

[求助+大惑不解]“\n”的问题。。

原帖由 "apile" 发表:
$key =1 if ($myfiledata =~s/(.+?)\t(.+?)\t/);
不對吧..
$key =1 if ($myfiledata =~m/(.+?)\t(.+?)\t/);
才對...

不就是判断是否含有(.+?)\t(.+?)\t的模式麽   若是这样m也不必了

论坛徽章:
0
4 [报告]
发表于 2004-08-03 22:07 |只看该作者

[求助+大惑不解]“\n”的问题。。


手误。换成m 结果一样。。:(

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2004-08-04 08:38 |只看该作者

[求助+大惑不解]“\n”的问题。。

我懷疑你的第一行..格式不對...
改用
$key =1 if ($myfiledata =~m/(.+?)\t(.+?)\t/s);
就可以了...

论坛徽章:
0
6 [报告]
发表于 2004-08-04 11:08 |只看该作者

[求助+大惑不解]“\n”的问题。。

谢谢:)
但是其实我的目的是检查 文章中是否有“\t\n”存在呀。。
这个小程序是个Demo 而已,我是测试中发现 无法在读取的中间找到"\n",所以写了这个程序测试,结果测试结果很困惑。。。
取消对\n的检查,当然就正常了。
理论上 sysread 读取应该不需要定义 $/ 吧。无奈之下,偶改他也是一样。汗:)

加上s参数和不加结果一样。
附上完整代码。请指教

  1. #!/usr/bin/perl

  2. $|++;
  3. $thisprog = "t1.cgi";

  4. print "Content-type: text/html\n\n";

  5. &getmylist();
  6. exit;

  7. sub getmylist {
  8.     $filetoopen = "D:/data/list9.txt";
  9.     if (-e $filetoopen) {
  10.         open(FILE, "$filetoopen");
  11.         flock(FILE, 2) if ($OS_USED eq "Unix");
  12.         sysseek(FILE, 0, 0);
  13.         sysread(FILE, my $myfiledata,(stat(FILE))[7]);
  14.         close(FILE);

  15.         chomp $myfiledata;

  16. #        my @myfiledata=split(/\n/,$myfiledata); # 添加的
  17. #        $myfiledata = join("\n",@myfiledata); # 添加的

  18.         $myfiledata = "$myfiledata\n";

  19.   
  20.         my $key =0;
  21.         $key =1 if ($myfiledata =~m/(.+?)\t(.+?)\t\n/s); # 有检查\n 存在,失败了,key=0
  22. #        $key =1 if ($myfiledata =~m/(.+?)\t(.+?)\t/s); # 取消检查\n 存在,成功

  23.         print $key;
  24. #        print $myfiledata;


  25.     }
  26.     else { print "打开文件出错"; }

  27. }

复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
7 [报告]
发表于 2004-08-04 21:32 |只看该作者

[求助+大惑不解]“\n”的问题。。

windows下..結束符號是
\r\n...
所以比對不到
\t\n是正常的...

论坛徽章:
0
8 [报告]
发表于 2004-08-04 22:41 |只看该作者

[求助+大惑不解]“\n”的问题。。

谢谢了:)也发现原因了。汗。。
本来文本是FreeBSD下的,但是测试环境是Win2000。。
谢谢apile 的帮忙。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP