解答:一个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 常用命令
问题: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 常用命令
相关文章推荐
- Python操作Oracle数据库时出现ImportError: libclntsh.so.10.1: cannot open shared object file: No such file or
- 安装VisualDSP++出现Install cannot proceed.Could not find XML file or the XML file may be corrupted!
- oponcv运行时无法找到、打开PDB文件(cannot find or open pdb file),程序已经退出,返回值-1(0xffffff)
- VS2010++ 出现 Cannot find or open the PDB file 的错误解决办法
- centos7 安装 gflags 出现config.status: error: cannot find input file: src/Makefile.in
- 虚拟机黑屏,日志文件vmware显示DictionaryLoad: Cannot open file "C:\Users\weihy\AppData\Roaming\VMware\config.ini
- 解决交叉编译应用程序出现的错误“ld: cannot find crtend_so.o: No such file or directory”错误
- Python操作Oracle数据库时出现ImportError: libclntsh.so.10.1: cannot open shared object file: No such file or
- VS2010 C++ Debug 出现错误“Cannot find or open the PDB file”(续)
- Web项目Java读取Properties文件出现“The system cannot find the file specified”解决
- python3.5连接MySQL出现Cannot open include file: 'config-win.h': No such file or directory 错误解决办法
- VS2010 C++ Debug 出现错误“Cannot find or open the PDB file”
- 安装VisualDSP++出现Install cannot proceed.Could not find XML file or the XML file may be corrupted!
- [解决] DreamWeaver MX 2004 打开一个已存在的未指定编码的文件时出现乱码
- 一个操作配置文件(Reg,ini,XML)的类
- 预编译头文件出错(Cannot open precompiled header file: 'Debug/1.pch': No such file or directory)
- Cannot find SS.INI file for user *** 解决方法 for VSS2005
- Delphi TIniFile 类 操作ini配置文件
- ubunt 编写C程序时 出现libmysqlclient.so.15: cannot open shared object file: No such file or directory
- Delphi TIniFile 类 操作ini配置文件