免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3729 | 回复: 4
打印 上一主题 下一主题

perl CGI表格问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-27 10:55 |只看该作者 |倒序浏览
本帖最后由 Grainlin 于 2014-02-27 10:56 编辑

咨询下大神们。。。

这有一个二维属组@efg,能否放入一个表格中?

Vegetable        Breakfast        Lunch        Dinner
Tomatoes        no                  yes                yes
Broccoli        no                  no                 yes
…                 …                   …                  …
…                 …                  …                 …


一个简单的测试脚本:
  1. #!/usr/bin/perl
  2. use CGI;
  3. use CGI qw/:standard/;
  4. use Data::Dumper;

  5. BEGIN{
  6.     use CGI::Carp qw(fatalsToBrowser carpout);
  7.     open(LOG,">>errors.log") ||die "Couldn't open log file\n";
  8.     carpout(LOG);
  9. }




  10. my @abc = (Tomatoes,on,yes,yes);
  11. my @bef = (fff,eee,ddd,ccc);

  12. my @zfg ;

  13. @{$zfg[0]} = @abc;
  14. @{$zfg[1]} = @bef;

  15. print header;
  16. print start_html(
  17.         -title=>"Testing arguments",
  18.         -bgcolor=>"#99FF66"
  19. ),

  20. b(),font({-size=>"+2", -color=>"#006600"}),

  21. p(),"\n",

  22. p("This is a string"),"\n",

  23. p({-align=>center}, "red", "green", "yellow"), "\n",

  24. p({-align=>left}, ["red","green","yellow"]),

  25. b("THIS TEXT is bold"),

  26. p("$zfg[1][0]"),


  27. table({-border=>undef},
  28.                   caption('When Should You Eat Your Vegetables?'),
  29.                   Tr({-align=>'CENTER',-valign=>'TOP'},
  30.                   [
  31.                      th(['Vegetable', 'Breakfast','Lunch','Dinner']),
  32.                      td(['Tomatoes' , 'no', 'yes', 'yes']),
  33.                      td(['Broccoli' , 'no', 'no',  'yes']),
  34.                      td([@zfg]),
  35.                   ]
  36.                   )
  37.                ),

  38. end_html;
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
2 [报告]
发表于 2014-02-27 17:12 |只看该作者
回复 1# Grainlin

1. foreach
     @{$zfg[0]} = @abc;
    @{$zfg[1]} = @bef;
   
    my $td_zfg = "";
    foreach(@zfg){
       $td_zfg .= td([@{$_}]);
    }
   

    ...
    td(['Broccoli' , 'no', 'no',  'yes']),
    $td_zfg

2. do it by yourself
   ...
   td(['Broccoli' , 'no', 'no',  'yes']),
   td([ @{$zfg[0]} ]),
   td([ @{$zfg[1]} ]),
   

论坛徽章:
0
3 [报告]
发表于 2014-02-28 16:07 |只看该作者
回复 2# jason680



你好,谢谢你的答复...第一种方法测试了下...

1. foreach
     @{$zfg[0]} = @abc;
    @{$zfg[1]} = @bef;
   
    my $td_zfg = "";
    foreach(@zfg){
       $td_zfg .= td([@{$_}]);
    }   

  

然后在table上引用了

th(['Vegetable', 'Breakfast','Lunch','Dinner']),
                     td(['Tomatoes' , 'no', 'yes', 'yes']),
                     td(['Broccoli' , 'no', 'no',  'yes']),
                    $td_zfg

)

打印出来的结果不太一样...$td_zfg只在一行。。


从HTML源代码看起来清晰点..

正常的:

<tr align="CENTER" valign="TOP"><td>Broccoli</td> <td>no</td> <td>no</td> <td>yes</td></tr>
<tr align="CENTER" valign="TOP"><td>Tomatoes</td> <td>on</td> <td>yes</td> <td>yes</td></tr>
</table>


使用了第一种方法:第二行8个元素只打印在一行...<tr>

<tr align="CENTER" valign="TOP"><td>Broccoli</td> <td>no</td> <td>no</td> <td>yes</td></tr>
<tr align="CENTER" valign="TOP"><td>fff</td> <td>eee</td> <td>ddd</td> <td>ccc</td>,<td>Tomatoes</td> <td>on</td> <td>yes</td> <td>yes</td>,</tr>
</table>







   

论坛徽章:
0
4 [报告]
发表于 2014-02-28 17:44 |只看该作者
用了比较笨的方法解决了..谢谢jason的提醒...
  1. #!/usr/bin/perl
  2. use CGI;
  3. use CGI qw/:standard/;
  4. use Data::Dumper;
  5. my @abc = (Tomatoes,on,yes,yes);
  6. my @bef = (fff,eee,ddd,ccc);
  7. my @hij = (Vegetable,Breakfast,Lunch,Dinner);

  8. my @zfg ;

  9. @{$zfg[0]} = @abc;
  10. @{$zfg[1]} = @bef;
  11. @{$zfg[2]} = @hij;

  12. my $td_zfg = "";
  13. foreach(@zfg){
  14. #    $td_zfg= join("</tr><tr align=\"CENTER\" valign=\"TOP\">",td([@{$_}]),$td_zfg);
  15.       my $middle = &tdtest(@{$_});
  16.       $td_zfg .=$middle;
  17.         }


  18. print "$td_zfg \n";



  19. sub tdtest
  20. {
  21.   my ($a,$b,$c,$d) = (@_);
  22.   my $tdstrings = &td($a,$b,$c,$d);
  23.   my $strings = "<tr align=\"CENTER\" valign=\"TOP\">".$tdstrings."</tr>";
  24.   print "$strings\n";
  25.   return $strings;
  26. }

  27. sub td
  28. {      
  29.   my @abc = (@_);
  30.   my $tdstrings = "";
  31.   foreach my $abc(@abc)
  32.   {
  33.     $tdstrings .= "<td>".$abc."</td>";
  34.   }
  35.   return $tdstrings;
  36. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2014-02-28 17:51 |只看该作者
2. do it by yourself
   ...
   td(['Broccoli' , 'no', 'no',  'yes']),
   td([ @{$zfg[0]} ]),
   td([ @{$zfg[1]} ]),


在这个table中使用不了循环...囧...


table({-border=>undef},
                  caption('When Should You Eat Your Vegetables?'),
                  Tr({-align=>'CENTER',-valign=>'TOP'},
                  [
                     th(['Vegetable', 'Breakfast','Lunch','Dinner']),
                     td(['Tomatoes' , 'no', 'yes', 'yes']),
                     td(['Broccoli' , 'no', 'no',  'yes']),
                     td([@zfg]),
                  ]
                  )
               ),


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP