如何保留 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 中保留尾随空格

如何去除 CMake 变量中的尾随空格?

通常如何在 react-bootstrap 或 bootstrap 中显示带有尾随空格的变量?

从变量中去除尾随空格

如何删除前导和尾随空格?

在C语言编程中啥叫前导空格,啥叫尾随空格