您的位置:首页 > 其它

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

2016-09-14 12:34 549 查看
需求:perl 脚本动态的获取配置文件,将有exception的异常大文件in.log 抓取[b]exception异常出来写入一个小文件out.log中[/b]

问题: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 常用命令
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