perl 提取信息 讲解下程序
#!/usr/bin/perlrequire'jcode.pl';useText::ChaSen;Text::ChaSen::getopt_argv('chasen-pe...
#!/usr/bin/perl
require 'jcode.pl';
use Text::ChaSen;
Text::ChaSen::getopt_argv('chasen-perl','-c');
my $dir = "data";
opendir(DIR,$dir);
@files = sort grep (!/^\./,readdir(DIR));
closedir(DIR);
foreach my $file (@files){
&readfile($dir,$file);
}
sub readfile{
my ($dir,$file) = @_;
open(FF,$dir."/".$file) or die "$file not found";
my %count = ();
while(<FF>){
chomp;
my $line = $_;
my $eucline = &jcode::euc($line);
my $code = Text::ChaSen::sparse_tostr($eucline);
my @a = split(/[\r\n]/,$code);
for(my $i=0;$i<@a;$i++){
my @w = split(/[\s]+/,$a[$i]);
if ((0<$w[3])&&($w[3]<=40)&&($w[3] != 19)){
$count{$w[0]}++;
}
} 展开
require 'jcode.pl';
use Text::ChaSen;
Text::ChaSen::getopt_argv('chasen-perl','-c');
my $dir = "data";
opendir(DIR,$dir);
@files = sort grep (!/^\./,readdir(DIR));
closedir(DIR);
foreach my $file (@files){
&readfile($dir,$file);
}
sub readfile{
my ($dir,$file) = @_;
open(FF,$dir."/".$file) or die "$file not found";
my %count = ();
while(<FF>){
chomp;
my $line = $_;
my $eucline = &jcode::euc($line);
my $code = Text::ChaSen::sparse_tostr($eucline);
my @a = split(/[\r\n]/,$code);
for(my $i=0;$i<@a;$i++){
my @w = split(/[\s]+/,$a[$i]);
if ((0<$w[3])&&($w[3]<=40)&&($w[3] != 19)){
$count{$w[0]}++;
}
} 展开
1个回答
展开全部
#!/usr/bin/perl
require 'jcode.pl';#引用jcode.pl这个脚本中的内容,可以大致理解为和c中的include差不多,也就是使用jcode.pl中的代码
use Text::ChaSen; #使用Text这个包中的ChaSen
Text::ChaSen::getopt_argv('chasen-perl','-c');
my $dir = "data";
opendir(DIR,$dir);#打开文件目录句柄
@files = sort grep (!/^\./,readdir(DIR)); #读取目录内容,并且找出其中非. 和..的文件名称,其中.和 ..表示当前目录和上一级目录,然后对打开的目录内文件名排序
closedir(DIR); #关闭文件句柄
foreach my $file (@files){
&readfile($dir,$file); #调用readfile函数
}
sub readfile{
my ($dir,$file) = @_;#将传递进入的参数 目录名称和文件名保存到$dir 和$file两个变量
open(FF,$dir."/".$file) or die "$file not found";#打开目录和文件名组合成的文件,如果打开失败则提示文件没有找到
my %count = ();
while(<FF>){
chomp;
my $line = $_;
my $eucline = &jcode::euc($line); #这个因为是引用的jcode.pl中的函数,不清楚是什么功能
my $code = Text::ChaSen::sparse_tostr($eucline);#这个函数我没有用过,不清楚是什么功能,不过看上去应该是将什么东西转换为字符串
my @a = split(/[\r\n]/,$code); #将得到的字符串按照换行进行分割并存到数组
for(my $i=0;$i<@a;$i++){
my @w = split(/[\s]+/,$a[$i]);#将按行分割之后的信息再按照空格进行分割,也就是得到每列的信息
if ((0<$w[3])&&($w[3]<=40)&&($w[3] != 19)){#如果第四列所得到的数组大于0且小于40并且不等于19,那么以$w[0]为键的hash就加1
$count{$w[0]}++;
}
}
}
因为不清楚其中有几个函数的功能,所以不好意思有的地方就不是太清晰,不过如果你能补充那几个函数的功能,我想这个脚本还是很好解释的。
不过看上去@w应该属于文件信息,猜测是统计文件大小小于40字节且大于0字节并且不为19字节的文件有哪些。不过如果能够告知一下那几个函数功能就更清楚啦。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询