【问题标题】:Perl framework for report - creating variable dynamically用于报告的 Perl 框架 - 动态创建变量
【发布时间】:2015-08-20 15:18:19
【问题描述】:

我正在尝试为 Perl 设计一个框架,其中 sql 文件将保存在单独的文件中。 Perl 脚本应该读取 SQL 文件并确定选择了多少列,它应该迭代 SQL 查询的输出并将它们写入 CSV 文件。最初我想从简单的查询开始,例如:

select col1, col2 from table1;

所以 Perl 脚本应该迭代 SQL 输出并创建 CSV 文件,如下所示:

val1a,val1b

val2a,val2b

val3a,val3b

我面临的问题是我不知道如何动态创建变量数量。假设 SQL 查询中有 2 列,我必须有 2 个变量来存储列值并将其写入输出文件。如果有 3 列,它应该能够在不更改脚本的情况下创建 3 个变量。

如果有任何支持此功能的 Perl 外部模块,请告知。

【问题讨论】:

    标签: perl csv dynamic


    【解决方案1】:

    do not want to create dynamic variables。相反,您想使用哈希。

    如果您不熟悉这个概念,请查看perlrefperlreftut。对于您的 SQL 交互,您应该首先阅读 DBI documentation,特别是 fetchrow_hashreffetchrow_arrayref。要将数据写入 CSV,请使用Text::CSV

    use strict;
    use warnings;
    use DBI;
    use Text::CSV;
    use autodie;
    
    my $csv = Text::CSV->new;
    open my $fh, '>', 'output.csv';
    
    my $dbh = DBI->connect( ... );
    
    # write headings
    $csv->print($fh, ['val1', 'val2']);
    
    my $sth = $dbh->prepare('SELECT val1, val2 FROM table1');
    $sth->execute;
    
    while (my $res = $dbh->fetchrow_arrayref) {
      $fh->print($fh, $res);
    }
    
    close $fh;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      相关资源
      最近更新 更多