解答:一个perl操作config.ini的出现的 cannot find file or dirctionary,可明明文件存在

81 篇文章 2 订阅

需求:perl 脚本动态的获取配置文件,将有exception的异常大文件in.log 抓取exception异常出来写入一个小文件out.log中

问题:perl操作一个config.ini文件读取配置infilepath和outfilepath,perl脚本一直报找不到can not find file or dirctionary


perl代码如下:

#!/usr/bin/perl -W
use strict;
use warnings;

my $configpath = "D:/Users/KONGJUNLONG280/workspace/PerlLog/config.ini";
my $infilepath = ""; 
my $outfilepath = "";
my $findkey = "JobExecutionException,NullPointerException,ClassCastException,SQLIntegrityConstraintViolationException,NullPointerException,ClassCastException,IllegalArgumentException,ArithmeticException,ArrayStoreException,IndexOutOfBoundsException,NegativeArraySizeException,NumberFormatException,SecurityException,UnsupportedOperationException";
our $system_name = "";
my @findkeyArray;
my $lineFlag =0;
my $i=0;
my $temp="";

my $session="config";
my $configinfilepath="infilepath";
my $configoutfilepath="outfilepath";
my $flag=0;
my $k;
my $t=1;

eval{

open(CONFIG,"<",$configpath)||die "cannot open the file: $!\n";
my @linelist=<CONFIG>;
close CONFIG;

foreach my $eachline(@linelist){
   #print $eachline;
   $i = 0;
   $lineFlag = 0;
   $temp=0;
   
   if (my ($k,$v) = $eachline =~ /(\w+)=(.*)/){
      if($k eq $configinfilepath){
        print "$k ......$v\n";
        $infilepath = $v;
      }
      if($k eq $configoutfilepath){
      print "$k ......$v\n";
      $outfilepath = $v;
      }
   }
   
   if($t%3==0 && $t != 1){
    #print "one session\n";
    #查询数据记录
@findkeyArray=split(/,/,$findkey); 
eval{
open(FILE,"<",$infilepath)||die "cannot open the filepath: $!\n";
};
if ($@ ne ''){
     print "error >> ".$@."\n";
}

while (my $line =<FILE>){
   print "scan row ".$i."\n";
   
for my $key (@findkeyArray) {
if($line =~ /$key/g){
   $lineFlag = $i; 
}
    }
   
    if($i<($lineFlag+5) && $i>5){
$temp = $temp.$line;
}
elsif($i==($lineFlag+5))
{
#wirte a file  
open(FH, ">>",$outfilepath) or die $!; 
print FH "$temp\n";#向文件写入内容
close(FH);
}
else{
$temp ="";
}

$i = $i + 1; 
}
close FILE;
   }
   $t = $t + 1;
}
};
if ($@ ne ''){
      die "error -->> ".$@."\n";
}


config.ini文件如下:

[config1]
infilepath=/workspace/PerlLog/Logs/pcms.log
outfilepath=/workspace/PerlLog/Logs/out1.log
[config2]
infilepath=/workspace/PerlLog/Logs/pcms.log
outfilepath=/workspace/PerlLog/Logs/out2.log
[config3]
infilepath=/workspace/PerlLog/Logs/pcms.log
outfilepath=/workspace/PerlLog/Logs/out3.log


发现问题:

-rw-r--r-- 1 oracle usr01      1596 Sep 14 12:22 out1.log
-rw-r--r-- 1 oracle usr01       798 Sep 14 12:19 out1.log?

文件后面有?号,怎么会这样?肯定是文件格式不对了?config.ini里面明明是out1.log


解决方案:

参考:http://blog.csdn.net/love__coder/article/details/7693390


在window平台下,写好shell脚本文件,迁移到linux平台,赋过可执行权限,执行该sh文件,却提示No such file or directory。ls 了下,确实有该文件,怎么会事呢,

难道是文件格式兼容性问题?用vim打开该sh文件,输入:

[plain]  view plain  copy
  1. :set ff  

回车,显示fileformat=dos,重新设置下文件格式:

[plain]  view plain  copy
  1. :set ff=unix  

  保存退出:

[plain]  view plain  copy
  1. :wq  

    再执行,竟然可以了。这个事情又给我提了次醒,程序尽量在linux下编写,迁移时,也许会少很多问题。

    vim的用法,可以参阅以前的blog:vim 常用命令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值