2010-11-02 33 views
1
use POSIX; 
my $test = ""; 
my $elements = scalar(@array); 
my $tablecount = ($elements/100); 
my $tblnum = ceil($tablecount); 
my @hundred; 
foreach $test (@array) { 
    until ($tblcnt == $tblnum){ 
    @hundred(@array, 0, 99); 
    print qq~<table id="$tblcnt"><tr><td>~; 
    foreach $test (@hundred){ 
    print qq~<tr><td>$test</td></tr>~; 
    } 
    print qq~</table>~; 
    $tblcnt++; 
    } 
} 

UG !!! J'essaye d'apprendre ceci mais, je ne peux juste pas le faire correctement! J'essaie de générer dynamiquement un nombre "x" de tables html remplies chacune avec jusqu'à 100 lignes de données.Comment puis-je générer dynamiquement des tables HTML contenant chacune 100 lignes en Perl?

Je peux obtenir le nombre de tables nécessaire, je peux boucler, je peux ajouter mais, une chose est sûre: je ne peux pas écrire le code.

Voici le résultat recherché:

1- J'ai 1027 lignes de données à partir d'un tableau.

2- Je veux que mon script fasse 11 tables html avec jusqu'à 100 lignes chacune. ((Layers effectivement) qui par défaut ne sera pas visible via css.C'est ainsi que je peux faire un show hide sur les tables comme une navigation "next prev" Je n'ai pas besoin d'aide avec le cross navigateur css.)

3- S'il y a un meilleur moyen, une méthode que je peux comprendre de toute façon, autre que l'utilisation de la méthode visible =, s'il vous plaît élaborer! J'ai renoncé à essayer de faire en sorte que Perl fasse des pages de 100 avec des liens "next prev" vers les données, j'ai donc eu recours à css javascript onclick = yadayada pour "afficher les données".

Je pensais qu'il serait plus facile de décaler 100 lignes de la matrice dans une boucle et mettre les lignes dans leurs propres tables html. Ne pas.

J'ai échoué lamentablement et j'ai besoin d'aide.

Répondre

3
my $cnt = 0; 

while (@array) { 
    my @rows = splice @array, 0, 100; 
    print qq(<table id="t$cnt">\n); 
    for my $row (@rows) { 
     print "<tr><td>$row</td></tr>\n"; 
    } 
    print "</table>\n"; 
    ++$cnt; 
} 

Vous pouvez utiliser HTML::Table pour générer HTML.

+0

Merci. J'essaye ceci maintenant. – DulcimerDude

+0

Parfait sauf que j'ai modded un peu avec l'épissure (@array, 0, 100); et changé pour imprimer qq ~ ~; – DulcimerDude

+0

MERCI ENCORE !!! – DulcimerDude

5

Je pense que vous devez passer plus de temps à apprendre les bases de Perl et CGI avant d'écrire des scripts.

Il est utile de séparer la logique de la présentation dans les scripts CGI. À cette fin, je trouve que HTML::Template est très utile.

Le script suivant génère un document HTML contenant 100 tables avec 100 lignes de 10 cellules chacune. Cela prendra du bon temps à faire ça.

#!/usr/bin/perl 

use strict; use warnings; 

use CGI::Simple; 
use HTML::Template; 

my $tmpl = HTML::Template->new(scalarref => page_template()); 

my @tables; 

for my $t (1 .. 100) { 
    my @rows; 
    for my $r (1 .. 100) { 
     push @rows, { CELLS => [ map { CELL => $_ }, 1 .. 10 ] }; 
    } 
    push @tables, { ID => "table_$t", ROWS => \@rows } 
} 

$tmpl->param(TABLES => \@tables); 

my $cgi = CGI::Simple->new; 

print $cgi->header('text/html'); 
$tmpl->output(print_to => \*STDOUT); 

sub page_template { 
    return \ <<EO_TMPL 
<!DOCTYPE HTML> 
<html> 
<head><title>Tables Example</title></head> 
<body> 
<TMPL_LOOP TABLES> 
<table id="<TMPL_VAR ID>"> 
<TMPL_LOOP ROWS> 
<tr> 
<TMPL_LOOP CELLS> 
<td><TMPL_VAR CELL></td> 
</TMPL_LOOP> 
</tr> 
</TMPL_LOOP> 
</table> 
</TMPL_LOOP> 
</body> 
</html> 
EO_TMPL 
    ; 
}