我需要在perl中以下列方式输出

时间:2017-03-26 02:41:04

标签: perl

#File -

#a,b,c,d,e,f

#1,2,3,4,3,2

#9,8,7,6,5,0

#2,3,4,6,7,8

#我需要这样的输出: -    #a = 1,d = 4,c = 3,a = 9,d = 6,c = 7,a = 2,d = 6,c = 4

#但是我的程序给出了这个: -    #a = 1,d = 4,c = 3a = 9,d = 6,c = 7a = 2,d = 6,c = 4(没有,在c和a之后)

my script is :-

open ($fh, 'parse.txt');

my @arr;
my $dummy=<$fh>;
while (<$fh>) {
    chomp;
    $a = substr $_, 0,1;
    $b = substr $_, 6,1;
    $c = substr $_, 4,1;
    print "a=$a,d=$b,c=$c";
}

close (IN);

3 个答案:

答案 0 :(得分:2)

您可以将值附加到字符串并在“c”值后包含逗号,而不是打印出值。然后在循环结束时,从字符串中删除最后一个逗号并将其打印出来。如果输入文件太大,则存在一些可伸缩性问题。但如果它的大小合理,则不应存在任何实质性问题。

my $output;
my $dummy=<$fh>;
while (<$fh>) {
    chomp;
    $a = substr $_, 0,1;
    $b = substr $_, 6,1;
    $c = substr $_, 4,1;
    $output .= "a=$a,d=$b,c=$c,";
}
chop $output;
print $output;

答案 1 :(得分:2)

my $prefix = '';
while (<$fh>) {
    chomp;
    my @fields = split /,/;
    print $prefix."a=$fields[0],d=$fields[3],c=$fields[2]";
    $prefix = ',';
}

print("\n");

my @recs;
while (<$fh>) {
    chomp;
    my @fields = split /,/;
    push @recs, "a=$fields[0],d=$fields[3],c=$fields[2]";
}

print(join(',', @recs), "\n");

答案 2 :(得分:1)

如果您有包含分隔符的字段,则拆分该行并收集所需的元素

use warnings;
use strict;
use feature 'say';

my $file = 'parse.txt';
open my $fh, '<', $file or die "Can't open $file: $!";

my $dummy = <$fh>;
my @res;
while (<$fh>) 
{
    my ($a, $d, $c) = (split /,/)[0,3,2];
    push @res, "a=$a,d=$d,c=$c";
}

say join ',', @res;

或选择作业中的顺序

my ($a, $c, $d) = (split /,/)[0,2,3];