【问题标题】:Perl-printing a 2-d matrix from a filePerl 从文件中打印二维矩阵
【发布时间】:2021-12-25 07:35:26
【问题描述】:

所以我试图从一个文件中读取一个二维矩阵,以便我可以将两个矩阵相乘。我可以打印矩阵的各个行,但我不能让子例程返回整个矩阵。我不确定我做错了什么。我从我正在使用的文件中粘贴了测试矩阵:

 12345                                                                              
 67890                                                                  
 34567                                                                    

我得到的输出是:

 final matrix is: ##THIS IS WHAT I AM TRYING TO PRINT OUT BUT I GET NOTHING
 row is:12345
 row is:67890
 row is:34567

【问题讨论】:

  • 代码图片没用。复制并粘贴代码和输入/输出。
  • 其中一个问题是使用新的变量声明来存储您的值。my $matrix_name,一个标量变量。它将超出 else 块之外的范围。此外,它与my @matrix_name 不是同一个变量,后者是一个同名数组。此外,语句print my @var 总是不会打印任何内容,因为您正在声明变量,这意味着它将为空。您不会收到警告,因为它是一个数组。我无法判断您的代码中是否还有更多错误,因为我无法测试运行图像并查看它是否有效。 :)
  • @Sarah 请包含输入矩阵文件的示例。
  • @HåkonHægland 我已经发布了输入矩阵文件的示例并粘贴了输入/输出
  • @Sarah 在输入文件中,数字之间是否有空格?例如在第一行你显示为12345,但我怀疑你的意思是写成1 2 3 4 5

标签: perl matrix subroutine file-read


【解决方案1】:

这是一个例子:

use feature qw(say);
use strict;
use warnings;
use Data::Dumper;

{
    print "Enter filename: "; 
    chomp(my $matrix_file = <STDIN>);
    say "final matrix is:";
    my $matrix = matrix_read_file($matrix_file);
    print Dumper($matrix);
}

sub matrix_read_file {
    my ($filename) = @_;

    my @matrix;
    open (my $F, '<', $filename) or die "Could not open $filename: $!";
    while (my $line =<$F> ) {
        chomp $line;
        next if $line =~ /^\s*$/; # skip blank lines
        my @row = split /\s+/, $line;
        push @matrix, \@row;
    }
    close $F;
    return \@matrix;
}

如果你给出以下输入文件:

1 2 3 4 5
6 7 8 9 10

程序输出:

final matrix is:
$VAR1 = [
          [
            '1',
            '2',
            '3',
            '4',
            '5'
          ],
          [
            '6',
            '7',
            '8',
            '9',
            '10'
          ]
        ];

【讨论】:

  • 成功了!我会把它和我的比较一下,看看我做错了什么,谢谢!我是 perl 的新手,所以如果我运行 2 个带有矩阵的文件并想将这些数组传递给一个新的子例程以将它们相乘,我会将矩阵称为 \@VAR1 吗?还是只是 $VAR1?
  • 太棒了! $VAR1 只是 Data::Dumper 打印出来的东西。它与程序中的变量无关。该变量在程序中仍然命名为$matrix
猜你喜欢
  • 1970-01-01
  • 2016-03-10
  • 2015-11-29
  • 2021-11-20
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多