【问题标题】:perl get elements from array, nestedperl 从数组中获取元素,嵌套
【发布时间】:2017-12-16 04:43:21
【问题描述】:

我正在使用 perl DBI 模块以数组格式从数据库中获取数据。到目前为止,我的代码如下所示:

$rows = $dbh->selectall_arrayref("show SELECT * FROM table SAMPLE 3");
foreach $h (@$rows) {
  foreach $x (@$h) {
    printf "%s\n", $x;
  }
}

在调试模式下中断后,我看到的数据如下:($h)


 0 ARRAY(0x32c40f8)
   0 "CREATE SET TABLE (my contents....)

我的问题是: 1. 我怎么知道数组有多大? 2.如何打印我想要的所有内容 - “CREATE SET TABLE(我的内容......) 请有人提出一些想法,谢谢...

【问题讨论】:

  • 我试过了,行数是1。我如何得到长度?它不是水平数组而是垂直的,输出看起来像这样:

    0 0 ARRAY(0x32c40f8) 0 "CREATE SET TABLE (my contents....)

  • 我认为它是引用上下文的引用。抱歉,我无法正确格式化结果集,但它就像一个楼梯,下面有 3 个步骤:0(之后没有)第一行,然后是 ARRAY(0x32c40f8)(在第二行,向右移动两个空格),最后是我的内容在第 3 行,但向右移动了 3 个空格。
  • 您是否在问如何获取您引用的数组中的元素数? @$ref 在标量上下文中。
  • 您可能想从 SQL 中删除 show
  • 我已经修复了您代码中的缩进。不客气,但请以后自己做。良好的缩进是理解一段代码的重要工具。如果您要让一大群陌生人阅读和理解您的代码,那么让他们尽可能简单是礼貌的做法。

标签: perl dbi


【解决方案1】:

好吧,终于想通了。由于它是数组元素 [0],我所要做的就是将其分配给一个变量,然后进行拆分。希望这可以帮助。谢谢!

 $st= $h->[0];
 @lines = split/,/,$st;        

【讨论】:

    【解决方案2】:

    试试

    use DDP;
    
    my $rows = $dbh->selectall_arrayref("show SELECT * FROM table SAMPLE 3");
    my $len = @$rows;
    p $len;
    foreach $h (@$rows) {
        p $h;
    }
    

    【讨论】:

    • 谢谢你,@Mathew,上面的代码打印了 lenth=1,我确实得到了结果的最后一行以及其他一些连接的行。很奇怪仍然没有转储完整的数组内容。还有其他想法吗?
    • @Borodin “显示”实际上是我正在运行的命令的一部分。 SELECT 工作正常并返回结果,但 Show 实际上会拉取与该选择相关的 DDL。这是 Teradata 特定的命令。谢谢!
    • 只是为了跟进此事。当我设置一个断点并试图查看 $h 上的内容时,它会显示完整数组的所有内容。但是,当上面的代码尝试打印时,只打印最后一行,长度也显示为 1。不明白为什么....还有其他想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    相关资源
    最近更新 更多