split commands oddity

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • rxl124@hehe.com

    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.b ak") || 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.b ak") || 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

    #2
    Re: split commands oddity

    rxl124@hehe.com wrote:[color=blue]
    > However, if I do a script w/ below, it does not work.[/color]

    <snip>
    [color=blue]
    > while(<@lines>) {[/color]

    Replace that with

    for (@lines) {
    [color=blue]
    > Can someone tell me why this is happening?[/color]



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

    Comment

    • Himanshu Garg

      #3
      Re: split commands oddity

      rxl124@hehe.com wrote in message news:<8a1229a0. 0401272329.3112 8643@posting.go ogle.com>...[color=blue]
      > 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.b ak") || 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.b ak") || 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.[/color]

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

      ++imanshu.

      Comment

      • rxl124@hehe.com

        #4
        Re: split commands oddity

        himanshu@gdit.i iit.net (Himanshu Garg) wrote in message news:<a46e54c7. 0401280523.2276 cc5b@posting.go ogle.com>...[color=blue]
        > rxl124@hehe.com wrote in message news:<8a1229a0. 0401272329.3112 8643@posting.go ogle.com>...[color=green]
        > > 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.b ak") || 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.b ak") || 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.[/color]
        >
        > Change while(<@lines>) to foreach (@lines)
        >
        > ++imanshu.[/color]


        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=<FILEINF O>;
        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=g rep(/$looking_for1/i, @lines);
        $looking_for2=g rep(/$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_f or1 was found in the array $looking_for2 times. \n";

        Comment

        Working...