• 气相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);
  • 相关阅读:
    设计模式 5 —— 工厂模式
    Java 集合系列 14 hashCode
    Java 集合系列 13 WeakHashMap
    java 多线程——quartz 定时调度的例子
    memcached 学习 1—— memcached+spring配置
    vivado SDK之找不到"platform.h"
    ubuntu上第一个hello程序
    FPGA设计中的异步复位、同步释放思想
    异步fifo的Verilog实现
    zedboard上首个驱动实践——Led
  • 原文地址:https://www.cnblogs.com/liulele/p/10298866.html
Copyright © 2020-2023  润新知