Thread CSV-Datei ohne Modul schreiben
(15 answers)
Opened by Stuermchen at 2011-07-12 09:07
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) |