English 中文(简体)
我怎么能从Perl的CSV档案中产生一个超文本的下级菜单?
原标题:How can I create an HTML drop-down menu from a CSV file in Perl?
  • 时间:2009-10-07 11:53:24
  •  标签:

• 创建网页,从社保公司档案中选择某些选择:

CSV 文件:

Time,h1,h2,h3,....
00:00:00,n1,n2,n3.....
.....so on


h -> header
n -> numbers

下面是《佩雷尔法典》第1节,我写信过滤头盔和价值,然后返回:

sub TimeData
{
    use Text::CSV;
    my @time;
    my @data;
    my ($csv_file, $type) = @_;
    open(my $csv_fh,  < , $csv_file) or die $!;
    my $parser = Text::CSV->new();
    $parser->column_names( $parser->getline($csv_fh) );
    while ( defined( my $hr = $parser->getline_hr($csv_fh) ) )
    {
        push @time, $hr->{Time};
        push @data, $hr->{$type};   
    }

    return (@time, @data);
}

我想创建一页,投入领域与头1、h2、 h3等清单相比减少了。 选定的头盔价值可用作另一封面的输入。 任何人都可以建议采用某种法典来做到这一点。

最佳回答

注 两个阵列将统一为一阵,呼吁书将无法将返回价值分配到两个不同的阵列。 如果你想要保持这一接口的精神,你就应当重新提及这些阵列。 见perldoc perlsub:

<代码>return 说明可用于退出非例行声明,选择性地具体说明返还价值,将根据次路线呼吁的具体情况,在适当情况下加以评价(清单、标记或真空)。 ...... 如果您交还一个或一个以上的聚合物(斜体和斜体),这些混合物将合并成一个大的不可分清单。

采用<条码> 由于我打上这台电脑既没有Text:CSV,也没有Text:xSV]。

#!/usr/bin/perl

use strict; use warnings;

my (@header) = map { chomp; split /,/} scalar <DATA>;

while ( my $line = <DATA> ) {
    last unless $line =~ /S/;
    chomp $line;
    my (@values) = split /,/, $line;
    print "<select>
";
    for (my $i = 1; $i < @header; $i += 1) {
        printf qq{<option name="%s" value="%s">%s = %s</option>
},
               $header[$i], $values[$i], $header[$i], $values[$i];
    }
    print "</select>
";
}

__DATA__
Time,h1,h2,h3
00:00:00,n1,n2,n3

现在,如果我这样做的话,我会把我读到数据的那一部分分开,而我生成<代码><SlectT></SlectT>,并为后者使用基于模板的方法。 例如:

#!/usr/bin/perl

use strict; use warnings;

use HTML::Template;
use List::AllUtils qw( each_arrayref );

my $select_html = <<EO_HTML;
<select>
<TMPL_LOOP OPTIONS>
<option name="<TMPL_VAR HEADER>"
value="<TMPL_VAR VALUE>"><TMPL_VAR HEADER> = <TMPL_VAR VALUE></option>
</TMPL_LOOP>
</select>
EO_HTML

my @headers = qw(h1 h2 h3);
# Stand-in for rows you read from the CSV file
my @values  = ( [qw(a1 a2 a3)], [qw(b1 b2 b3)] );

print make_select($select_html, @headers, $_)->output for @values;

sub make_select {
    my ($html, $headers, $values) = @_;
    my $tmpl = HTML::Template->new(scalarref => $html);

    my @options;

    my $it = each_arrayref($headers, $values);
    while ( my ($h, $v) = $it->() ) {
        push @options, { HEADER => $h, VALUE => $v };
    }
    $tmpl->param(OPTIONS => @options);
    return $tmpl;
}

产出:

<select>

<option name="h1"
value="a1">h1 = a1</option>

<option name="h2"
value="a2">h2 = a2</option>

<option name="h3"
value="a3">h3 = a3</option>

</select>
<select>

<option name="h1"
value="b1">h1 = b1</option>

<option name="h2"
value="b2">h2 = b2</option>

<option name="h3"
value="b3">h3 = b3</option>

</select>
问题回答

暂无回答




相关问题
热门标签