[英]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.