operdir .....

1> print
2> map {$_->[1].": ".$_->[0]."\n"} # create entity output
3> grep {$_->[0] > 100} # exclude age <= 100
4> map { [
5>  sprintf ("%.0f",( $now - ( stat("${hdir}$_" ) )[9] ) / ONE_DAY ),
6>  $_
7> ] } # create aref [age, filename]
8> grep {$_ ne "." and $_ ne ".."} # exclude unwanted
9> sort readdir DH; # get all files

closedir ...


In the block of code  :

   how does the perl compiler load this, from line 9 up or opendir down?
   And what is the correct way to read it from top down or bottom up?
   what is the purpose of an array reference in this code and what is it
   advantages?
   on pg 253 of the camel book it states "if the next thing after the -> is
   a bracket, then the left operand ($_ ) is treated as a reference to an
   array to be subscripted on the right [0] or [1] .  So is this array
   declared/created dynamically?  How?
   on line 2 why is the period after [1] needed and what does it represent
   , string concatenation?  If so why are multiple ones needed on line 2?
   so [1] contains the dir name and [0] contains the my days old
   calculation, correct?
   how does map know to create this array b/c I thought map expects a list
   that is already created?
   from the previous question... is this list the opendir?  I guess am not
   totally grasping the map function.
   in lines 5 and 6 $_ is the dir, but why is it needed at  the very end at
   line 6 after the comma?
   to the end, output of days old > 100 I am now trying to use my
   date_manip1 subroutine to pass it the days old to get "the past date
   dd/mm/yy" as such:
      line 3 turns into &date_manip1(grep {$_->[0] > 100} ) so I have
output as :

            ABDELFATTAH__FAITH_M702515438:  101       dd/mm/yy
            I am on the right track?

thank you,

derek


                                                                           
             John Doe                                                      
             <security.departm                                             
             [EMAIL PROTECTED]>                                              To 
                                       beginners@perl.org                  
             05/24/2005 03:27                                           cc 
             PM                                                            
                                                                   Subject 
                                       Re: assigning printf statement to   
                                       an array                            
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           




Hi

Am Dienstag, 24. Mai 2005 18.05 schrieb [EMAIL PROTECTED]
with funny quoting:

[John:]
> my @a=
> map {$hdir.$_->[1]} # select filename
> grep {$_->[0] > 100} # exclude age <= 100
> map { [
>   sprintf ("%.0f",( $now - ( stat("${hdir}$_" ) )[9] ) / ONE_DAY ),
>   $_
>  ] } # create aref [age, filename]
> grep {$_ ne "." and $_ ne ".."} # exclude unwanted
> sort readdir DH; # get all files
>
>
> The map-grep-map-construct is quite common for problems like yours
> ("But I cannot use $_ b/c $_ is the dir name.").


[Derek:]
> This is working but it not printing the calculation "days old" for each
> filename???

No, obviously not... I wanted to demonstrate the principle where
some kind of additional attributes (here: age) of a list of entities
(files)
is created on the fly and kept together (in an aref), and taken as base for

further treatment (selection). [ Hope this english is understandable :-) ]

> I want to print the aref.
> I verified that it is indeed only printing those files over 100 days old,
> but I need output such as,
>
> ABDELFATTAH__FAITH_M702515438:  101
>
> as opposed to
>
> ABDELFATTAH__FAITH_M702515438

Ok, then some minimal changes in the first two lines are necessary
(although
there are other possibilities to do what you want; my proposal is possibliy

not the most performant, but splits the problem into smaller parts that can

be chaned)
[also untested...]

print
map {$_->[1].": ".$_->[0]."\n"} # create entity output
grep {$_->[0] > 100} # exclude age <= 100
map { [
  sprintf ("%.0f",( $now - ( stat("${hdir}$_" ) )[9] ) / ONE_DAY ),
  $_
 ] } # create aref [age, filename]
grep {$_ ne "." and $_ ne ".."} # exclude unwanted
sort readdir DH; # get all files

> I will also follow up with a line by line question of the code.

Just go on, questions are half of the answers :-)

joe


