Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Perl (http://www.velocityreviews.com/forums/f17-perl.html)
-   -   split commands oddity (http://www.velocityreviews.com/forums/t24792-split-commands-oddity.html)

rxl124@hehe.com 01-28-2004 07:29 AM

split commands oddity
 
Hi, room
Beginner of learning perl here!!

I have question to all,

I have below file name datebook.master which contains only 2 lines
Mike wolf:12/3/44:144 park ave, paramus: 44000
Sarah kim: 3/2/67:255 lomel ave, fort lee: 33000

Now, I am testing out below scripts and working fine.
-------------------- scripts 1------------------------------------------
#!/usr/bin/perl -w
open(FILE, "datebook.bak") || die "CAn't open $!\n";
while(<FILE>) {
@line=split(":");
print "$line[0] $line[2]\n";
}
close(FILE)
------------------------------------------------------------------------

And, I get desired results.
However, if I do a script w/ below, it does not work.

-------------------- scripts 2------------------------------------------
#!/usr/bin/perl -w
open(FILE, "datebook.bak") || die "CAn't open $!\n";
@lines=(<FILE>);
while(<@lines>) {
@line=split(":");
print "$line[0] $line[2]\n";
}
close(FILE)
------------------------------------------------------------------------

Can someone tell me why this is happening?
I want script 2 since I need to call this array again in the later parts of
the scripts(in the longer version).

Can someone kindly respond?

Big thanks in advance.

Gunnar Hjalmarsson 01-28-2004 08:31 AM

Re: split commands oddity
 
rxl124@hehe.com wrote:
> However, if I do a script w/ below, it does not work.


<snip>

> while(<@lines>) {


Replace that with

for (@lines) {

> Can someone tell me why this is happening?


http://www.perldoc.com/perl5.8.0/pod/perlsyn.html

--
Gunnar Hjalmarsson
Email: http://www.gunnar.cc/cgi-bin/contact.pl


Himanshu Garg 01-28-2004 01:23 PM

Re: split commands oddity
 
rxl124@hehe.com wrote in message news:<8a1229a0.0401272329.31128643@posting.google. com>...
> Hi, room
> Beginner of learning perl here!!
>
> I have question to all,
>
> I have below file name datebook.master which contains only 2 lines
> Mike wolf:12/3/44:144 park ave, paramus: 44000
> Sarah kim: 3/2/67:255 lomel ave, fort lee: 33000
>
> Now, I am testing out below scripts and working fine.
> -------------------- scripts 1------------------------------------------
> #!/usr/bin/perl -w
> open(FILE, "datebook.bak") || die "CAn't open $!\n";
> while(<FILE>) {
> @line=split(":");
> print "$line[0] $line[2]\n";
> }
> close(FILE)
> ------------------------------------------------------------------------
>
> And, I get desired results.
> However, if I do a script w/ below, it does not work.
>
> -------------------- scripts 2------------------------------------------
> #!/usr/bin/perl -w
> open(FILE, "datebook.bak") || die "CAn't open $!\n";
> @lines=(<FILE>);
> while(<@lines>) {
> @line=split(":");
> print "$line[0] $line[2]\n";
> }
> close(FILE)
> ------------------------------------------------------------------------
>
> Can someone tell me why this is happening?
> I want script 2 since I need to call this array again in the later parts of
> the scripts(in the longer version).
>
> Can someone kindly respond?
>
> Big thanks in advance.


Change while(<@lines>) to foreach (@lines)

++imanshu.

rxl124@hehe.com 01-29-2004 07:59 AM

Re: split commands oddity
 
himanshu@gdit.iiit.net (Himanshu Garg) wrote in message news:<a46e54c7.0401280523.2276cc5b@posting.google. com>...
> rxl124@hehe.com wrote in message news:<8a1229a0.0401272329.31128643@posting.google. com>...
> > Hi, room
> > Beginner of learning perl here!!
> >
> > I have question to all,
> >
> > I have below file name datebook.master which contains only 2 lines
> > Mike wolf:12/3/44:144 park ave, paramus: 44000
> > Sarah kim: 3/2/67:255 lomel ave, fort lee: 33000
> >
> > Now, I am testing out below scripts and working fine.
> > -------------------- scripts 1------------------------------------------
> > #!/usr/bin/perl -w
> > open(FILE, "datebook.bak") || die "CAn't open $!\n";
> > while(<FILE>) {
> > @line=split(":");
> > print "$line[0] $line[2]\n";
> > }
> > close(FILE)
> > ------------------------------------------------------------------------
> >
> > And, I get desired results.
> > However, if I do a script w/ below, it does not work.
> >
> > -------------------- scripts 2------------------------------------------
> > #!/usr/bin/perl -w
> > open(FILE, "datebook.bak") || die "CAn't open $!\n";
> > @lines=(<FILE>);
> > while(<@lines>) {
> > @line=split(":");
> > print "$line[0] $line[2]\n";
> > }
> > close(FILE)
> > ------------------------------------------------------------------------
> >
> > Can someone tell me why this is happening?
> > I want script 2 since I need to call this array again in the later parts of
> > the scripts(in the longer version).
> >
> > Can someone kindly respond?
> >
> > Big thanks in advance.

>
> Change while(<@lines>) to foreach (@lines)
>
> ++imanshu.



thank you all, I have used for and it's working like charms..
I was doing excersise on the book that I recently purchased so that I
can practice on perl by myself and it was getting tough to do this
particular one cause I couldn't understand what was going on. Below is
entire script(please do advise as I am real beginner and if I made
really short script long one.)

also, this --> @all_lines = map { split(":") } @lines; , not
understanding
why split command would not work w/out map.......

At all rate, thank you very much.


----------------------------------------------------------------
#!/usr/bin/perl

open (FILEINFO, "file.txt") || die "Can't open file $!\n";
@lines=<FILEINFO>;
close FILEINFO;
@all_lines = map { split(":") } @lines;

print "Who would you like to find? \n";
chomp($looking_for=<STDIN>) ;
print "You are looking for $looking_for \n";
$count_look = grep(/$looking_for/i, @all_lines);
@count_look = grep(/$looking_for/i, @all_lines);

print " Number of person that matched was $count_look \n";
print " They are @count_look \n";


for (@lines) {
( $name, $phone, $address, $bd, $sal )=split(":");
print "$name\t $phone\n";
}

sleep(1);
print "Who are you searching for ?";
chomp($looking_for1=<STDIN>) ;
@looking_for2=grep(/$looking_for1/i, @lines);
$looking_for2=grep(/$looking_for1/i, @lines);
( $name_l, $phone_l, $address_l, $bd_l, $sal_l )=map {split(":") }
@looking_for2;
print "@looking_for2\n";
sleep(1);
print "What is the new phone number for $looking_for1 ?";
chomp($new_numb=<STDIN>);
print "$looking_for1\'s phone number is currently $phone_l\n";
@newinfo = split(":", @looking_for2);
@newinfo1 = splice(@newinfo, 1,1, "$new_numb");

print "Here is the line showing the new phone number:\n";
print join(":", $name_l, $new_numb, $address_l, $bd_l, $sal_l), "\n";
print "$looking_for1 was found in the array $looking_for2 times. \n";


All times are GMT. The time now is 03:15 PM.

Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57