perl读取文件夹下的文件

2016-07-12 10:26:42来源:oschina作者:Jones2015人点击

#!usr/bin/perl-w
usestrict;
my$file_name;#文件名
my$num_1;
my$num_2;
my$num_3;
my$num_4;
my@result=qw//;
my$sum=0;
my$print_line;#写文件名以及数据处理结果
my$dir_tree="file_data";#文件夹名
my$file;
my$c_flg1;
my$c_flg2;
my$fi_line;
opendirDR,"$dir_tree"ordie"can'topen$dir_tree:$!";#打开文件夹
#my@file=readdirDR;
my@file=readdir(DR);#读取文件名到列表中
print"@file";
open(out_file,">","out_file.txt");#打开输出结果文件
foreach$file(@file){
$c_flg1=0;
$c_flg2=0;
print"$file/n";
if($file=~//./.?$/){#跳过.和..
print"next";
next;
}
open(in_file,"<","$dir_tree//$file")||die"Can'topen$dir_tree//$file:$!";#打开文件,win下用/
#open(out_file,">","out_file.txt");
while(){
if(/^e.*dn:.(-?/d+/.?/d+)/s+(-?/d+/.?/d+)$/g){#匹配
$num_1=$1;
print"num_1$num_1/n";
$num_2=$2;
$c_flg1=1;
print"num_2$num_2/n";
}
if(/^e.*up:.(-?/d+/.?/d+)/s+(-?/d+/.?/d+)$/g){
$num_3=$1;
print"num_3$num_3/n";
$num_4=$2;
$c_flg2=1;
print"num_4$num_4/n";
}
}
if($c_flg1==1&&$c_flg2==1){#做逻辑处理
$sum=$num_1+$num_3;
push@result,$file;#保存文件名
push@result,$sum;#保存和
print@result;
$sum=$num_2*$num_2-$num_4*$num_4;
push@result,$sum;#保存方差
print@result;
$print_line=join',',@result;
print$print_line;
printout_file"$print_line/n";#结果写到文件
pop@result;
pop@result;
pop@result;

}
closein_file;
}
closeout_file;
closedirDR;

文件夹file_data下有多个文件,将读取到的文件进行匹配,若文件内容含有如下:


exciton_dn: 8.00 4.00


exciton_up: 8.00 3.00


则将第一列数字相加,第二列数字做平方差,结果输出到文件out_file.txt中,输出形式为:


文件名,和,平方差


程序里需要注意的是打开文件:


open(in_file,"<","$dir_tree//$file")||die"Can'topen$dir_tree//$file:$!";#打开文件,win下用/

open (in_file,"<","$dir_tree//$file")如果写成open (in_file,"<",$file)或者open (in_file,"<","$dir_tree/$file")的时候将读取不到文件(这是win下的文件目录所以使用“/",如果是linux下就得使用”/“了,open (in_file,"<","$dir_tree//$file"))。


对于匹配文件中的字符,这里使用的是正则表达式(功能强大,蛮喜欢正则表达式的),代码中所有的print都是为了测试而写的,可以去了。


以上代码运行结果:


a.txt,16,7


b.txt,-10,16


c.txt,-16,7


out_file.txt,-10,16

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台