[...]
[maybe I should have snipped the rest?]
> Am Montag, 23. Mai 2005 20.05 schrieb [EMAIL PROTECTED]:
> > Hi all.....
> >
> > This is a continuation from my original question, but with a twist.  I
am
> > now using sprintf to assign to an array, but I only want to assign to
>
> this
>
> > array of I find a number over 100 from my calculation.  In the
array/hash
> > also needs to be the directory name.  Here is my code and the sample
> > output:
> > So in the end my goal is to store the data in this array if the number
is
> > over 100 and if it is over 100 store the directory name and its
>
> associative
>
> > "days old calc."
> > I have tried my @a =(); my $e =0;
> > $a[$e++] = sprintf ("%.0f",( $now - ( stat( "${hdir}${file}" ) )[9] ) /
> > ONE_DAY ) if ??? > 100;
> >
> > But I cannot use $_ b/c $_ is the dir name.
> >
> > thank you,
> >
> > derek
> >
> >
> >
> >
> > use strict;
> > use warnings;
> > $ENV{"PATH"} =
qq(/opt/SUNWsamfs/sbin:/usr/bin:/usr/sbin:/usr/local/log);
> >
> > my $hdir   = qq(/heartlab/db studies/);
> > #my $fdirs =
> > qq(/fuji/original/RMH/,/fuji/original/GMC/,/fuji/clinical/GMC/,/fuj
> > i/clinical/RMH/);
> > $^T=time;
> > our $now = time();
> > use constant ONE_DAY => 86400;
> >
> >
> >         sub date_manip
> >         {
> >                 my ($month, $day, $year) = (localtime)[4,3,5];
> >                 sprintf ("%02d/%02d/%02d\n", $month+1,$day,($year %
>
> 100));
>
> >         }
> >
> >         my $dm = &date_manip;
> >
> >         sub date_manip1
> >         {
> >                 my $days = (shift);
> >                 my ($d, $m, $y) = (localtime($now - $days * ONE_DAY))
> > [3..5];
> >                 sprintf ("%02d/%02d/%02d", $m+1,$d,($y % 100));
> >         }
> >
> >         #my $dmm = &date_manip1(1);
> >         #chomp $dm;
> >         #chomp $dmm;
> >
> >
> >
> >         opendir (DH, $hdir) or die "unable to open directory: $hdir
$!";
> >
> >         my @a =();
> >         my $e =0;
> >         foreach my $file (sort readdir (DH))
> >         {
> >                 next if $file eq "." or $file eq "..";
> >                 print "\n";
> >                 print "Days old of HL image files are:\t",$file,":\t";
> >                 #printf ("%.0f", ( $now - ( stat( "${hdir}${file}" )
)[9]
>
> )
>
> > / ONE_DAY );
> >                 $a[$e++] = sprintf ("%.0f",( $now - ( stat(
> > "${hdir}${file}" ) )[9] ) / ONE_DAY );
> >                 #date_manip1($1);
> >         }
>
> instead of the foreach loop you could use a single statement [untested]:
> (read from bottom to top)
>
> my @a=
> map {$hdir.$_->[1]} # select filename
> grep {$_->[0] > 100} # exclude age <= 100
> map { [
>   sprintf ("%.0f",( $now - ( stat("${hdir}$_" ) )[9] ) / ONE_DAY ),
>   $_
>  ] } # create aref [age, filename]
> grep {$_ ne "." and $_ ne ".."} # exclude unwanted
> sort readdir DH; # get all files
>
>
> The map-grep-map-construct is quite common for problems like yours
> ("But I cannot use $_ b/c $_ is the dir name.").
>
> (Schwarz'sche Transformation in german).
>
>
> hth, joe
>
> >         closedir (DH) or warn "unable to close DH: $hdir $!;"
> >
> > ___END CODE___
> >
> > ___BEGIN_DATA___
> >
> > Days old of HL image files are: 0_LEARY_ALANRA002848:   68
> > Days old of HL image files are: AARON_YAZAWA_CHRISTEHD006871:   48
> > Days old of HL image files are: AARON_YAZAWA_CHRISTERF015357:   64
> > Days old of HL image files are: ABBOTT_ANNA_MAERF014496:        49
> > Days old of HL image files are: ABBOTT_CONSTANCEMK003126:       69
> > Days old of HL image files are: ABBOTT_DONALDHE011252:  67
> > Days old of HL image files are: ABBOTT_FLORENCE068148_15857:    20
> > Days old of HL image files are: ABBOTT_HARRYRA002652:   68
> > Days old of HL image files are: ABBOTT_THOMASMKOOOO61:  66
> > Days old of HL image files are: ABBOTT__FLORENCEHC008241:       20
> > Days old of HL image files are: ABBRUZZESE_BETTYMK004528:       78
> > Days old of HL image files are: ABBRUZZESE_BETTYML002169:       80
> > Days old of HL image files are: ABDALLA__PATRICIAHA014365:      56
> > Days old of HL image files are: ABDELFATTAH_FAITH0702515438:    98
> > Days old of HL image files are: ABDELFATTAH__FAITH_M702515438:  101
> > Days old of HL image files are: ABDULLAHI__ABDIRAHMAMJ003339:   62
> > Days old of HL image files are: ABELL_MARKRF015325:     66
> > Days old of HL image files are: ABEL_HUBERTMJ003654:    21
> > Days old of HL image files are: ABEL_RICHARDMK003922:   82
> > Days old of HL image files are: ABEL_STEVENHD007640:    75
> > Days old of HL image files are: ABEL_STEVENRA003253:    75
> > Days old of HL image files are: ABEL__LARRYRF013486:    73
> >
> >
> >
> >
> > Derek B. Smith
> > OhioHealth IT
> > UNIX / TSM / EDM Teams
>
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> <http://learn.perl.org/> <http://learn.perl.org/first-response>

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>





-- 
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