如何保留 perl 变量的尾随空格?
Posted
技术标签:
【中文标题】如何保留 perl 变量的尾随空格?【英文标题】:How to preserve trailing spaces on perl variables? 【发布时间】:2012-08-28 21:47:22 【问题描述】:脚本(最初复制自here)将一个固定宽度的文本文件作为输入,重新排列列的顺序,并且应该输出一个固定宽度的文本文件。但是尾随空格被从变量中截断,这意味着输出不是固定宽度的。
open(INPUT, "</home/ecom/tmp/citiBIG/GROUP.txt");
open(OUTPUT, ">/home/ecom/tmp/citiBIG/GROUP2.txt");
my $LINEFORMAT = "A2 A7 A14 A4 A2 A2 A4 A12 A25 A30 A26 A40 A40 A40 A25 A4 A12 A14 A2 A8 A12 A70 A8"; # Adjust to your
field widths
while(<INPUT>)
chomp;
my($Null0, $EmpNum, $CcNumber, $Null1, $CcExpYy, $CcExpMm, $Null2, $Title, $LastName, $FirstName, $HolderName, $Ad
dress1, $Address2, $Address3, $Suburb, $State, $PostCode, $Null3, $AreaCode, $WorkPhone, $Null4, $Email, $GroupName) =
unpack($LINEFORMAT, $_);
print OUTPUT $EmpNum . " " . "~" . $LastName . "~" . $FirstName . "~" . $Title . " " . "~" .
$Address1 . "~" . $Address2 . "~" . $Address3 . "~" . $Suburb . "~" . $PostCode . "~" . $State . "~" . $AreaCode . "~"
. $WorkPhone . "~" . $CcNumber . "~" . $CcExpMm . "~" . $CcExpYy . "~" . $HolderName . "~" . $Email . "~" . $GroupNam
e . " " . "~" . "\n";
close INPUT;
close OUTPUT;
【问题讨论】:
@ire_and_curses:chomp
只是删除换行符。
一个较小的输入值示例可以帮助人们回答您的问题。 :)
您可以使用undef
代替$Null0
。您也可以通过将第一个 A2
替换为 x2
来完全删除该元素。
【参考方案1】:
perldoc -f pack
建议:
o The "a", "A", and "Z" types gobble just one value, but pack
it as a string of length count, padding with nulls or
spaces as needed. When unpacking, "A" strips trailing
whitespace and nulls, "Z" strips everything after the first
null, and "a" returns data without any sort of trimming.
也许您可以在格式字符串中尝试“a”而不是“A”?或者,您可以使用 printf
将输出字段填充到所需的宽度。
【讨论】:
您还可以添加第二个$LINEFORMAT
,并根据需要重新排列输出字段,然后使用pack
以固定宽度将数据发送回。
标记为正确答案...使用“a”而不是“A”效果很好。感谢 @sti 的快速和宝贵的贡献。以上是关于如何保留 perl 变量的尾随空格?的主要内容,如果未能解决你的问题,请参考以下文章
在 Access DAO SQL INSERT 中保留尾随空格