Thread CSV-Datei ohne Modul schreiben (15 answers)
Opened by Stuermchen at 2011-07-12 09:07

rosti
 2011-07-12 11:44
#150316 #150316
User since
2011-03-19
3375 articles
BenutzerIn
[Homepage]
user image
Ein guter Anfang s. unten :)

to DO:
Zum Testen ist alles in einer Datei, package Names, package CSV;
Das Handle ist vorerst *DATA; später ist das der Dateiname
Handle dann mit IO::File;
- Fehlerbehandlung nicht vergessen

Überlegen, ob die Datenstruktur passt und entsprechende Methoden schreiben. Packages in externe Dateien auslagern.

Serialize-()-Funktion schreiben (alles zurück in Datei).


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
use strict;
use warnings;


package Names;

###########################################################################
# Rolf Rost, 14.2.2011
# Anonyme Array-Elemente bekommen Namen
###########################################################################
use strict;

# Setzt ein Array in ein Objekt um
sub new{
        my $class = shift;
        my $maps  = shift; # {3 => 'Day', 4 => 'Month', 5 => 'Year'}
        my $aref  = shift; # p.e. from localtime, stat, etc.
        return if ref $maps ne 'HASH';
        return if ref $aref ne 'ARRAY';
        my $self  = {};
    for(my $i = 0; $i < scalar(@$aref); $i++){
       $self->{$maps->{$i}} = $aref->[$i] if exists $maps->{$i};
    }
    
    return bless $self, $class;
}
1; ########################################################################

package CSV;

sub new{
        my $class = shift;
        my $handle = shift;
        my $self = bless{
                FH => $handle,
                COLS => {
                                0 => 'User',
                                1 => '/home',
                                2 => '/home/test',
                                3 => '/home/bin'
                        },
                DATA => {},
        }, $class;
        $self->_deserialize;
        return $self;
}

####################### PUBLIC ############################################
# Flags
sub user_dir_flag{
        my $self = shift;
        my $user = shift;
        my $dir = shift;
        return $self->{DATA}->{$user}->{$dir};
}
############################################# PRIVATE #####################
# Lesen der Daten auf eine Datenstruktur
sub _deserialize{
        my $self = shift;
        my $fh = $self->{FH};
        while(my $line = <$fh>){
                chomp $line;
                my @record = split ";", $line;
                my $name = Names->new($self->{COLS}, \@record);
                $self->{DATA}->{$record[0]} = $name; # Key ist der Benutzername
        }
}

1;#########################################################################
package main;


my $ref = CSV->new(*DATA);

print $ref->user_dir_flag('otto','/home'), "\n";      # 1
print $ref->user_dir_flag('otto','/home/test'), "\n"; # 0
print $ref->user_dir_flag('otto','/home/bin'), "\n";  # 0






__END__
user;/home;/home/test;/home/bin
fritz;0;1;0
otto;1;0;0
hans;1;1;1

Last edited: 2011-07-12 11:47:02 +0200 (CEST)

View full thread CSV-Datei ohne Modul schreiben