气相PLFA原始数据整合处理脚本

很多仪器导出的数据格式可能不是包含着奇奇怪怪的编码,这给写正则脚本带来了很大困难 binmode IN, ':encoding(UTF-8)'  这个命令进行处理编码,保证输入和输出的正确。

此外,因为需要遍历两层目录下的所有文件,发现了glob这个强大的命令。

 

use strict;
use List::Util qw/sum/; #为了求和
#use warnings; #忽略警告吧,囧

my @dir;
my @myfiles;
open OUT, ">result.txt";
binmode OUT, ':encoding(UTF-8)';
#opendir (DIR, "./") or die "cannot open this directory";
my @ids = (1..37);
print OUT "ID    ".join("    ",@ids)."    sum\n";

my $dir = ("./*/*/report.txt");

my @files = glob ($dir);

foreach my $file (@files){
    open IN, "<".$file;
    binmode IN, ':encoding(UCS-2LE)'; #奇奇怪怪的编码,唉
    my @lines = <IN>; 
    chomp @lines;
    my $ID = $lines[1];#这种编码的正则无能为力,只好直接提取第二行了
    chop $ID; #chomp在此处无效,可能是因为编码问题,所以选择chop
    my @array = ();
    print OUT $ID."    ";
    foreach (@lines){
        if ($_ =~ m/\s+(\d+\.\d+)\s+(\d{1,2})\s+$/ ){
            $array[$2-1] = $1;
        }elsif($_ =~ m/\s+(-)\s+(\d{1,2})\s+$/ ){
            $array[$2-1] = $1;
        }
    }
    my $sum = sum(@array);
    $array[37] = $sum; #第38列为求和,带有奇怪编码的汉字太难搞定了
    print OUT join("    ", @array)."\n";
    
    close(IN);

}

print $#files;
close(OUT);

 

posted @ 2019-01-21 15:12  LiuLyle  阅读(406)  评论(0编辑  收藏  举报