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>


Reply via email to