#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);
答案 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];