1. 程式人生 > >PAM 2500 熒光資料匯出資料整合指令碼

PAM 2500 熒光資料匯出資料整合指令碼

PAM 2500匯出的資料是以分號為分隔符的純文字,且一次測量單獨儲存在檔案裡,預設以日期加括號裡的序號為檔名,我們只需要其中的Fo、Fm和最後一次的資料。

原始資料如下:

 1 "t";"Date";"Time";"No.";"ML";"Temp.";"PAR";"F";"Fm'";"~Fo'";"Y(II)";"Y(NPQ)";"Y(NO)";"NPQ";"qN";"qP";"qL";"ETR";"";
 2        7;28.12.18;17:46:40;Type: IC 
 3        9;28.12.18;17:46:41;default_90.par*
 4        7
;28.12.18;17:46:40;1;2; 0.0;0;Fo: 0.548;Fm: 3.018 5 7;28.12.18;17:46:40;1;2; 0.0;0;0.548;3.018;0.548;0.818;0.000;0.182;0.000;0.000;1.000;1.000; 0.0;; 6 27;28.12.18;17:47:00;2;2; 0.0;319;2.926;2.979;0.547;0.018;0.013;0.970;0.013;0.071;0.023;0.005; 2.4;; 7 47;28.12.18;17:47:20;3;2; 0.0;319;2.733;2.891;0.544;0.055;0.040;0.906;0.044;0.182;0.078;0.025
; 7.3;; 8 67;28.12.18;17:47:40;4;2; 0.0;319;2.724;2.797;0.540;0.026;0.071;0.903;0.079;0.279;0.041;0.015; 3.5;; 9 87;28.12.18;17:48:00;5;2; 0.0;319;2.563;2.661;0.535;0.037;0.114;0.849;0.134;0.274;0.055;0.019; 4.9;; 10 107;28.12.18;17:48:20;6;2; 0.0;319;2.370;2.529;0.529;0.063;0.152;0.785;0.193;0.273;0.089;0.027; 8.4;; 11 127
;28.12.18;17:48:40;7;2; 0.0;319;2.168;2.396;0.523;0.095;0.186;0.718;0.260;0.299;0.132;0.040; 12.7;; 12 147;28.12.18;17:49:00;8;2; 0.0;319;1.992;2.293;0.518;0.131;0.209;0.660;0.316;0.325;0.181;0.057; 17.6;; 13 167;28.12.18;17:49:20;9;2; 0.0;319;1.848;2.213;0.514;0.165;0.223;0.612;0.364;0.357;0.230;0.078; 22.1;; 14 187;28.12.18;17:49:40;10;2; 0.0;319;1.729;2.157;0.511;0.198;0.229;0.573;0.399;0.377;0.278;0.099; 26.6;; 15 207;28.12.18;17:50:00;11;2; 0.0;319;1.642;2.124;0.509;0.227;0.229;0.544;0.421;0.394;0.322;0.123; 30.4;; 16 221;28.12.18;17:50:14;File: I_181228_174633.PWS

我們需要以提取第3行和第15行的資料整合成一個新的檔案,我們把所有需要整合的檔案放在同一資料夾下,執行指令碼如下:

use strict;
use warnings;


my @dir;
my @myfiles;
open OUT, ">result.csv";
opendir (DIR, "./") or die "cannot open this directory";
@dir = readdir DIR;
foreach my $file (@dir){
    if ($file =~ /.*\.CSV/){
        push @myfiles, $file;
    }
}
close(DIR);

foreach my $file (@myfiles){
    open IN, "<".$file or die "cannot open $file";
    my @lines = <IN>;
    chomp @lines;
    my @F_start = split(/;/, $lines[4]);
    my @F_end = split(/;/, $lines[15]);
    print OUT $file.",".substr($F_start[7],4,).",".substr($F_start[8],4,).",".join(",",@F_end)."\n";
    close(IN);
}

close(OUT);

手動加入表頭行即可,新結果如下:

1 FileName,No,Fo,Fv,Fv/Fm,t,Date,Time,No.,ML,Temp.,PAR,F,Fm',~Fo',Y(II),Y(NPQ),Y(NO),NPQ,qN,qP,qL,ETR
2 20181227_2(7).CSV,NX08,0.493,2.65,0.813962264,207,27.12.18,20:07:20,11,2,0,444,1.466,2.036,0.467,0.28,0.167,0.553,0.302,0.325,0.391,0.155,52.2
3 20181227_2(8).CSV,NX08,0.512,2.751,0.81388586,207,27.12.18,20:11:29,11,2,0,444,1.652,2.169,0.488,0.238,0.161,0.601,0.268,0.297,0.329,0.119,44.4
4 20181227_2(9).CSV,NX08,0.502,2.596,0.806625578,207,27.12.18,20:15:46,11,2,0,444,1.502,1.982,0.474,0.242,0.179,0.579,0.31,0.327,0.341,0.13,45.2
5 20181228(13).CSV,NX09,0.499,2.817,0.8228612,207,28.12.18,17:26:43,11,2,0,319,1.296,2.091,0.47,0.38,0.16,0.46,0.347,0.34,0.519,0.224,50.9
6 20181228(14).CSV,NX09,0.512,2.713,0.811279027,207,28.12.18,17:30:48,11,2,0,319,1.523,2.111,0.486,0.279,0.16,0.561,0.285,0.314,0.389,0.154,37.3
7 20181228(15).CSV,NX09,0.505,2.823,0.821112292,207,28.12.18,17:35:16,11,2,0,319,1.371,2.21,0.481,0.38,0.135,0.486,0.277,0.299,0.516,0.22,50.9

隨後可以匯入到R中進行統計學分析,比如求各組的平均值,如下

mean <- tapply(data$Fv.Fm,data$No,mean)