3

スクリプト (元は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;
4

1 に答える 1

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または、出力フィールドを目的の幅にパディングするために使用することもできます。

于 2012-08-28T22:01:27.710 に答える