- 论坛徽章:
- 12
|
本帖最后由 523066680 于 2017-06-21 18:41 编辑
- =info
- code by 523066680
- 2017-06
- =cut
- #!/usr/bin/perl
- use strict;
- use IO::Handle;
- STDOUT->autoflush(1);
- our $SRC = "A.txt";
- our $DST = "Final.txt";
- our %letter;
- our @group = ('a'..'z', 'A'..'Z');
- our $wd = "./tempfolder";
- mkdir $wd if (not -e $wd);
- ANALYSE_AND_EXPORT:
- {
- my %FH;
- #提前准备多个文件句柄
- grep { open $FH{$_}, ">:raw", "$wd/T${_}.txt" or die "$!" } @group;
- open READ, "<:raw", $SRC or die "$!";
- while ( my $line = <READ> )
- {
- if ($line=~/([a-zA-Z])/)
- {
- $letter{$1} = 0 if ( not exists $letter{$1} );
- $letter{$1}++;
- select $FH{$1};
- print $line;
- }
- }
- #清理所有文件句柄
- grep { close $FH{$_} } @group;
- close READ;
- select STDOUT;
- }
- COLLECT_DATA:
- {
- my $RESULT;
- my $TempFH;
- open $RESULT, ">:raw", $DST or die "$!";
- #按出现的次数排列出优先顺序
- my @rank = sort_byValue(\%letter);
- for my $name ( @rank )
- {
- print "Reading F$name.txt ... \n";
- open $TempFH, "<:raw", "$wd/T$name.txt" or die "$!";
- while (my $line = <$TempFH>)
- {
- print $RESULT $line;
- }
- close $TempFH;
- }
- print "Please check $DST\n";
- }
- sub sort_byValue
- {
- my $ref = shift;
- my @arr;
- @arr = reverse sort map { $ref->{$_} .",". $_ } keys %$ref;
- my ($char, $times);
- for (@arr)
- {
- ($times, $char) = split(",", $_);
- print "char: $char, times: $times\n";
- }
- return (map { /,(.)$/; $_ = $1 } @arr);
- }
复制代码
|
|