Search the web
Sign In
New User? Sign Up
perl-beginner · Perl Beginners Mailing List
? Already a member? Sign in to Yahoo!

Yahoo! Groups Tips

Did you know...
Real people. Real stories. See how Yahoo! Groups impacts members worldwide.

Best of Y! Groups

   Check them out and nominate your group.
Having problems with message search? Fill out this form to ensure your group is one of the first to be migrated to the new message search system.

Messages

  Messages Help
Advanced
#ARGV and parameters with embedded spaces.   Message List  
Reply | Forward Message #26652 of 26744 |
Re: [PBML] Newbie question

You've had prior experience with other programming languages, right?
Using substr() this way is a very C or Java way of doing things.

Read up on hashes ("associative arrays") and the split() function in Perl.

http://www.tutorialspoint.com/perl/perl_hashes.htm is just one of many
possible tutorials about hashes.
http://www.perlmeme.org/howtos/perlfunc/split_function.html seems a
decent enough split() tutorial.
I don't claim anything about the quality of these tutorials (I haven't
actually read them), they just came from the first page of google
results.

The idea of a hash is that it's like an array, but you can access the
individual variables by a text-based key, instead of by a numeric
index. So, instead of having to cycle through your list once for
apples, once for oranges, once for pears, etc., and then re-write your
code when your, err, user decides that the program should also work
for tangerines, instead you can use a hash where the fruit name is the
key and the count is the value. So you could access your hash as
$fruitCount{'Apples'} += 1, say. Or even better,
$fruitCount{$fruitName} += 1;
Doing the latter, you could build the entire hash table without ever
needing to know the types of fruit in advance; and you would
automatically cover every type of fruit mentioned in the input file.
The only question would be, "hey, how do I get the fruit name?"
Well...

With the split() function, you can divide your input lines logically,
instead of by using substr() and hoping that all fruits have the same
number of characters. split() lets you break a string apart according
to a delimiter character. In the case of your example here, you have
the name of a fruit, followed by a pipe |. So that | would be the
delimiting character; what you really want is the fruit name that
comes in front of it. If you split each line along the |, then you
can store the first chunk as the fruit name, and throw away the second
part (since, at least so far, you don't really care what the rest of
the line says).

Once you've built up your hash, you'll want to dump its contents. For
this, you'll need the keys() function, which you'll no doubt find
plenty of information about online.

