Hi,
habe ZeitPerformance-Problem mit folgendem Code
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
####################Anfang##############
#!/usr/local/bin/perl
use strict;
################################################################################
#Initialisierung
my (@botschaften_gesamt);
################################################################################
#main-Routine
print "\n\n ----------- Start --------- \n\n";
read_in();
process();
print "\n\n ----------- Ende --------- \n\n";
################################################################################
sub read_in
{
my ($botschaft_bin) = "\x00" x 16;
my ($path_in) = shift @ARGV;
open (FILE, "$path_in") or die $!;
binmode (FILE);
#es genügt den Cursor einmal in der Datei zu setzen
seek (FILE, 1024, 0);
until (substr($botschaft_bin,0,5) eq "\xFF" x 5 && $botschaft_bin ne "\xFF" x 16)
{
######################################################################
#Einlesen einer Botschaft des cco.files -> i.O.
read (FILE, $botschaft_bin, 16);
######################################################################
#in der Botschaftsstruktur abspeichern
push (@botschaften_gesamt, $botschaft_bin);
}
close (FILE);
}
################################################################################
sub process
{
my (@botschaft_process);
#print
mkdir "./result";
open Gelb, ">./result/gelb01.asc"; open Gruen, ">./result/gruen01.asc"; open Blau, ">./result/blau01.asc";
my ($kanal);
my (%hash) = ("01",*Gelb , "02",*Gruen , "04",*Blau);
foreach (@botschaften_gesamt)
{
#binäre Darstellung in hexadezimale wandeln
$_ = unpack ("H32", $_);
#Botschaft in ihre Elemente mittels unpack zerlegen
@botschaft_process = unpack("A10 A2 A20", $_);
#alle CAN-Kanaele können durchlaufen werden
foreach $kanal(keys(%hash))
{
if ($botschaft_process[1] eq $kanal)
{
printf {$hash{$kanal}} " %16s %1s %20s \n", $botschaft_process[0],$botschaft_process[1],$botschaft_process[2];
last;
}
}
#Leeren des Feldes durch Freigeben des Elements
$_ = undef;
}
close Gelb; close Gruen; close Blau;
}
######################################################Ende##########################
damit lese ich gesamte Datei in den Speicher (array) - 1.Mal komplett durch die Daten wandern
2.Mal wandern passiert bei Wandeln der binären Daten und nach Kriterium ausgeben an verschiedene FILEHANDLES
Wo liegt Potential zum beschleunigen???
Danke
Roger
Bearbeitet von Crian: CODE-Tags hinzugefügt\n\n
<!--EDIT|Crian|1092906861-->