免费注册 查看新帖 |

Chinaunix

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

perl文件添加内容出现奇怪现象 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-03 08:18 |只看该作者 |倒序浏览
程序目的:给一段文件内容加一些重要的标题头。

程序主体:
#!bin/usr/perl -w
@vfloorslist = `ls *vFloors`;
foreach my $vfloors(@vfloorslist){
        chomp $vfloors;
        printf "-" x 20 . "$vfloors" . "-" x 20 . "\n";
        printf "processing......\n";
        rename($vfloors,"tmp_$vfloors" or die $!;
        open(VFLOORS, "tmp_$vfloors" or die $!; #打开源文件
        foreach my $line(<VFLOORS>{
                chomp $line;
                `cp ./template .\/$vfloors`; #将模板文件重命名为目标文件名
                open(NEWVFLOORS, ">>", "$vfloors" or die $!;   #打开目标文件
                printf $line;  #在屏幕上打出源文件里的内容
                printf NEWVFLOORS $line;  #往目标文件里面输入源文件内容
        }
        close(NEWVFLOORS);
        close(VFLOORS);
        `rm ./tmp_$vfloors`;
        printf "success!\n";
}

上文提到的源文件
~v varFloor1
<Variance> 39
2.730452e-01 1.637381e-01 2.028152e-01 2.542861e-01 4.813456e-01 6.348009e-01 3.601173e-01 7.293478e-01 2.343239e-01 2.743990e-01 3.023584e-01 2.490072e-01 8.913501e-01 5.710168e-03 7.239614e-03 8.393405e-03 1.068635e-02 1.516851e-02 1.979875e-02 1.426981e-02 1.507906e-02 1.395736e-02 1.354895e-02 1.311529e-02 1.170984e-02 1.380213e-02 8.324237e-04 1.195016e-03 1.457762e-03 1.915888e-03 2.514630e-03 3.217181e-03 2.602820e-03 2.784498e-03 2.696389e-03 2.701437e-03 2.444789e-03 2.196949e-03 1.727028e-03

上文提到的模板文件
~o
<STREAMINFO> 1 39
<VECSIZE> 39<NULLD><MFCC_D_A_0><DIAGC>

奇怪的现象:
大家可以看到,应该是屏幕上打出什么,最后的文件里面就应该有什么(除了模板文件原来包含的内容外)。但是最后的问题却是,源文件中的头两行没有被打入最后的文件(即这两行:~v varFloor1 <Variance> 39),但是在屏幕上却能被打印出来,请问大家这是怎么回事?

最后结果:
屏幕:
~v varFloor1
<Variance> 39
2.730452e-01 1.637381e-01 2.028152e-01 2.542861e-01 4.813456e-01 6.348009e-01 3.601173e-01 7.293478e-01 2.343239e-01 2.743990e-01 3.023584e-01 2.490072e-01 8.913501e-01 5.710168e-03 7.239614e-03 8.393405e-03 1.068635e-02 1.516851e-02 1.979875e-02 1.426981e-02 1.507906e-02 1.395736e-02 1.354895e-02 1.311529e-02 1.170984e-02 1.380213e-02 8.324237e-04 1.195016e-03 1.457762e-03 1.915888e-03 2.514630e-03 3.217181e-03 2.602820e-03 2.784498e-03 2.696389e-03 2.701437e-03 2.444789e-03 2.196949e-03 1.727028e-03

目标文件:
~o
<STREAMINFO> 1 39
<VECSIZE> 39<NULLD><MFCC_D_A_0><DIAGC>
2.730452e-01 1.637381e-01 2.028152e-01 2.542861e-01 4.813456e-01 6.348009e-01 3.601173e-01 7.293478e-01 2.343239e-01 2.743990e-01 3.023584e-01 2.490072e-01 8.913501e-01 5.710168e-03 7.239614e-03 8.393405e-03 1.068635e-02 1.516851e-02 1.979875e-02 1.426981e-02 1.507906e-02 1.395736e-02 1.354895e-02 1.311529e-02 1.170984e-02 1.380213e-02 8.324237e-04 1.195016e-03 1.457762e-03 1.915888e-03 2.514630e-03 3.217181e-03 2.602820e-03 2.784498e-03 2.696389e-03 2.701437e-03 2.444789e-03 2.196949e-03 1.727028e-03

论坛徽章:
1
CU大牛徽章
日期:2013-03-14 14:08:55
2 [报告]
发表于 2013-03-03 14:37 |只看该作者
看你写的 代码。。真心乱。。。
1.   perl里面 尽量少用 系统相关的指令。
linux       perl
cp  ----> copy  
rm -----> unlink
2.   #! .....     ,是perl的路径  linux下用which  perl查看,或者 直接写perl也行: #! /usr/bin/perl   , #! perl
2.   可以少用printf 用print  ,printf主要用于格式输出
3.  循环里面打开了那么多  open(NEWVFLOORS, ">>", "$vfloors")or die $!;   咋就忘了关闭呢。
4.  在你 每次打开$vfloors之前,为啥又用template覆盖掉他呢。。。。,所以。。不止头两行没有输出到目标文件,是只能保存源文件最后一行(你的问题就出现在这里)
  1. #! /usr/bin/perl

  2. use strict;
  3. use warnings;

  4. my @files = glob "*vFloors";

  5. for (@files) {
  6.     add_template_to('./template', $_);
  7. }

  8. sub add_template_to {
  9.     my $template = shift || "";
  10.     my $file = shift || "";

  11.     # 读取源文件行
  12.     open my $SRC, "<$file" or die $!;
  13.     my @src_lines = <$SRC>;
  14.     close $SRC;
  15.     # 读取模板的行
  16.     open my $TPL, "<$template" or die $!;
  17.     my @template_lines = <$TPL>;
  18.     close $TPL;
  19.     # 获取新文件的行
  20.     my @dst_lines = @template_lines;
  21.     push @dst_lines, @src_lines;
  22.     # 写入文件中
  23.     open my $DST, ">$file" or die $!;
  24.     print $DST @dst_lines;
  25.     close $DST;
  26. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP