On Tue, 2006-13-06 at 17:20 +0100, [EMAIL PROTECTED] wrote: > Hi, > > This is a bit of an extension on an earlier post. > > I am trying to create a data structure from a file (contents below). It is > meant to be a hash of > hashes but I suspect there is either a typo somewhere or I am hitting some > scoping problems. All > that is left in the hash is the last data assigned to it. Am I overwritting > my earlier assignment? > > Data::Dumper shows the data as this > ...snip > > $VAR3 = 'Wed-07'; > $VAR4 = { > 'total' => '8:42', > 'home' => '17:51' > }; > $VAR5 = 'Tue-06'; > $VAR6 = { > 'total' => '7:20', > 'home' => '16:18' > }; > $VAR7 = 'Fri-09'; > $VAR8 = { > 'total' => '8:05', > 'home' => '18:37' > }; > > > I want something like this > $VAR3{Wed-07} = { > name => Some Name, > began => Tue-06, > day => Wed, > dom => 07, > morning => 09:27, > home => 18:37, > total => 8:42 > }; > > Can someone point me in the right direction (again)? > > ########### my effort ############## > > #!/usr/bin/perl > > > use strict; > use warnings; > use Data::Dumper; > > > my $file = 'myfile.txt'; > > my $stuff = read_file($file); > > > sub read_file { > > > my $file = shift; > open(FH,$file) or die "Can't open $file: $!\n"; > my %times; > my ($name,$begin,$hashkey,$key,$day,$dom,$mon,$time,$hour); > while (<FH>) { > chomp; > if ($_ =~ /&N/) { > ($name) = ($_ =~ /(\w+\s\w+|\w+\s\w+\s\w+|\w+\s\w+-\w+)$/); > } > if ($_ =~ /&D/) { > ($begin) = ($_ =~ /(\w+\s+\d+-\w+-\d+)$/); > } > next if ($_ !~ /^(x|j|k|z)/); > # day dom mon > time hour > ($key,$day,$dom,$mon,$time,$hour) = ($_ =~ > /^(\w)\s+(\w+)\s+(\d+)-(\w+)- > \d+\s+(\d+:\d+):.*(\d+:\d+|-\d+:-\d+)/); > $hashkey = $day.'-'.$dom; > $times{$hashkey}->{name} = $name; > $times{$hashkey}->{began} = $begin; > if ($key =~ /x/i ) { > $times{$hashkey} = { > name => $name, > began => $begin, > day => $day, > dom => $dom, > morning => $time, > }; > } > } > elsif ($key =~ /z/) { > my ($h,$total) = ($_ =~ /\s+(\d+:\d+)\s+.*\s+(\d+:\d+)\s\$/); > $times{$hashkey} = { > home => $time, > total => $total, > };
$times{$hashkey}{home} = $time; $times{hashkey}{total} = $total; # Your code replaces, not augments > > } > } > print STDERR Dumper(%times); > return %times; > } > ########################################## > > > ########## Sample data ################## > > &N: Joe Bloggs > &D: Tue 06-Jun-2006 > %% > x Tue 06-Jun-2006 08:18:22 2006 2:11 [OKAY] $ > j Tue 06-Jun-2006 12:51:33 2006 4:33 [OKAY] $ > k Tue 06-Jun-2006 13:21:27 2006 0:30 OK+SHL $ > z Tue 06-Jun-2006 16:18:52 2006 2:57 [OKAY] 7:20 $ > ~ > %% > x Wed 07-Jun-2006 08:39:05 2006 0:44 [OKAY] $ > j Wed 07-Jun-2006 13:11:23 2006 4:32 [OKAY] $ > k Wed 07-Jun-2006 13:41:04 2006 0:30 OK+SHL $ > z Wed 07-Jun-2006 17:51:18 2006 4:10 [OKAY] 8:42 $ > ~ > %% > x Thu 08-Jun-2006 08:13:54 2006 2:06 [OKAY] $ > j Thu 08-Jun-2006 13:57:55 2006 5:44 [OKAY] $ > k Thu 08-Jun-2006 16:08:42 2006 2:10 OK+SHL $ > z Thu 08-Jun-2006 16:09:03 2006 0:00 [OKAY] 5:44 $ > ~ > %% > x Fri 09-Jun-2006 09:24:05 2006 1:05 [OKAY] $ > j Fri 09-Jun-2006 13:10:56 2006 3:46 [OKAY] $ > k Fri 09-Jun-2006 14:17:40 2006 1:06 OK+SHL $ > z Fri 09-Jun-2006 18:37:38 2006 4:19 AFTER! 8:05 $ > ~ > %% > ########################################## > Dermot Paikkos > > Network Administrator @ Science Photo Library > Phone: 0207 432 1100 > Fax: 0207 286 8668 > > -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>