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 ![]() 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 ![]() 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."; |