1) 不能包含|字符
2) 不能包含 [word] 式单词
3) 不能包含两个或以上连续的空格
以下句子句法分析有问题, 删除:
但 正 如 律政司 在 立法会 文件 CB ( 2 ) 8602 -03 ( 02 ) 号 中正 确地 指出 , “ 国家 行为 o 邕 点 与 咨询 文件 所 建议 的 禁制 机制 无关镇 , 尽管 法律 政策 专员 在 首 次 联席 会议 上确 曾 说 过 , 建议 的 证明书 做法 与 第19 条 相似 。 (1459342)
2012年9月6日星期四
学习使用perl
1) 命令行参数
与C/C++类似, 命令行上的参数是存储在内建数组@ARGV中, $ARGV[0]第一个参数, 依此类推. 但与C/C++不同的是$ARGV不包括程序名称, 即$ARGV[0]是用户输入的第一个参数. 程序名称存在$0变量中.
命令行参数的个数可按$#ARGV+1获取
2) 函数参数
函数的参数是存储在数组@_中, $_[0]第一个参数, 依此类推.
函数参数的个数可按$#_+1获取
还可以按shift, pop来从左或从右获取参数, 获取的参数将自动从数组中删除. 例如:
my $para1 = shift;
my $paran = pop;
将获取第一个和最后一个参数, 此时@_数组中只保留了除两者外的其余参数
3) 读写文件
open( MYFILE, "/home/...." ); 打开成功时返回非零值, 否则返回零. 文件名可以使用相对或绝对路径名. MYFILE是文件句柄. 如果是重写(或追加)文件, 使用>(或>>)标记, 例如open(MYFILE, ">/home/...");
在打开文件时通常添加个die语句, open( MYFILE, "/home/.." ) || die( "Can't open the file!\n" );
关闭打开的文件使用 close( MYFILE );
读文件:
$line =;从文件中读取一行并储存至变量$line中, 此时文件指针指向下一行. 也可以使用@array = 把文件的所有行读到@array数组中. 注意, 数组的每项会包括最末的换行符.
例如:
while( $line = <MYFILE>)
{
printf( $line );
}
写文件:
print MYFILE ("Hello.\n");
4) 一个统计单词个数并输出频率最高的单词 (感谢二师兄提供)
5) 读写gz文件
#!/usr/bin/perl -w
use utf8;
use strict;
my $final_file = "combine.data";
my $gzip_fh;
open ($gzip_fh, "| /bin/gzip -c > $final_file.gz") or die "error starting gzip";
binmode(STDOUT,":utf8");
my $lc = 0;
for my $file (@ARGV) {
my $fh;
if ($file =~ /\.gz$/) {
open $fh, "zcat $file|" or die;
} else {
open $fh, "<$file" or die;
}
binmode $fh, ":utf8";
while(<$fh>) {
$lc++;
#exit 0 if ($lc > 100);
print $gzip_fh "$_";
}
close $fh;
}
close $gzip_fh;
6) 文件数组.
my @f_out_array;
my $f_out;
fopen f_out, ">test.txt";
push(@f_out_array, f_out);
print $f_out_array[0] "hello world\n";
##以上print语句编译出错, 改为:
$f_out = $f_out_array[0];
print $f_out "hello world\n";
与C/C++类似, 命令行上的参数是存储在内建数组@ARGV中, $ARGV[0]第一个参数, 依此类推. 但与C/C++不同的是$ARGV不包括程序名称, 即$ARGV[0]是用户输入的第一个参数. 程序名称存在$0变量中.
命令行参数的个数可按$#ARGV+1获取
2) 函数参数
函数的参数是存储在数组@_中, $_[0]第一个参数, 依此类推.
函数参数的个数可按$#_+1获取
还可以按shift, pop来从左或从右获取参数, 获取的参数将自动从数组中删除. 例如:
my $para1 = shift;
my $paran = pop;
将获取第一个和最后一个参数, 此时@_数组中只保留了除两者外的其余参数
3) 读写文件
open( MYFILE, "/home/...." ); 打开成功时返回非零值, 否则返回零. 文件名可以使用相对或绝对路径名. MYFILE是文件句柄. 如果是重写(或追加)文件, 使用>(或>>)标记, 例如open(MYFILE, ">/home/...");
在打开文件时通常添加个die语句, open( MYFILE, "/home/.." ) || die( "Can't open the file!\n" );
关闭打开的文件使用 close( MYFILE );
读文件:
$line =
例如:
while( $line = <MYFILE
{
printf( $line );
}
写文件:
print MYFILE ("Hello.\n");
4) 一个统计单词个数并输出频率最高的单词 (感谢二师兄提供)
#!/usr/bin/perl
#
#
#
use warnings;
use strict;
(scalar(@ARGV) == 3) or die "perl find-top-k-words.pl input-file output-file k-value\n";
my $Source = shift;
my $Target = shift;
my $Top_K = shift;
my ($FIN, $FOUT);
my @ItemList;
my %HashSet;
open $FIN, "<$Source"or die "open file $Source failed\n";
while(<$FIN>)
{
chomp;
@ItemList = split /\s+/;
for(my $i=0; $i<scalar(@ItemList); $i++)
{
$HashSet{$ItemList[$i]} += 1;
}
}
close($FIN);
my $index = 0;
open $FOUT, ">$Target" or die "open file $Target failed\n";
foreach my $key (sort SortByHashValue (keys (%HashSet)))
{
if($index < $Top_K)
{
print $FOUT "$key $HashSet{$key}\n";
}
$index += 1;
}
close($FOUT);
sub SortByHashValue
{
$HashSet{$b} <=> $HashSet{$a};
}
5) 读写gz文件
#!/usr/bin/perl -w
use utf8;
use strict;
my $final_file = "combine.data";
my $gzip_fh;
open ($gzip_fh, "| /bin/gzip -c > $final_file.gz") or die "error starting gzip";
binmode(STDOUT,":utf8");
my $lc = 0;
for my $file (@ARGV) {
my $fh;
if ($file =~ /\.gz$/) {
open $fh, "zcat $file|" or die;
} else {
open $fh, "<$file" or die;
}
binmode $fh, ":utf8";
while(<$fh>) {
$lc++;
#exit 0 if ($lc > 100);
print $gzip_fh "$_";
}
close $fh;
}
close $gzip_fh;
6) 文件数组.
my @f_out_array;
my $f_out;
fopen f_out, ">test.txt";
push(@f_out_array, f_out);
print $f_out_array[0] "hello world\n";
##以上print语句编译出错, 改为:
$f_out = $f_out_array[0];
print $f_out "hello world\n";
订阅:
博文 (Atom)