下面的行与固定在一起:
my $line = 'ATOM 1 P CYT B 3 42.564 -34.232 -7.330 1.00105.08 P'
使用以下sprintf创建。
@entr = ( 'ATOM', '1', 'P', 'CYT', 'B', '3', '42.564', '-34.232', '-7.330', '1.00', '105.08', 'P' );
print sprintf("%-6s%5d %-4s%3s %1s%4d %8.3f%8.3f%8.3f%6.2f%6.2f %2s\n",@newentr)
我想做的就是逆转这一过程。即以$line
输入形式创建看起来像的数组@entr
。如何在Perl中实现呢?
您可以使用unpack或正则表达式:
# %-6s%5d %-4s%3s %1s%4d %8.3f%8.3f%8.3f%6.2f%6.2f %2s\n
my @rev_eng = unpack 'a6 a5 x2 a4 a3x1 a1 a4 x4 a8 a8 a8 a6 a6 x10 a2', $output;
my $reg = qr/^(.{6}) (.{5}) .. (.{4}) (...) . (.) (.{4}) .{4} (.{8}) (.{8}) (.{8}) (.{6}) (.{6}) .{10} (..)/x;
my @regex = $output =~ $reg;
s/^\s+|\s+$//g for @rev_eng, @regex;
在模板中,a
代表字符串,x
忽略给定的字节数(在这种情况下为空格)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句