Thread Script-Umstellung ?
(6 answers)
Opened by Paule1 at 2008-02-01 09:11
Folgendes Szenario
ich habe eine Datei "postfix.lis" An diese Datei soll per Per-Script die Adressen aus der Datei "addr_allowed.lis" angefügt werden. Und zwar immer, wenn die User-ID passt. Das ging die ganze Zeit, denn die Datei "postfix.lis" war in diesem Format 1008#Oltrogge#Oltrogge##Oltrogge######smtp-test#DE#0 Jetzt wurde das Format umgestellt und sieht nun so aus (es wurde eine zusätzliche ID vorne angestellt) 201008#1008#Oltrogge#Oltrogge##Oltrogge######smtp-test#DE#0 Natürlich laüf das Script "append-mailadr-to-lis.pl" nun nicht mehr, was vor der Umstellung einwandfrei funktionierte. Wäre super, wenn mir dabei jemand unter die Arme greifen könnte, bin mit meiner Weissheit am Ende ... Ich habe unten alle Listings mal angehängt, vielleicht weiss jemand weiter ... 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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 #!/usr/bin/perl -d # use strict; use warnings 'all'; # initialize filenames my $erste_datei = 'addr_allowed.lis'; my $andere_datei = 'postfix.lis'; # read files my $data_to_append = &datei_lesen($erste_datei); my $full_data = &datei_lesen($andere_datei); # append data foreach my$key (keys %{$data_to_append}) { # check whether we can append the data next if !exists($full_data->{$key}); # append data push(@{$full_data->{$key}->[0]}, @{shift(@{$data_to_append->{$key}})}); push(@{$full_data->{$key}}, @{$data_to_append->{$key}}); } # output &datei_schreiben($full_data, $andere_datei); # NAME: datei_schreiben() # USE: Datei anhand des musters in eine Datei schreiben # PARAMETERS: 1. Data # 2. Filename # RETURNS: void sub datei_schreiben($$) { # pick parameters my($data, $file) = @_; # open file open(my$fhOUT, '>', $file) or die "open failed: $!"; # iterate through the data foreach my$key (keys %{$data}) { # create line my $line = $key . '#' . join(',', map { join('#', @{$_}) } @{$data->{$key}}); # write out line print $fhOUT "$line\n"; } # close file close($fhOUT) or die "close failed: $!"; } # datei_schreiben # NAME: datei_lesen() # USE: Datei anhand des musters in eine komplexe Datenstruktur 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 equals the first tract my $key = shift @tracts; my $val = [@tracts]; # push data $data{$key} = [] unless exists $data{$key}; push(@{$data{$key}}, $val); } # close file close($fhIN); # return data reference return \%data; } # datei_lesen Listing "addr_allowed.lis" Code: (dl
)
1 1008#willi@hoedel1.de Listing "postfix.lis" Code: (dl
)
1 201008#1008#Oltrogge#Oltrogge##Oltrogge######smtp-test#DE#0 |