Also das scheint nicht zu funktionieren...
Das Skript läuft zwar durch, schmeisst aber bis auf eine 20-stellige Zahl, die so nicht in der Datei vorkommt, alles raus.
Ich hab mal das komplette Skript reingestellt, vielleicht fällt euch ja was auf?
Zudem gibt er diese Fehlermeldungen aus:
Name "main::Hour" used only once: possible typo at SDE_Skript.pl line 68
Name "main::Minute" used only once: possible typo at SDE_Skript.pl line 68
Name "main::D" used only once: possible typo at SDE_Skript.pl line 72
Name "main::M" used only once: possible typo at SDE_Skript.pl line 71
Name "main::part" used only once: possible typo at SDE_Skript.pl line 26
Name "main::Year" used only once: possible typo at SDE_Skript.pl line 68
Name "main::Day" used only once: possible typo at SDE_Skript.pl line 68
Name "main::m" used only once: possible typo at SDE_Skript.pl line 74
Name "main::Y" used only once: possible typo at SDE_Skript.pl line 70
Name "main::h" used only once: possible typo at SDE_Skript.pl line 73
Name "main::Month" used only once: possible typo at SDE_Skript.pl line 68
Use of uninitialized value $_ in substitution (s///) at SDE_Skript.pl line 82
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
#!/usr/bin/perl -w
use DateTime;
use FindBin;
use IO::All;
use File::Find;
use Fcntl ':mode';
$path="/home/chris/Arbeitsfläche/SDE_HIK_Skripte"; # Pfad in dem alles beginnt
@directories=("$path/SDE-Rohdaten"); # Liste der zu durchlaufenden Verzeichnisse (hier nur eines)
$datum="2013"; # Suchoption: Jeder Dateiname mit diesem Inhalt wird aufgelistet.
find(\&wanted, @directories);
sub wanted {
if (-f && $File::Find::name =~ /.*$datum.*\.csv/) { # Hier das Kriterium nach dem Dateien gesucht werden
my @stats = lstat($File::Find::name);
push(@copy_files,$File::Find::name); # schreibt alle gefundenen Dateien in @copy_files
}
}
foreach $file (@copy_files) {
$part = $file;
# $part =~ s/^(.*\/).*$/\1/g; # Das ist keine Magie.... ;-) Hier wird lediglich der Dateipfad extrahiert :-P
chdir $FindBin::Bin; # Wechselt in das Verzeichnis in dem sich das ausgeführte Skript befindet (da liegt auch die Datei)
$temp < io("$file"); # Schreibt die Datei in $temp
while ($temp =~s/"Messpunkt";//g) {} # Entfernt >> "Messpunkt"; <<
while ($temp =~s/"\d{5,}";//g) {} # Entfernt die fortlaufenden Messpunktnummern inkl. Semicolon, Zahl hat mind. 5 Stellen
while ($temp =~s/["()]//g) {} # Entfernt alle >> "() << Zeichen (Anführungszeichen und Klammern)
$temp =~s/Item 1/620.0.HW.TS.Tvl/; # Hier werden die "Item 1 - 25" in die entsprechenden Mess-IDs umgewandelt
$temp =~s/Item 2/620.0.HW.TS.Trl/;
$temp =~s/Item 3/620.0.0.TS.AUL/;
$temp =~s/Item 4/620.0.EW.TS.1/;
$temp =~s/Item 5/620.0.EW.TS.2/;
$temp =~s/Item 6/620.0.EW.TS.3/;
$temp =~s/Item 7/620.0.EW.TS.4/;
$temp =~s/Item 8/620.0.0.TS.1/;
$temp =~s/Item 9/620.0.0.TS.2/;
$temp =~s/Item 10/620.0.0.RH.1/;
$temp =~s/Item 11/620.0.0.RH.2/;
$temp =~s/Item 12/620.0.0.CO2/;
$temp =~s/Item 13/620.0.FW.ES/;
$temp =~s/Item 14/620.0.FW.RV/;
$temp =~s/Item 15/620.0.HW.ES/;
$temp =~s/Item 16/620.0.HW.TS.Soll/;
$temp =~s/Item 17/620.0.EW.TS.Trl/;
$temp =~s/Item 18/620.0.KM.TS.Tvl/;
$temp =~s/Item 19/620.0.KM.TS.Trl/;
$temp =~s/Item 20/620.0.LA.TS.Trl/;
$temp =~s/Item 21/620.0.EW.ES/;
$temp =~s/Item 22/620.0.KM.ES/;
$temp =~s/Item 23/620.0.LA.ES/;
$temp =~s/Item 24/620.0.KM.TS.Soll/;
$temp =~s/Item 25/620.0.LA.TS.Soll/;
sub conv_dt {
($Day, $Month, $Year, $Hour, $Minute) = @_;
$dt = DateTime->new(
year => $Y,
month => $M,
day => $D,
hour => $h,
minute => $m,
second => 0,
time_zome => 'Europe/Berlin',
);
$dt->set_time_zone('UTC');
return $dt->strftime('%d.%m.%Y %H:%M');
}
$temp = ~s/^(\d\d)\.(\d\d)\.(\d\d\d\d)\s(\d\d):(\d\d)/conv_dt($1,$2,$3,$4,$5)/egm;
$file =~s/.csv/_SDE_UTC.csv/; # Erweiterung des Dateinamen um "_SDE_UTC". Testdateiname: Report-20131025-0010.skv
$temp >> io("$file"); # Änderungen werden in Datei gespeichert
}