Thread Boolsche Suche über CSV (4 answers)
Opened by ryder at 2013-10-09 17:46

payx
 2013-10-09 19:22
#171104 #171104
User since
2006-05-04
564 Artikel
BenutzerIn

user image
Hallo ryder,

ich habe mich mal ohne CPAN: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
2
3
4
5
6
Nummer;Antragsteller;Source;Destination;Port;Typ;System;Datum
4711;j2033;10.11.20.0/22;10.33.44.55;TCP 22;X1;cose4710;11-02-2013
4711;j2033;11.11.20.0/22;10.33.44.55;TCP 22;X1;cose4711;11-02-2013
4711;j2033;12.11.20.0/22;10.33.44.55;TCP 22;X1;cose4712;11-02-2013
4711;j2033;10.11.20.0/22;10.33.44.55;TCP 23;X1;cose4713;11-02-2013
4711;j2033;10.11.20.0/22;10.33.44.55;TCP 22;X1;cose4713;11-02-2013

Output:
Code: (dl )
1
2
Hit in row 2!
Hit in row 6!


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)

View full thread Boolsche Suche über CSV