Leser: 21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# Aufspalten der Parameter (Headerzeile) in Spalten
(@Cruise_Zeile) = split(/ /,$Cruise_Zeile_ges);
for ($i=0;$i<=$#Cruise_Zeile;$i++){
print $i," ",$Cruise_Zeile[$i],"\n";
}
#suchen der wichtigen Parameter (Tiefe, Datum, Wert)
for ($i=0;$i<=$#Cruise_Zeile;$i++) { if ($Cruise_Zeile[$i] =~ /Depth /) {last} }
$D_spalte=$i; ##### TIEFE######
$D_QV=$D_spalte+1;
# die Zeitspalte steht 2 Spalten vorher!
$Z_spalte=$D_spalte-2; ######## DATUM/ZEIT (Format 2009-01-21T11:00:00) #########
# Suchen nach den Parametern
for ($i=$D_QV;$i<=$#Cruise_Zeile;$i++) { if ($Cruise_Zeile[$i] =~ /Temperature/) {$temp_index=$i;last} }
for ($i=$D_QV;$i<=$#Cruise_Zeile;$i++) { if ($Cruise_Zeile[$i] =~ /Salinity/) {$sali_index=$i;last} }
# aus @aktzeile ein 2-dim Feld machen
foreach (@stationsdaten) {
$zz=$_;
@hilf = split(/ /,$zz);
push(@aktzeile , [@hilf] );
}
######Zeitreihen fuer die einzelnen Parameter basteln
# TEMPERATUR
for ($l=0;$l<=$#stationsdaten;$l++) {
# die Zeitreihe der Temperaturen befindet sich in
push(@zr_temp,$aktzeile[$l][$temp_index]);
}
# Schleife durch alle Parameter machen und die QVs setzen
# aktzeile wird immer komplett mit reingegeben
# ZEIT TIEFE WERT
@QV_neu=sub_QC_temp($Z_spalte,$D_spalte,$temp_index);
for ($l=0; $l<=$#stationsdaten; $l++) {$aktzeile[$l][$temp_index+1]=$QV_neu[$l]}; # neue QVs setzen
# wegschreiben der Zeilen,
# vorher wurden die neuen QVs eingesetzt
for ($i=0;$i<$#stationsdaten;$i++) {
for ($l=0;$l<=$#Cruise_Zeile; $l++) {
printf OUT_DATEI "%+s\t", $aktzeile[$i][$l];
}
printf OUT_DATEI "%+s\n", $aktzeile[$#stationsdaten][$#Cruise_Zeile];
}
close OUT_DATEI;
########## ende MAIN #################
#########EINLESEN DES REFERNZDATENSATZ und splitten nach Parameter (er liegt in folgender Struktur vor:)
#Param Tiefe Monat mean N Sigma Min Max
# TEMP; 2; 01; 4.18; 4235; 1.45; 0.73; 7.07
# TEMP; 2; 02; 2.70; 4056; 1.29; 0.14; 5.35
# TEMP; 2; 03; 2.40; 5135; 1.30; 0.19; 5.22
open(EINGANG,'<'.$dest_dir.$filename ) || die "can't open $filename: $!\n";
my ($bla, @klimatol);
while(<EINGANG>) {
$bla++ if /^\s/;
push @klimatol, $_ if $bla;
}
print @klimatol, "\n";
my @datenz=();
foreach (@klimatol) {
chomp $_; $_=~ s/ //g;
($Param,$Tiefe,$Monat,$mean,$N,$sigma,$Min,$Max)=split(/;/);
push(@datenz,join(';',$Param,$Tiefe,$Monat,$mean,$N,$sigma,$Min,$Max, "\n"));
}
close EINGANG;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
### SubRoutines Qualitätsüberprüfung
sub sub_QC_temp {
my $zeit_index=$_[0];
my $tiefe_index=$_[1];
my $wert_index=$_[2];
@QV=();
# Beispiel Temperatur
for ($i=0;$i<=$#stationsdaten;$i++) {
if ($aktzeile[$i][$temp_index] < !!!!!Min-Wert aus Referenzdatensatz || $aktzeile[$i][$temp_index] > !!!!!Max-Wert aus Referenzdatensatz ) { $QV[$i]=4 } else {$QV[$i]=2}
}
return @QV;
}
1
2
3
4
5
Zeit Tiefe Temperatur QV_Temp WertXXX QV_XXX
2009-04-21T01:00:00 2.0 7.160 2
2009-04-21T02:00:00 2.0 7.368 2
2009-04-21T01:00:00 10.0 5.120 2
2009-04-21T02:00:00 10.0 5.140 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# Aufspalten der Parameter (Headerzeile) in Spalten
my @Cruise_Zeile = split /\t/, $Cruise_Zeile_ges;
for my $i (0 .. $#Cruise_Zeile){
print "$i $Cruise_Zeile[$i]\n";
}
#suchen der wichtigen Parameter (Tiefe, Datum, Wert)
my $D_spalte;
for my $i (0 .. $#Cruise_Zeile) {
$D_spalte = $i, last if $Cruise_Zeile[$i] =~ /Depth /;
}
$D_QV = $D_spalte + 1;
# die Zeitspalte steht 2 Spalten vorher!
$Z_spalte = $D_spalte - 2; # DATUM/ZEIT (Format 2009-01-21T11:00:00)
# Suchen nach den Parametern
for my $i ($D_QV .. $#Cruise_Zeile) {
if ($Cruise_Zeile[$i] =~ /Temperature/) {
$temp_index = $i;
last;
}
}
for my $i ($D_QV .. $#Cruise_Zeile) {
if ($Cruise_Zeile[$i] =~ /Salinity/) {
$sali_index = $i;
last;
}
}
# aus @aktzeile ein 2-dim Feld machen
foreach my $zz (@stationsdaten) {
my @hilf = split /\t/, $zz;
push @aktzeile, [@hilf];
}
# Zeitreihen fuer die einzelnen Parameter basteln
# TEMPERATUR
for my $l (0 .. $#stationsdaten) {
# die Zeitreihe der Temperaturen befindet sich in
push @zr_temp, $aktzeile[$l]->[$temp_index];
}
# Schleife durch alle Parameter machen und die QVs setzen
# aktzeile wird immer komplett mit reingegeben
# ZEIT TIEFE WERT
@QV_neu = sub_QC_temp($Z_spalte, $D_spalte, $temp_index);
for my $l (0 .. $#stationsdaten) {
$aktzeile[$l]->[$temp_index+1] = $QV_neu[$l]
} # neue QVs setzen
# wegschreiben der Zeilen,
# vorher wurden die neuen QVs eingesetzt
for my $i (0 .. $#stationsdaten - 1) {
for my $l (0 .. $#Cruise_Zeile) {
printf OUT_DATEI "%+s\t", $aktzeile[$i]->[$l];
}
printf OUT_DATEI "%+s\n", $aktzeile[$#stationsdaten]->[$#Cruise_Zeile];
}
close OUT_DATEI;
########## ende MAIN
# EINLESEN DES REFERNZDATENSATZ und splitten nach Parameter
# (er liegt in folgender Struktur vor:)
#Param Tiefe Monat mean N Sigma Min Max
# TEMP; 2; 01; 4.18; 4235; 1.45; 0.73; 7.07
# TEMP; 2; 02; 2.70; 4056; 1.29; 0.14; 5.35
# TEMP; 2; 03; 2.40; 5135; 1.30; 0.19; 5.22
open my $eingang, '<', $dest_dir.$filename or die "can't open $filename: $!\n";
my ($bla, @klimatol);
while (<$eingang>) {
$bla++ if /^\s/;
push @klimatol, $_ if $bla;
}
close $eingang;
print @klimatol, "\n";
my @datenz;
foreach (@klimatol) {
chomp;
$_=~ s/ //g;
my ($Param, $Tiefe, $Monat, $mean, $N, $sigma, $Min, $Max) = split /;/;
push @datenz, join ';',
$Param, $Tiefe, $Monat, $mean, $N, $sigma, $Min, $Max, "\n";
}