簡體   English   中英

在將其寫入perl中的輸出文件時格式化輸出

[英]format output while writing it to the output file in perl

我正在閱讀文件並根據需要進行處理。 由於輸出具有表格,因此很少列未對齊。 我正在使用while循環來處理輸入讀取文件。

正則表達式:

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

請建議我更好的格式化輸出的方法。

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

這就是我如何做到的:open(MYFILE,'log')while(){if(condition)my($ 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

我建議而不是在整行使用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

更新:已編輯以包含修剪功能的實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM