Thread Probleme mit Ausdrücken (21 answers)
Opened by Trommelwirbel at 2011-11-10 17:05

Linuxer
 2011-11-14 21:31
#154197 #154197
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Hi,

dann hier auch mal mein Lösungsvorschlag:

more (15.0kb):

Code (perl): (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
71
72
73
74
75
#! /usr/bin/perl

use strict;
use warnings;

### sub routines ############################################################

sub read_elements {
  my $file = shift;
  my @elements;
  
  open my $infh, '<', $file or die "open(ro,$file) failed: $!\n";
  while ( my $line = <$infh> ) {
    chomp $line;
    push @elements, substr( $line, 0, 4 );
  }
  close $infh;
  
  return @elements;
}

# lese Regio-Datei ein; fuer jeden definierten Standort werden die ihm
# nachfolgenden zeilen eingelesen
# die gelesenen Daten werden in einem Hash-of-Arrays (HoA) abgelegt;  als
# Schluessel wird die Standort-Kennzahl verwendet, als Value wird eine 
# Referenz auf einen Array mit den Standortdaten abgelegt
# siehe auch dokumentation: perldoc perldsc
sub read_regio {
        my $file = shift;
        my %regio;
        
        my ( $regio, $lines, @values );
        open my $infh, '<', $file or die "open(ro, $file) failed: $!\n";
        while ( my $line = <$infh> ) {
                chomp $line;
                
                if ( $line =~ m/^(\d+)\s+(\d+)$/ ) {
                        $regio = $1;
                        $lines = $2;
                }
                elsif ( defined( $regio ) && $lines > 0 ) {
                        push @{ $regio{$regio} }, $line;
                        $lines--;
                }
        }
        
        close $infh;

        return %regio;
}

### main programm ###########################################################

my @elements = read_elements( "elemente.txt"     );
my %regio    = read_regio(    "hq_regio_neu.txt" );

# zur Kontrolle bei Entwicklung
#use Data::Dumper;
#print Data::Dumper->Dump( 
#  [ \@elements, \%regio ], [ qw( elements regio ) ] 
#);


for my $element ( @elements ) {
        my $file = "$element.txt";
        
        # ueberschreibendes Schreiben
        open my $outfh, '>', $file or die "open(w, $file) failed: $!\n";
        # anhaengendes Schreiben
        #open my $outfh, '>>', $file or die "open(w+, $file) failed: $!\n";
        print $outfh join( "\n", @{ $regio{$element} } );
        close $outfh or die "close(w+, $file) failed: $!\n";
}

__END__

meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Probleme mit Ausdrücken