如何拆分Perl中的固定宽度列?

前端之家收集整理的这篇文章主要介绍了如何拆分Perl中的固定宽度列?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对于我来说,编程非常新鲜,因为我不知道如何解释这个问题,我深表歉意.

我有一个Perl脚本从内部工具获取变量.这并不总是它看起来像,但它将始终遵循这种模式:

darren.local           1987    A      Sentence1
darren.local           1996    C      Sentence2
darren.local           1991    E      Sentence3
darren.local           1954    G      Sentence4
darren.local           1998    H      Sentence5

使用Perl,最简单的方法是将这些行自己单独变成一个变量?根据内部工具吐出的内容,每一行总是不同,可以有五行以上.每一行中的大写字母将被最终排序(全部为As,所有Cs,所有Es等).我应该看正则表达式吗?

解决方法

我喜欢使用 unpack这样的事情.它快速,灵活,可逆.

你只需要知道每一列的位置,并且打包可以自动修剪每一列的额外空格.

如果您在其中一列更改某些内容,可以使用相同的格式重新打包,轻松将其包装到原始格式:

my $format = 'A23 A8 A7 A*';

while( <DATA> ) {
    chomp( my $line = $_ );

    my( $machine,$year,$letter,$sentence ) =
        unpack( $format,$_ );

    # save the original line too,which might be useful later
    push @grades,[ $machine,$sentence,$_ ];
    }

my @sorted = sort { $a->[2] cmp $b->[2] } @grades;

foreach my $tuple ( @sorted ) {
    print $tuple->[-1];
    }

# go the other way,especially if you changed things
foreach my $tuple ( @sorted ) {
    print pack( $format,@$tuple[0..3] ),"\n";
    }

__END__
darren.local           1987    A      Sentence1
darren.local           1996    C      Sentence2
darren.local           1991    E      Sentence3
darren.local           1954    G      Sentence4
darren.local           1998    H      Sentence5

现在还有一个考虑.听起来你可能在单个变量中有这么多的多行文本.通过在标量的引用上打开文件句柄来处理这个文件. filehandle的东西照顾其余的:

my $lines = '...multiline string...';

 open my($fh),'<',\ $lines;

 while( <$fh> ) {
      ... same as before ...
      }
原文链接:https://www.f2er.com/Perl/171428.html

猜你在找的Perl相关文章