在将其写入perl中的输出文件时格式化输出

时间:2014-01-09 22:21:47

标签: regex perl

我正在阅读文件并根据需要进行处理。由于输出具有表格,因此很少列未对齐。我正在使用while循环来处理输入读取文件。

正则表达式:

$_ =~ s/$var/$mod{$var}/;
print "$_";

请建议我更好地格式化输出。

col1 (40spaces) col2(nspaces) coln(nspaces)

这是我如何做到的:     开(MYFILE, '登录')     while(){     如果(条件)     我的($ var)=(split())[];     $ var = ~s / xyz / xy /;     if($ var = condition)     $ var = $ 1;     }     $ _ = ~s / $ var / $ mod {$ var} /;     打印“$ _”

i need the output table 2nd column to be 40 spaces

1 个答案:

答案 0 :(得分:2)

我建议不要在整行上使用s///,而应将行拆分为字段,对每个字段执行所需操作,然后使用printf输出格式化的行。像这样:

use strict;
use warnings;

sub trim { $_ = shift; s/(\A\s+)|(\s+\z)//gr }  # or use String::Trim

my %full_country_name = (
  ENG  => 'England',
  SCO  => 'Scotland',
  WAL  => 'Wales',
);

while (<DATA>)
{
  chomp;

  # Input columns are 4 chars, 5 chars, and everything else
  my ($number, $country, $letter) =
    map trim($_),
    m{^ (.{4}) (.{5}) (.+) $}x;

  # Output columns are 4 chars, 10 chars, and everything else
  printf(
    "%-4s%-10s%s\n",
    $number,
    $full_country_name{$country},
    $letter,
  );
}

__DATA__
1   ENG  A
2   SCO  B
3   WAL  C
编辑

更新:以包含修剪功能的实现。