脚本(最初从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;
答案 0 :(得分:5)
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
将输出字段填充到所需的宽度。