免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2829 | 回复: 9

初学者请教高手们一个更新另一文件的问题 [复制链接]

论坛徽章:
0
发表于 2009-12-23 18:04 |显示全部楼层
5可用积分
请教各位高手:
      我是一个初学perl者,学习用的书是《perl语言入门》(即小骆驼第五版)。在学到正则表达式中更新文件这一节时,不知道为什么总是更新不了另一个文件中的内容。所以向各位高手们求教,以下是代码!
#!/usr/bin/perl -w
use strict;

chomp(my $date = 'date');
$^I = "*.bak";

while (<> {
    s/^Author:.*/Randal L. Schwartx/;
    s/^Phone:.*\n//;
    s/^Date:.*/Date: $date/;
    print ;
}
另一文件(fred03.dat)中的内容是:
Program name:granite
Author:Gilbert Bates
Company:RockSoft
Department:R&D
Phone:+1 503 555-0095
Date:Tues March 9,2004
Version:2.1
Size:21K
Status:Final beta

试了几次不行。后来就在第一个程序中加入了 open LDD,"fred03.dat";,然后在while的<>中加入了LDD即 “while(<LDD>,下面是代码:
#!/usr/bin/perl -w
use strict;

open LDD,"fred03.dat";

chomp(my $date = 'date');
$^I = "*.bak";

while (<LDD> {
    s/^Author:.*/Randal L. Schwartx/;
    s/^Phone:.*\n//;
    s/^Date:.*/Datedate/;
    print ;
}
改完后可以在命令行中显示,但是修改不了另一个文件中的内容,不知道是那里出错了。还望大家予以帮助!谢谢大家了。

最佳答案

查看完整内容

你的perl程序名是什么? 如果叫a.pl的话就直接在命令行里输入perl a.pl fred03.dat ,这样就ok了

论坛徽章:
0
发表于 2009-12-23 18:04 |显示全部楼层
你的perl程序名是什么?
如果叫a.pl的话就直接在命令行里输入perl a.pl fred03.dat ,这样就ok了

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
发表于 2009-12-23 19:24 |显示全部楼层
执行有什么提示?

论坛徽章:
0
发表于 2009-12-23 20:43 |显示全部楼层

回复 #2 blackold 的帖子

没有提示。我加上文件句柄后可以在命令提示符窗口显示。但是修改不了另一个文件。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
发表于 2009-12-23 21:14 |显示全部楼层

回复 #3 zhangyu63 的帖子

修改不了还是不按你所期望的进行修改?
chomp(my $date = `date`);

论坛徽章:
0
发表于 2009-12-23 21:20 |显示全部楼层
提示  采用插入代码的方式,免得出现图像 影响查看代码

另外 你更新另一个文件是什么意思哦, 你总得写回去撒

论坛徽章:
0
发表于 2009-12-24 02:22 |显示全部楼层
原来的程序都不需要改的,
注意如果fred03.dat和你的perl程序不是一个目录下的话就要加上该文件相对程序的路径了

论坛徽章:
0
发表于 2009-12-24 10:37 |显示全部楼层
  1. #
  2. !/usr/bin/perl -w
  3. use strict;



  4. chomp(my $date = `date`);
  5. while (<>) {
  6.     $^I = "*.bak";
  7.     s/^Author:.*/Randal L. Schwartx/;
  8.     s/^Phone:.*\n//;
  9.     s/^Date:.*/Date: $date/;
  10.     print ;
  11. }
复制代码


./scriptname fred03.dat
试一下这个
注意运行后修改后的文件是fred03.dat
fred03.dat.bak与源文件内容相同

[ 本帖最后由 lth0721 于 2009-12-24 10:40 编辑 ]

论坛徽章:
0
发表于 2009-12-24 13:45 |显示全部楼层

感谢大家的热心帮助。

非常感谢大家的热心帮助,我已经按六楼的方法,顺利的用代码修改了另一个文件。我还要看一看怎样给分大家。我真是一个菜鸟哦!

论坛徽章:
0
发表于 2009-12-24 14:09 |显示全部楼层

回复 #9 zhangyu63 的帖子

以后要仔细看书啊。。呵呵 我也是菜鸟
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP