frenchface has asked for the wisdom of the Perl Monks concerning the following question:

So I have some code and I would like it to print out A TABLE something that looks like this:
0:00 1:00 2:00 3:00 ... 23:00 data from text files here data from text files here data from text files here data from text files here
Here is my code.
#!/usr/bin/perl use strict; use warnings; use CGI ':standard'; print header, start_html('Player Point Tracker'), h1('W51 Point Tracker'), start_form, body('The website is also case sensitive and may take awhile to se +arch, It will be looking though alot of data.'), p, 'Players Name: ', textfield('name'), br, submit('Search!'), end_form, p, hr; my $search_term =param('name'); print "$search_term", p; for my $digit (0 .. 9) { for my $file (<$digit*>) { open (my $FILE_HANDLE, '<', $file) || die "Can't open $file: $ +! \n"; while (<$FILE_HANDLE>) { chomp; my ($word, $count) = split / /, $_; if ($word =~ /^$search_term$/) { print "At $file $word had $count points.", p; #print "$file"; } } close ($FILE_HANDLE); } }

Replies are listed 'Best First'.
Re: cgi table
by hesco (Deacon) on Sep 25, 2010 at 04:54 UTC
    You want to perldoc CGI and read up about the ->start_table, ->end_table, ->th, ->tr, ->td methods (functions, if you use it that way). Note that most of these will accept array references to make the process easy.

    -- Hugh

    if( $lal && $lol ) { $life++; }
    if( $insurance->rationing() ) { $people->die(); }
Re: cgi table
by marto (Cardinal) on Sep 25, 2010 at 08:04 UTC
Re: cgi table
by roboticus (Chancellor) on Sep 25, 2010 at 02:23 UTC
      I'm sorry my question was unclear. My questions due to my script searching though text files, I am having a hard time to figure out how to make a table with it. So the question how do I get it to make a table.

        frenchface:

        OK, I think you're still short on details. I think you should have at least described the table you wanted. However, your code suggests a simple table layout, so I'll just use that. Also, as I've never used CGI, you'll have to bear with me, and perform any cleanup required.

        I'm assuming (based on the code you provided) that you want to build a table something like:

        <table> <tr><th>File</th><th>Word</th><th>Count</th></tr> <tr><td>..file1..</td><td>..word1..</td><td>..count..</td></tr> <tr><td>..file1..</td><td>..word2..</td><td>..count..</td></tr> ... <tr><td>..file1..</td><td>..wordn..</td><td>..count..</td></tr> <tr><td>..file2..</td><td>..word1..</td><td>..count..</td></tr> <tr><td>..file2..</td><td>..word2..</td><td>..count..</td></tr> ... ... ... <tr><td>..filem..</td><td>..wordn..</td><td>..count..</td></tr> </table>

        So I read a little[1] of perldoc CGI, and it looks like you could do something like this:

        # We'll build the table rows in this array, and we'll # put in the table headings first my @tbl_rows = ( th( ['File', 'Word', 'Count'] ) ); for my $digit (0 .. 9) { for my $file (<$digit*>) { open (my $FILE_HANDLE, '<', $file) || die "Can't open $file: $! \n +"; while (<$FILE_HANDLE>) { chomp; my ($word, $count) = split / /, $_; if ($word =~ /^$search_term$/) { # Next, we'll convert your print statement: #print "At $file $word had $count points.", p; # into code to store a row of data into the array: push @tbl_rows, td( [$file, $word, $count] ); } } close ($FILE_HANDLE); } } # Then turn the rows into a table. (I'm quite unsure of # the syntax, so you'll have to adjust it as required.) print table( Tr( \@tbl_rows ) );

        Does this help you go in the right direction?

        [1] The part I looked at was just under the heading THE DISTRIBUTIVE PROPERTY OF HTML SHORTCUTS. Frankly, I was surprised CGI was even installed on my machine! I guess it's part of the core distribution, the cygwin distribution, a requirement of another package I installed from CPAN or I just selected *all* perl modules available, or similar.

        ...roboticus