gpt4 book ai didi

perl - 如何打印 Perl 二维数组?

转载 作者:行者123 更新时间:2023-12-04 05:21:39 26 4
gpt4 key购买 nike

我正在尝试编写一个简单的 Perl 脚本,该脚本读取 *.csv,将 *.csv 文件的行放在二维数组中,从数组中打印一个项目,然后打印数组的一行。

#!/usr/bin/perl
use strict;
use warnings;

open(CSV, $ARGV[0]) || die("Cannot open the $ARGV[0] file: $!");
my @row;
my @table;

while(<CSV>) {
@row = split(/\s*,\s*/, $_);
push(@table, @row);
}
close CSV || die $!;

foreach my $element ( @{ $table[0] } ) {
print $element, "\n";
}

print "$table[0][1]\n";
当我运行此脚本时,我收到以下错误并且没有打印:

Can't use string ("1") as an ARRAY ref while "strict refs" in use at ./scripts.pl line 16.


我查看了许多其他论坛,但仍然不确定如何解决此问题。我该如何解决这个问题?

最佳答案

您不是在创建二维数组(Perl 术语中的 AoA 或“数组数组”)。这一行:

push(@table, @row);

将数据追加到 @row@table .您需要推送一个引用,并在每次循环中创建一个新变量,这样您就不会重复推送相同的引用:
my @table;
while(<CSV>) {
my @row = split(/\s*,\s*/, $_);
push(@table, \@row);
}

使用 split 时对于琐碎的 CSV 文件来说还可以,但对于其他任何东西来说,它都严重不足。使用像 Text::CSV_XS 这样的模块反而:
use strict;
use warnings;
use Text::CSV_XS;

my $csv = Text::CSV_XS->new() or die "Can't create CSV parser.\n";
my $file = shift @ARGV or die "No input file.\n";
open my $fh, '<', $file or die "Can't read file '$file' [$!]\n";

my @table;
while (my $row = $csv->getline($fh)) {
push @table, $row;
}
close $fh;

foreach my $row (@table) {
foreach my $element (@$row) {
print $element, "\n";
}
}

print $table[0][1], "\n";

关于perl - 如何打印 Perl 二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3018728/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com