【发布时间】:2012-09-28 07:38:02
【问题描述】:
我正在尝试编写一个 Perl 脚本,其中字符串在每次出现“E”时以及当用户通过命令行输入“C”的位置时(比如 3-8 或 3-8,13-18 或任何如果字符串很长,则根据这种格式的字符串用逗号分隔 'C' 的这些位置),包含 'C' 的片段(例如在 3 和 8 位置)应连接并显示在输出中。假设字符串是 "ABCDEABCDEABCDEABCDEABCDE" 用户输入 3-8 那么程序输出应该是-
ABCDEABCDE
ABCDE
ABCDE
ABCDE
我编写了一个脚本,用户通过命令行输入“C”位置,字符串在“E”的每个位置被剪切,但之后我无法正确编写它。请帮忙!
到目前为止我编写的代码(已编辑)是:
use strict;
use warnings;
my $s = 'ABCDEABCDEABCDEABCDEABCDE';
my $i=0;
my @where;
my @array;
my @bond;
my @pos;
my @s_array;
my @s_array2;
for ($i=0; $i<=4; $i++) {
$where[$i] = index($s,"C",$where[$i-1])+1;
push(@array,$where[$i]);
}
print "All Positions of C: @array\n\n";
print "Enter C positions:\n";
my @join_C = <STDIN>;
foreach (@join_C) {
@bond = split (',',$_);
}
foreach (@bond) {
@pos = split ('-', $_);
}
print "entered C positions:@pos\n";
print "Resulting disulfide linked peptides\n\n";
my @a = split(/E/, $s);
my $result = join ("E,", @a);
my @final = split(/,/, $result);
foreach my $final (@final) {
foreach my $pos(@pos) {
my @source = split //, $final[@final];
my $length = @source;
for ($i=0; $i<=$length; $i++) {
if (index($final[$i], "C") == $pos[$i]) {
push (@s_array, $final[$i]);
}
else {
push (@s_array2, $final[$i]);
}
}
}
}
my $lastly_joined = join (',', @s_array);
print "Joined Fragments= @s_array\n";
print "Remaining fragments= @s_array2\n";
【问题讨论】:
-
1st- 你的代码中的@join_C 是什么? codepad.org/3AjVLHhq 你能在这里把 $line 设置为从标准输入输入的字符串吗?
-
@eicto : join_C 是一个数组,其中存储了用户输入的用于组合字符串的“C”的所有位置。
-
但是如何在代码中使用它?
-
@eicto :抱歉,我想不通。我的想法是在每个“E”处打破以匹配用户输入的“C”的每个位置与原始字符串中的位置。如果匹配,则两个相应的字符串将显示为在输出中连接。但我无法正确编码。请帮忙!
-
您是否编写了您试图解决的代码?这是一些家庭作业?