Thread Boolsche Suche über CSV
(4 answers)
Opened by ryder at 2013-10-09 17:46
Hallo ryder,
ich habe mich mal ohne DBD::CSV (was vielleicht der beste Weg ist) daran versucht: 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 #!/usr/bin/perl use strict; use warnings; use Text::CSV; # Hier kommen die Suchanweisungen, wie auch immer die angeliefert werden. my %search = ( Source => { pattern => qr(10.*) , match => 1 } , Port => { pattern => qr(22) , match => 1 } , System => { pattern => qr(cose4711) , match => 0 } ); my $csv = Text::CSV->new ( { binary => 1, sep_char => ';' } ) or die "Cannot use CSV: ".Text::CSV->error_diag (); open my $fh, "<:encoding(utf8)", "test.csv" or die "test.csv: $!"; my $header = $csv->getline($fh); READCSV: while ( my $row = $csv->getline($fh) ) { for my $col (0..$#{$header}) { next unless my $comp = $search{$header->[$col]}; my $match = ($row->[$col] =~ $comp->{pattern}) ? 1 : 0; next READCSV unless $match == $comp->{match}; } print "Hit in row $.!\n"; } Ganz ohne if (aber dafür mit unless und ? :) :-). Hier meine CSV-Datei: Code: (dl
)
1 Nummer;Antragsteller;Source;Destination;Port;Typ;System;Datum Output: Vielleicht kannst Du etwas damit anfangen. Grüße payx PS: Es funktioniert nur, wenn die Suchkriterien (= Spaltennamen) so in der Datei vorkommen, sonst kommen false positives. Editiert von payx: Überflüssigen Befehl aus Code entfernt Last edited: 2013-10-10 09:17:22 +0200 (CEST) |