Thread Tabellen (Dateien) Auswerten: Anfang finden (11 answers)
Opened by wiederlader at 2007-04-24 20:11

PerlProfi
 2007-04-24 21:03
#76202 #76202
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Für das Einlesen der Werte würde ich dir eher split() empfehlen anstatt reguläre Ausdrücke.
Für das Einlesen der Dateien kannst du dir auch eine schöne Subroutine bauen.

Dabei würde ich darauf achten, dass die Werte später einfach erreichbar sind.
Zum Beispiel Produkt und Status als einen key für einen Hash benutzen um einfacher vergleichen zu können.

Die Values der Hashes könnten vielleicht einmal einfache Skalare sein, für die Schwellwerte dann aber anon. Arrays.

Ein einfaches Beispielskript sähe so aus:
Code: (dl )
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
#!/usr/bin/perl
use strict;
use warnings 'all';
use Data::Dumper;

# abfrage datei einlesen
my $data = &datei_lesen('abfrage.txt');

# schwellwerte datei einlesen
my $werte = &datei_lesen('schwellwerte.txt');

# daten vergleichen und anpassen
foreach my$key (keys %{$data})
{
# roter bereich
if ($data->{$key} > $werte->{$key}->[1])
{ $data->{$key} = 'rot' }

# gelber bereich
elsif ($data->{$key} > $werte->{$key}->[0])
{ $data->{$key} = 'gelb' }

# gruener bereich
else
{ $data->{$key} = 'gruen' }
}

# Ergebnisse Anzeigen
print Dumper($data);

# NAME: datei_lesen()
# USE: Datei anhand des musters in einen Hash einlesen.
# PARAMETERS: Filename
# RETURNS: Hash reference
sub datei_lesen($)
{
# pick parameters
my($file) = @_;

# open file
open(my$fhIN, '<', $file)
or die "open failed: $!";

# read data
my %data;
while (my$line=<$fhIN>)
{
chomp($line);

# split line
my @tracts = split(';', $line);

# key results from product and status
my $key = join(';', splice(@tracts, 0, 2));

# maybe we have multiple values
if ( @tracts > 1 )
{ $data{$key} = [@tracts] }
else
{ $data{$key} = $tracts[0] }
}

# close file
close($fhIN);

# return data reference
return \%data;
} # datei_lesen

__END__

Müsste so, oder so ähnlich funktionieren.
Für die Ausgabe habe ich jetzt einfach Data::Dumper benutzt.

MfG

View full thread Tabellen (Dateien) Auswerten: Anfang finden