Thread IP Mapping
(10 answers)
Opened by LOADBALANCER at 2021-06-29 15:53
Hallo LOADBALANCER,
Du weißt ja vermutlich selbst, dass Du die Aufgabe nicht so ganz klar beschrieben hast. Ich rate also mal:
Das Aufspalten der einzelnen Zeilen nach den Semikolons ist sicher ein entscheidender Schritt. Wenn in Deiner Datei CSV-Strings enthalten sein können oder einzelne Elemente auch mal ein Newline enthalten können, dann solltest Du die Auswertung mit einem "richtigen" CSV-Parser erledigen, ich empfehle dafür Text::CSV_XS. Der Rest ist eigentlich ganz klassisch: Du musst für das Verheiraten einfach eine geschachtelte Schleife verwenden. Was ich hier mache, ist der Aufbau eines "Array of Arrays" (AoA) aus den Eingabedaten, das ist in perllol beschrieben. Das geht dann beispielsweise so: 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 use 5.020; use warnings; my $device_csv = <<EOF; name;ip;kuerzel;vrf;umgebung adresse01;192.168.209.11;Server01;;buero adresse02;192.168.209.72; Server02;; buero adresse03;192.168.227.72; Server03;; buero adresse04;192.168.195.11; Server04;; buero adresse05;192.168.223.11; Server05;; buero adresse06;192.168.197.11; Server06;; buero adresse07;192.168.197.72; Server07;; buero EOF my @areas = qw(area1 area2 area3); my $ausgabe = 'Ausgabe.csv'; my @lines = split /\n/,$device_csv; my @headers = split /\s*;\s*/, shift @lines; # Erste Zeile brauchen wir nicht my @data = map [ split /\s*;\s*/ ], @lines; # Array of Arrays! open (my $ehe,'>',$ausgabe) or die "Fehler beim Oeffnen der Datei '$ausgabe': '$!'\n"; say $ehe "Ip;destination;vrf;kuerzel;umgebung"; for my $area (@areas) { # fuer alle drei Areas my @brides = @data; # und alle Adressen my @grooms = @data; # zu allen Partnern for my $bride (@brides) { shift @grooms; # nur "vorwärts" verknüpfen MARRIAGE: for my $groom (@grooms) { my $ip = $bride->[1]; my $destination = $groom->[1]; my $kuerzel = $groom->[2]; my $vrf = $area; # ?? soll's das sein? my $umgebung = $groom->[4]; # ?? Das fehlt im Beispiel? say $ehe "$ip;$destination;$vrf;$kuerzel;$umgebung"; } } } close $ehe; say "Geschafft."; |