TCL中的格式无法正常工作

时间:2015-06-09 08:44:05

标签: format tcl

我在TCL中的格式无法正常工作,我正在尝试格式化一些文本并将其写入文件,然后将该文件作为邮件发送给用户。 我看到这种格式在Linux中是正确的,但是当邮件发送给用户时,格式是不正确的。

代码 -

puts [format {%-50s%-170s%-50s%-50s} "Test_Id" "Test_Description" "Test_Ran_Count" "Test_Result"]
puts [format {%-50s%-170s%-50s%-50s} $test_id1 "$mail_desc1" $loop_count $test_result]
puts [format {%-50s%-170s%-50s%-50s} $test_id "$mail_desc" $loop_count $test_result]

输出 -

Test_Id           Test_Description            Test_Ran_Count                Test_Result                                       
test_id_1         To execute - test_id_1            10                         PASS
test_id_2         To execute - test_id_2            10                         PASS  

如果test_id_2很大,那么整个格式正在转移,根据格式行为,如果test_id小于50个字符,那么它不应该移动其他列,因为我为%-50s提供了test_id }。

1 个答案:

答案 0 :(得分:2)

格式字段(Tcl借用C' s sprintf()进行了很少的更改)有点棘手。当您使用%50s(或%-50s - -只影响对齐)时,您将设置最小字段宽度。要设置最大字段宽度,您可以使用%.50s。或者,在您的情况下,您更有可能设置最小值,最大值和对齐方式:%-50.50s

展示一些较窄的字段和不同长度的简单字符串:

foreach str {abc defgh ijklmnop} {
    puts [format ">%-5.5s< |%-5s| /%-.5s/" $str $str $str]
}

产生此输出:

>abc  < |abc  | /abc/
>defgh< |defgh| /defgh/
>ijklm< |ijklmnop| /ijklm/

如您所见,左对齐,完全固定的宽度需要提供%-N.Ns(对于某些N)。