http://qs321.pair.com?node_id=94792


in reply to telling script to read from next line

I'm going to offer a two part answer. I'll first answer the question you asked, then I'll answer what it looks like you're really trying to do with your code :-)

1. The question you asked -- how to read data from a newline -- I think you may be making this problem harder then it is. Perl will gladly work with you on this. In fact, by default, it does read line by line, unless you tell it differently. As an example, check out this code:
# You are using strict, right??? :-) use strict; my $adfile = 'banners.dat'; open(FILE, $adfile) || die "Can't open $adfile"; # Loops through the data file, 1 line at a time while(<FILE>) { # Split apart the line of data, put it in an array my @part = split(/\|/, $_); # Print's the url from the data line print "$part[0]\n"; } # Close up the file close(FILE);
That code will loop through your data file, line by line. By the time it's finished executing, it will print the url from each line of your data file.

However, it doesn't appear that you need to do something with each line, it appears that you want to pick out a random line from your data file, and do something with it. And you're in luck, because it just so happens that this information is in the FAQ. All you have to do to get a random line from your file is this:
srand; # This chooses a random line, and puts that line into # the var $line. rand($.) < 1 && ($line = $_) while <FILE>; # Now you can split it my @part = split(/\|/,$line); # And then do whatever else with it... print "$part[0] $part[1] $part[2] ... ";
As a final note, I noticed that you were accessing elements in the @part array by using syntax like @array[0]. Actually, the correct syntax to access a single element in an array is $array[0] and $array[1]. It's using the $, instead of the @. The @ is for referring to an entire array or array slice. The $ is used to refer to one, scalar value, such as a single element in an array.

Hope that helps!
-Eric

Replies are listed 'Best First'.
Re: Re: telling script to read from next line
by ginocapelli (Acolyte) on Jul 08, 2001 at 16:55 UTC
    Thanks a lot. Here is what I am using and it is working fine:
    #!/usr/bin/perl -wT use strict; use CGI; my $line = ""; my $part = ""; my $adfile = 'banners.dat'; open(FILE, $adfile) || die "Can't open $adfile"; #srand; # This chooses a random line, and puts that line into # the var $line. rand($.) < 1 && ($line = $_) while <FILE>; my @part = split(/\|/,$line); # Display the banner print "Content-type: text/html\n\n"; print "<font face=\"arial\" size=\"2\"><a href=\"@part[0]\" target +=\"_blank\"><img src=\"@part[1]\" width=\"@part[2]\" height=\"@part[3 +]\" alt=\"@part[4]\" border=\"1\"><br>Please visit my sponosr! </a></ +font>\n"; # Close the file close(FILE);
    Thanks to everyone who repsonded to this.
Re: Re: telling script to read from next line
by Anonymous Monk on Jul 08, 2001 at 16:52 UTC
    Thanks!