我想用Perl打印时将字符串格式化(截断/附加字符)到指定的长度。Perl打印格式
例如
$string='my_string';
printf("%04s",$string);
应打印
my_s
此外,如果
$string='my';
我应该得到
00my
有没有办法打印最后四个字符?
ring
,如果字符串是
$string='my';
它应该打印
00my
我想用Perl打印时将字符串格式化(截断/附加字符)到指定的长度。Perl打印格式
例如
$string='my_string';
printf("%04s",$string);
应打印
my_s
此外,如果
$string='my';
我应该得到
00my
有没有办法打印最后四个字符?
ring
,如果字符串是
$string='my';
它应该打印
00my
你想这样做格式字符串,而不是你的:
printf ("%04.4s", $string);
您需要.4,因为它指定了最大长度。 (4开头只规定了最低要求)
这里有一些测试的输出:
$ perl -e "my \$string = \"my_string\";print sprintf(\"%04.4s\", 22);"
0022
$ perl -e "my \$string = \"my_string\";print sprintf(\"%04.4s\", \$string);"
my_s
$ perl -e "my \$string = \"my\";print sprintf(\"%04s\", \$string);"
00my
这里使用的是错误格式字符串输出。正如你所看到的,字符串不会被截断。
$ perl -e "my \$string = \"my_string\";print sprintf(\"%04s\", 22);"
0022
$ perl -e "my \$string = \"my_string\";print sprintf(\"%04s\", \$string);"
my_string
+1最大宽度。 – pilcrow
printf('%04s', substr($_, 0, 4));
您是否尝试过Perl的内置'printf'和'sprintf'? –
我从来没有想过使用%s作为字符串变形和填充。我会使用正则表达式和substr以及一些数学。为你+1。 –