One of the Perl mottoes is "There's More Than One Way to Do It"
(TMTOWDI) and the solution I'm hinting you at here is just one of many
possible ones (that's what makes Perl fun!) But hopefully this will
set you on the way to finding one of the many solutions.

Do check back!


On Wed, Jun 17, 2009 at 4:17 PM, Kevin Patterson<kpatters@...> wrote:
>
>
> Sorry...
>
> Here is what I wrote:
>
> #!/usr/bin/perl
>
> #use warnings;
> #use diagnostics;
>
> my $count = 0;
> my $key_count = 0;
> $Input_File="crapdata1.txt";
> open(INP, $Input_File);
> @by_jobname=<INP>;
> close(INP);
>
> foreach $New_Jobname (@by_jobname)
> {
> $em_job = substr($New_Jobname,11,50);
> $em_key = substr($New_Jobname,11,2);
>
> if ($em_key eq "Apples")
> {
> $count[1] = $count[1] + 1;
> }
>
> }
>
> print "$em_key count is: $count[1]\n";
>
> my $count = 0;
> foreach $New_Jobname (@by_jobname)
> {
> $em_job = substr($New_Jobname,11,50);
> $em_key = substr($New_Jobname,11,2);
>
> if ($em_key eq "Oranges")
> {
> $count[2] = $count[2] + 1;
> }
>
> }
> print "$em_key count is: $count[2]\n";
> exit;
>
> It give me the following results:
>
> Apple Count is: 2
> Oranges Count is: 1
>
> Here is the data.
>
> Apples |Sweet
> Oranges |Seeds
> Apples |Sour
>
> -----Original Message-----
> From: perl-beginner@yahoogroups.com [mailto:perl-beginner@yahoogroups.com]
> On Behalf Of Scot Robnett
> Sent: Wednesday, June 17, 2009 12:22 PM
> To: perl-beginner@yahoogroups.com
> Subject: RE: [PBML] Newbie question
>
> What is the exact format of the file?
>
> What have you tried so far?
>
> Nobody is going to write the script for you. The group is here to help
> you figure things out when you get stuck or something isn't working, but
> you're supposed to try something first.
>
>
>
> -----Original Message-----
> From: perl-beginner@yahoogroups.com
> [mailto:perl-beginner@yahoogroups.com] On Behalf Of Kevin Patterson
> Sent: Wednesday, June 17, 2009 2:11 PM
> To: perl-beginner@yahoogroups.com
> Subject: [PBML] Newbie question
>
>
> Hello..
>
> I am writing a perl program in windows..
>
> Here is my problem.
>
> I have a file containing data such as:
>
> Apples
>
> Oranges
>
> Pears
>
> Bananas
>
> Plums
>
> Apples
>
> Oranges
>
> Pears
>
> bananas
>
> kiwi
>
> Apples
>
> Oranges
>
> Pears
>
> bananas
>
> I write a program to read this file and create a summary report showing
>
> How many apples:
>
> How many oranges
>
> How many Pears
>
> Can anyone help me??
>
> thanks
>
> [Non-text portions of this message have been removed]
>
> No virus found in this incoming message.
> Checked by AVG - www.avg.com
> Version: 8.5.374 / Virus Database: 270.12.73/2180 - Release Date:
> 06/17/09 05:53:00
>
> No virus found in this outgoing message.
> Checked by AVG - www.avg.com
> Version: 8.5.374 / Virus Database: 270.12.73/2180 - Release Date:
> 06/17/09 05:53:00
>
> [Non-text portions of this message have been removed]
>
> ------------------------------------
>
> Unsubscribing info is here:
> http://help.yahoo.com/help/us/groups/groups-32.htmlYahoo! Groups Links
>
>



Wed Jun 17, 2009 8:45 pm

soules@...
Send Email Send Email

Forward
Message #26652 of 26744 |
Expand Messages Author Sort by Date

Hi, My script to add a new user is below, written on solaris 10. Running it using either of these two ways (one with double quotes around the second parameter...
Regina Miller
rmiller571957
Offline Send Email
Jun 17, 2009
3:29 pm

... Hi! First of all, you shouldn't use $ARGV[0] , $ARGV[1], etc. directly. Do: {{{ my ($first_name, $last_name, $address) = @ARGV; }}} Which is a much more...
Shlomi Fish
shlomif2
Online Now Send Email
Jun 17, 2009
3:49 pm

Thanks very much for the advice on not using $ARGV's directly. I will change my code to match. But I'm not sure how your example of system("echo"...) applies...
rmiller571957
Offline Send Email
Jun 17, 2009
4:38 pm

... It's not $ARGV - it's @ARGV. @ARGV is the entire array. $ARGV[$index] is an individual element of it. There's also $ARGV in Perl which is a different ...
Shlomi Fish
shlomif2
Online Now Send Email
Jun 17, 2009
4:54 pm

Hi Regina, The problem is caused by the eval shell statement: eval "exec ctperl -S $0 $*" When the shell runs your shell script, the quotation marks have...
Chris Seip
ssvfmnx
Offline Send Email
Jun 17, 2009
5:25 pm

This worked! Thank you so much! But now I'm having trouble passing my embedded-space-parameter on to the useradd routine. Here is my current code. The...
rmiller571957
Offline Send Email
Jun 17, 2009
6:50 pm

... rmiller571957> But how can I pass it on to the useradd command as one parameter? As Shlomi Fish already showed you before... using a multi-arg system...
merlyn@...
merlynstoneh...
Offline Send Email
Jun 17, 2009
6:56 pm

Thank you! And Shlomi, I'm sorry I didn't understand your response. I played with it for about 10 minutes, but just didn't see how it fit in with my...
rmiller571957
Offline Send Email
Jun 17, 2009
7:02 pm

Hello.. I am writing a perl program in windows.. Here is my problem. I have a file containing data such as: Apples Oranges Pears Bananas Plums Apples Oranges ...
Kevin Patterson
cside30
Offline Send Email
Jun 17, 2009
7:11 pm

... Kevin> I write a program to read this file and create a summary report showing Kevin> How many apples: Kevin> How many oranges Kevin> How many Pears ...
merlyn@...
merlynstoneh...
Offline Send Email
Jun 17, 2009
7:15 pm

What is the exact format of the file? What have you tried so far? Nobody is going to write the script for you. The group is here to help you figure things out...
Scot Robnett
web4success2...
Offline Send Email
Jun 17, 2009
7:22 pm

Sorry... Here is what I wrote: #!/usr/bin/perl #use warnings; #use diagnostics; my $count = 0; my $key_count = 0; $Input_File="crapdata1.txt"; open(INP,...
Kevin Patterson
cside30
Offline Send Email
Jun 17, 2009
8:18 pm

I fixed it. #!/usr/bin/perl #use warnings; #use diagnostics; my $count = 0; @client = qw(apples oranges pears kiwi); $Input_File="crapdata1.txt"; open(INP,...
Kevin Patterson
cside30
Offline Send Email
Jun 17, 2009
8:42 pm

Hi, I am writing a perl program to call/ execute another windows program Using the system command. I am trying to get/print the results to see if the command...
Kevin Patterson
cside30
Offline Send Email
Jun 24, 2009
1:35 am

... Try opening the the command with a piped file handle, like so... the below example will execute a given command and print the output to the screen (you...
Dan Stephenson
ispyhumanfly@...
Send Email
Jun 24, 2009
1:55 am

Maybe the backtick operator ` `? (Backtick on my keyboard is the tilde key ~ without shift, but it might be different on your keyboard). ... You'd do my...
Jeff Soules
soules@...
Send Email
Jun 24, 2009
4:58 pm

I TRIED IT THIS WAY.. INCLUDING WITH THE BACK LASHES. But I still get nothing.. And I show nothing ran in task manager.. open my $command, "e:\BMC...
Kevin Patterson
cside30
Offline Send Email
Jun 24, 2009
5:12 pm

When executing this command, don't forget to redirect the STDERR to STDIO, else you won't be able to figure out the reason why command has failed, so i will...
vishal thakur
v_thakur123
Offline Send Email
Jun 25, 2009
7:04 am

... In that case, make sure you use String-ShellQuote: http://search.cpan.org/dist/String-ShellQuote/ Alternatively use open '-|', @list which is only...
Shlomi Fish
shlomif2
Online Now Send Email
Jun 25, 2009
9:40 am

You've had prior experience with other programming languages, right? Using substr() this way is a very C or Java way of doing things. Read up on hashes...
Jeff Soules
soules@...
Send Email
Jun 17, 2009
8:46 pm

Thanks. I am reading on hashes now and practicing on how to use them. I have not taken any perl classes.. I just started reading the books. From:...
Kevin Patterson
cside30
Offline Send Email
Jun 17, 2009
8:50 pm

... If you're learning from books, I cannot recommend _Learning_Perl_ highly enough. It's got a very intelligent presentation order, tons of useful example...
Jeff Soules
soules@...
Send Email
Jun 17, 2009
8:54 pm

Thanks. I have it on order and reading it online now.. From: perl-beginner@yahoogroups.com [mailto:perl-beginner@yahoogroups.com] On Behalf Of Jeff Soules ...
Kevin Patterson
cside30
Offline Send Email
Jun 17, 2009
8:59 pm

Ok. Im stuck again. I need to sort this input file below before my code.. Cant someone help me with this?? ... <mailto:perl-beginner%40yahoogroups.com> ...
Kevin Patterson
cside30
Offline Send Email
Jun 17, 2009
10:10 pm

In a Unix environment, the easiest way to sort the file would be to use the sort utility on the file. But you said you're running in Windows. So, since your...
Jeff Soules
soules@...
Send Email
Jun 18, 2009
12:22 pm

Hope this helps Output: Apples count is: 3 Oranges count is: 3 Pears count is: 3 Src: #!/usr/bin/perl use strict; use warnings; my $count = 0; my...
Robert Lee Binkley
leebinkley
Offline Send Email
Jun 19, 2009
4:40 am

... Kevin> I have it on order and reading it online now.. I hope by "reading it online" you mean you have a safari.oreilly.com account (or access to it through...
merlyn@...
merlynstoneh...
Offline Send Email
Jun 17, 2009
11:03 pm

Hi, try to have a hash containing the frequencies. IMHO it is not a Perl issue. Get some info on algorithms Gabaux ... Hello.. I am writing a perl program in...
Urban Gabor
gabauxhu
Offline Send Email
Jun 17, 2009
8:15 pm

# cat add_smbuser #!/sbin/sh # This script must be invoked each time a new user # is added to the UB-Domain (SAM), so he will find his home and # a backup...
Robert Lee Binkley
leebinkley
Offline Send Email
Jun 17, 2009
5:52 pm
Advanced

Copyright © 2009 Yahoo! Inc. All rights reserved.
Privacy Policy - Terms of Service - Guidelines - Help