ファイルでunpackを使用することを計画しています。最初に文字列でテストしました。文字列にスペースが埋め込まれている場合、以下のスクリプトはそれをnullとして表示します。ファイルスペースでテストすると、正しく読み取られます。文字列を使用するときにnullに変更される理由がわかりません。固定長ファイルの読み取り中にアンパックを使用できますか?トレーリングスペースなどを考慮する必要がありますか?
#!/usr/local/bin/perl
use strict;
use warnings;
my $str="hek kaaa";
print "<$str>\n";
foreach(unpack("(A1)*", $str)) {
print sprintf("%x", ord), " ";
}
Output:
<hek kaaa>
68 65 6b 0 6b 61 61 61
返信ありがとうございます。以下に私のクエリを貼り付けました
perlプログラムがテキストファイルから読み取り、フォーマット「A」を使用して解凍すると、正しく機能します。最初の行iには、AとDの間の最初のフィールドにスペースが埋め込まれています。LABEL変数は「AD3」として出力されます。しかし、変数$ str = "A D3"があり、以下の方法で解凍すると、Aの後にnullがあります。ファイルと変数から読み取る場合、どのように動作が異なりますか?
foreach(unpack("(A1)*", $str)) {
print sprintf("%x", ord), " ";
}
これは、16進出力として41 04433として表示されます。
cat test.txt
A D37845566974923342XYZ24023984
QRW49327408234028434ERD24448009
my $file = 'test.txt';
open(my $data, '<', $file) or die "Could not open '$file'\n";
while (my $line = <$data>) {
print $line;
chomp $line;
my ($label, $source, $dest, $type, $value) = unpack ("A4 A8 A8 A4 A8", $line);
print "LABEL: $label SOURCE: $source DEST: $dest TYPE: $type VALUE: $value\n";
print "length of a string:" . length($line) . "\n";
foreach(unpack("(a1)*", $label)) {
print sprintf("%x", ord), " ";
}
print "\n";
}