in reply to Re: Solution for your prof
in thread <> diamond Operator

Thanks a lot guys, and you were right I should start learning some perl, I didn't realize How far behind I was. I did start some reading I did lot of research on google read lot of scripts, and I started to like perl. Maybe I am at the wrong forum( if I am could point me to the right direction)., cuz I am just a beginner. And I think perlmonks is for more advanced help. You may laugh at my problems, but everybody is at different stage of knowledge. any ways. I did start lab09 on my own today. Could you please tell me guys what do you think and if there is any errors, here is lab 9 and I am really sorry if I am waisting your time. this would be my last thing asking.


Script 1
Create a script named “lab09-1” script to:
Display your full name (first and last) on the 1st line
The script should
o accept filenames as command line arguments
o each record in the file is a numeric value
o accumulate each value into a total amount field
o print each value (zero decimal places) formatted as follows:


File name Value (print heading)
Filename1 1000 (print each detail value indicating the file it is from)

o when all records from all files have been processed print the total
Display a message on the last line indicating the script is finishing
Filenames: lab6, myfile, alpha, bones

here is the script

#!/perl/bin/perl
#
# Author: L.H
# Script Name: lab6-1
# Date Written: March 15, 2005
#Purpose: Basic I/0
#
#

foreach $file (@ARGV) {
open(FILE, "$file");


while (<FILE>) {

$sum+=$_;
print "$file $_";
}
print "$sum";
}

but I still can't get total for each file, so far I managed to get the total for one file only.

Replies are listed 'Best First'.
Re^3: Solution for your prof
by dragonchild (Archbishop) on Apr 07, 2005 at 19:55 UTC
    Use <code> tags when posting code snippets. :-)

    You're actually getting the totals for all the files. Try the following:

    #!/perl/bin/perl # # Author: L.H # Script Name: lab6-1 # Date Written: March 15, 2005 # Purpose: Basic I/0 # # use strict; foreach my $file (@ARGV) { open(FILE, "$file"); my $sum = 0; while (<FILE>) { $sum+=$_; print "$file $_\n"; } print "$sum\n"; close( FILE ); }

    The major change is the my $sum = 0; line. It scopes $sum to be within the foreach-loop. This means that it gets reset every time. You'll notice I added strict to my version. This provides some typo-checking, and also requires that you declare your variables (preferably with my) beforehand.

    This node was much better than your previous nodes. You posted what you tried and why it didn't work. This means we'll help you out, explaining why what you did didn't work and how to improve it. We'll edit, not create.

      wow guys, I really feel good know, actually I am learning lot of stuff, I've been awake from 7 am. and learning pearl all day long. Here is the script tha I modified. The script should do the following: copy all the files that were entered in command line to a folder lab06d which is already created. and add a "b" at the end of the file to tell that is a backup. also it should print the total value added from all the files. but I don't thing is adding the value from all the files together. here is the script again:

      #!/perl/bin/perl
      #
      # Author: L.H
      # Script Name: lab6-1
      # Date Written: March 15, 2005
      # Purpose: Basic I/0
      #
      #
      print "L.H\n";
      print "Starting Script\n\n";
      print "Filename\tValue\t(print heading)\n";

      use File::Copy;
      use strict;
      my $total;
      foreach my $file (@ARGV)
      {
      open(FILE, "$file");

      my $sum = 0;
      while (<FILE>)
      {
      chomp();
      $sum+=$_;
      print "$file $_\n";
      $total+=$sum;
      }
      print "Total value for the $file : $sum\n";
      close( FILE );
      }
      print "Total value accumulated from all the files
      is:$total";

      foreach my $file (@ARGV)
      {
      my $newfile=$file . "b";
      copy ($file, "lab06d\\$newfile");
      }

        The script should do the following: copy all the files that were entered in command line to a folder lab06d which is already created. and add a "b" at the end of the file to tell that is a backup. also it should print the total value added from all the files. but I don't thing is adding the value from all the files together.

        Does it do those things? Have you tested it out? It looks good, but the only way to know is by actual testing. Good luck! :-)

        I did this:

        > cat - >1.pl 1 > > cat - >2.pl 2 > > cat - >3.pl 3 > > perl foo.pl ?.pl 1.pl 1 Total value for the 1.pl : 1 2.pl 2 Total value for the 2.pl : 2 3.pl 3 Total value for the 3.pl : 3 Total value accumulated from all the files is:6>

        Which is the correct total. So either you didn't test it or you didn't specify what you though the errant behavior was. Either will get you down votes.

        If you format your code as follows it will be more readable to you and others. You can use ether tabs or spaces, Perl doesn't care.

        foreach my $file (@ARGV) { open(FILE, "$file"); my $sum = 0; while (<FILE>) { chomp(); $sum+=$_; print "$file $_\n"; $total+=$sum; } print "Total value for the $file : $sum\n"; close( FILE ); }

        Also; you already foreach through the files, why not do the copy in the same loop?

        Please when you post code place <code> before and </code> after. These html tags put the code into the pretty little boxes you see in other posts. It also keeps the code from fouling up the browsers for those that read your posts. Please read Writeup Formatting Tips again and take it to heart.


        s//----->\t/;$~="JAPH";s//\r<$~~/;{s|~$~-|-~$~|||s |-$~~|$~~-|||s,<$~~,<~$~,,s,~$~>,$~~>,, $|=1,select$,,$,,$,,1e-1;print;redo}
Re^3: Solution for your prof
by starbolin (Hermit) on Apr 07, 2005 at 20:53 UTC

    I gave you a plus vote for taking your medicine and coming back again. I'd give you another plus for a well written second question if I could. I noticed someone still downvoted you on your second question showing perhaps still some bias towards homework questions. Or it could because of the reference to Perl Monks being too advanced.

    There are all levels of programmers here at the Monastery and many basic questions asked and many basic questions answered. We all think this is the best forum for Perl you'll find and would encourage you to keep returning. There also is also a lot of good basic material available here, some of it was already pointed out to you and you have the book. We'll expect you to do your research before posting as you've already seen. Please feel free to come here for help and bring a thick skin.

    P.S. You'll get a wider readership on new questions if you start a new node rather than posting as a response to an existing node.


    s//----->\t/;$~="JAPH";s//\r<$~~/;{s|~$~-|-~$~|||s |-$~~|$~~-|||s,<$~~,<~$~,,s,~$~>,$~~>,, $|=1,select$,,$,,$,,1e-1;print;redo}