gpt4 book ai didi

arrays - perl - 用给定的数字数组切割许多字符串

转载 作者:行者123 更新时间:2023-12-01 23:44:24 25 4
gpt4 key购买 nike

亲爱的世界各地的 Perl 大师们~!

我需要你的帮助。

我有一个字符串文件 A 和一个数字文件 B,如下所示:

文件A:

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

...依此类推,直到 200。

文件B:

3, 6, 2, 5, 6, 1, ... 2 

(数组中总共 200 个数字)

然后,根据文件 B 中的数字,我想将每个字符串从起始位置剪切到文件 B 中的字符数。

例如因为文件 B 以 3, 6, 2 ... 开头

文件 A 将是

AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

像这样。

所以。这是我到目前为止的代码...

use strict;

if (@ARGV != 2) {
print "Invalid usage\n";
print "Usahe: perl program.pl [num_list] [string_file]\n";
exit(0);
}

my $numbers=$ARGV[0];
my $strings=$ARGV[1];
my $i;

open(LIST,$number);
open(DATA,$strings);

my @list = <LIST>;
my $list_size = scalar @sp_list;


for ($i=0;$i<=$list_size;$i++) {
print $i,"\n";
#while (my $line = <DATA>) {
}


close(LIST);
close(DATA);

由于字符串和数字都是 200,我将数组更改为标量值,以处理每个字符串的每个数字。

我正在研究这个。我知道我应该使用 pos 函数,但我不知道如何将每个数字与每个字符串匹配。是先读字符串吗?或者使用 for 来知道我需要运行多少次才能达到结果?

我们将非常感谢您的帮助!

谢谢。

我也会努力的。需要您的反馈。

最佳答案

最好使用strict,并且还应该使用warnings。其他需要注意的事项:

您应该检查 open 的返回值以确保它们没有失败。您还应该使用 open 的三个参数形式并使用词法文件句柄。特别是在处理命令行参数时,这确实会带来安全风险。

open my $listfh, "<", $file or die $!;

您可能希望采取安全预防措施

use ARGV::readonly;

您可以使用 map 语句轻松制作数字列表。假设数字位于逗号分隔的列表中:

my @list = map split(/\s*,\s*/), <$listfh>;

这将以逗号分隔输入行并去除多余的空格。

读取输入文件时,不需要使用计数器变量。你可以简单地做

open my $inputfh, "<", $file or die $!;
while (<$inputfh>) {
my $length = shift @list; # these are your numbers
chomp; # remove newline
my $string = substr($_, 0, -$length); # negative length on substr
print "$string\n";
}

substr 的负长度使其在字符串末尾留下了那么多字符。

下面是演示这些原则的一句台词:

perl -lwe '$f = pop;                            # save file name for later
@nums = map split(/\s*,\s*/), <>; # process first file
push @ARGV, $f; # put back file name
while (<>) {
my $len = shift @nums;
chomp;
print substr($_,0,-$len);
}' fileb.txt filea.txt

输出:

AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDDDDDDD
EEEEEEEEEEEEEEEEEEEEEEEEEE

注意通过操作@ARGV使用隐式打开文件名参数。还可以使用 -l 开关处理换行符。

关于arrays - perl - 用给定的数字数组切割许多字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14892265/

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