file - 在 perl 中,如何生成文件中包含的所有可能的数字组合?
问题描述
我在本地找到了以下 perl 代码,它计算字符或数字的所有可能组合,但您需要使用 qw 函数提供它们my @strings = [qw(1 2 3 4 5 6 7 8 9 10 11 12 13)];
,我需要从一个文件并将它们传递给@strings
数组或通过 Perl 行命令参数将数字传递给提到的@strings
数组。
我已经阅读了有关的所有信息,qw()
但是在阅读 Perl 行命令参数文件时没有找到使用它的方法,所以你能给出一些建议来解决这个问题吗?
现在提供的输出是:
1 2 3 4 5
1 2 3 4 6
1 2 3 4 7 ...
代码:
use strict;
use warnings;
#my $strings = [qw(AAA BBB CCC DDD EEE)];
#my $strings = [qw(1 2 3 4 5 6 7 8 9 10 11 12 13)];
my @strings = [qw(1 2 3 4 5 6 7 8 9 10 11 12 13)];
sub combine;
print "@$_\n" for combine @strings, 5;
sub combine {
my ($list, $n) = @_;
die "Insufficient list members" if $n > @$list;
return map [$_], @$list if $n <= 1;
my @comb;
for (my $i = 0; $i+$n <= @$list; ++$i) {
my $val = $list->[$i];
my @rest = @$list[$i+1..$#$list];
push @comb, [$val, @$_] for combine \@rest, $n-1;
}
return @comb;
}
解决方案
这段代码@numbers
从一个文件中初始化一个数字数组 ( ):
use strict;
use warnings;
my $filename = "data.txt";
my @numbers;
open my $fh, "<", $filename or die "Cannot open $filename";
# Read each line into $line
while( my $line = <$fh> ) {
# Extract each number present at $line
while( $line =~ /(\d+)/g ) {
# If found, add the number to @numbers
push @numbers, $1;
}
}
close $fh;
“data.txt”的内容可能是这样的:
1 2 3
4
5
6 7 8
9
10 11
12
如果每行中有多个数字,则无关紧要。如果事实上它们可以在带有分隔符的单行中(不是数字,例如空格)
推荐阅读
- pandas - 在保持排序的同时将 10000 个 csv 合并到不同的文件夹中
- avro - 有没有办法从 Java/Scala 代码中检索 Avro 库的版本?
- python - Lambda 中的内存使用率极高
- java - 使用 Apache commons CSV 处理 2GB 的 csv 文件时出现堆空间错误
- macos - macOS / Qt:禁用我的应用程序停靠菜单上的“退出”菜单项
- javascript - 我如何使用保存上传到一个javascript变量?
- postgresql - 如何更新 PostgreSQL 中多行的某些列
- c# - 瞬态对象中的依赖注入
- regex - 捕获行中间的第一个斜线和末尾的一个的表达式
- django - 从 Django 填充 MS Word 模板