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

    xiaoxiao2022-06-28  33

    需求: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 :set ff   回车,显示fileformat=dos,重新设置下文件格式:

    [plain]  view plain  copy :set ff=unix     保存退出:

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

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

    转载请注明原文地址: https://ju.6miu.com/read-1124392.html

    最新回复(0)