首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为循环中的每个段落增加(更改)字符串

如何为循环中的每个段落增加(更改)字符串
EN

Stack Overflow用户
提问于 2013-07-31 12:56:20
回答 2查看 191关注 0票数 0

目的:

选项卡分隔的文件包含不同的字符串。有些元素是相同的,有些则不是。我想在同一行中“连接”特定元素。但是,在此操作中,我需要对特定元素进行更改,以便将它们彼此分离,例如在末尾添加一个数字。

输入(在@ INPUT 中):

代码语言:javascript
复制
File1 2 range-2 operation execute:error 12345444,294837,298774
File2 3 range-1 default range:error 349928,37224
...

我想将“字段”execute:error与12345444,294837,298774和range:error与349928,37224连接起来,给出如下内容:

产出:

代码语言:javascript
复制
execute:error-1
12345444
execute:error-2
294837
execute:error-3
298774
range:error-1
349928
range:error-2
37224

PERL代码:我正在考虑对@input中的元素执行一个foreach循环,使用例如散列来计数最后一列中由逗号分隔的“字符串”的数量,并以某种方式添加一个数字(例如,等于总散列1,生成一个计数器?)。但是,我有点过头了。我怎么能把这事做完?我在下面试了一下,但经过两个小时的尝试、阅读和寻找类似的问题,我已经停了下来。也许我不应该用哈希?

代码语言:javascript
复制
my @output = ();
foreach (@input) {
    our(@F) = split('\t', $_, 0);
    my @end_numbers = split(',', $F[5], 0);
    %count;
    foreach (@end_numbers) {
        ++$count{$_};
        my $counts = keys %count;
        my $output = $F[4] . (adding a value here, e.g. $counts -1 for each loop itteration ) "\n" . $_;
        push (@output, $output);
}
}

解决方案:根据@ikegami的建议。

代码语言:javascript
复制
my @output = ();
my %counts = ();
foreach (@input) {
    chomp $_;
    my @fields = split(/\t/, $_, 0);
    for my $num (split /,/, $fields[5]) {
    ++$counts{$fields[4]};
    my $output = $fields[4] . "_" . $counts{$fields[4]} . "\n" . $num . "\n";
    push (@output, $output);
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-31 13:13:47

您要连接的值是$count{$_}

代码语言:javascript
复制
my %counts;
while (<>) {
    chomp;
    my ($class, $nums) = ( split /\t/ )[4,5];

    for my $num (split /,/, $nums) {
       ++$counts{$class};
       print "$class-$counts{$class}\n";
       print "$num\n";
    }
}

或者保留一行:

代码语言:javascript
复制
       printf "%s-%s\n", $class, ++$counts{$class};
       printf "%s\n", $num;

如果希望对每一行输入重新设置计数,请在外部循环中使用my $count;而不是my %counts;,并使用$count而不是$counts{$class}

票数 1
EN

Stack Overflow用户

发布于 2013-07-31 14:45:33

只需使用map函数将字符串$F[4].--$count."\n$_\n"添加到$F[5]散列中的每个数字。

代码语言:javascript
复制
foreach (@input) {
    my @F = split(/\t/, $_, 0);
    my $count = 0;
    my @end_numbers = map { $F[4]. --$count .qq|\n$_\n| } split(/,/, $F[5], 0);
    print @end_numbers;
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17971050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档