我正在使用 NVelocity Templating engine 来生成固定长度字段输出 - 您知道的事情:
Field Start Pos Field Length Notes
---------- --------- ------------ ---------
Supplier 1 7 Leading Zeros
GRN 8 9 -
...
e.g.
>0001234 123A<
问题是我正在尝试使用重载来调用String.PadRight()以指定前导零,而NVelocity没有它。
这有效:
$Document.SupplierCode.PadRight(7)
但这不是:
$Document.SupplierCode.PadRight(7,"0")
我试过了:
单引号('0'
)
双单引号(''0''
)
双引号("0"
)
Double Double-Quotes(""0""
)
转义以上所有内容的引号(\"0\"
)
没有引用!
我发现的所有工作都是NVelocity Homepage,而Velocity Templating Language Reference page,其他人指的是解决方案。
抱歉,我无法提供或指出您可以自行测试您的想法的地方,但欢迎您提出任何建议!
感谢您的帮助; o)
答案 0 :(得分:1)
我现在正在处理同样的问题,据我所知,这是因为String类的PadLeft和PadRight函数接收第二个参数,前导“0”,作为char,而不是作为一个字符串。
NVelocity允许您使用'0'将参数指定为字符串,但在内部以这种方式生成强制转换异常(或类似的东西),因为参数预期为char。
我还没有找到(我只是在1小时后使用NVelocity!)一种将参数指定为char的方法,目前我只有一个肮脏的解决方案,例如应用替换(“”,“0 “)在PadLeft / PadRight之后,模板变为
$ Document.SupplierCode.PadRight(7).Replace('','0')
答案 1 :(得分:0)
同事提出的一个解决方案是在Document对象中创建另一个返回格式化String的属性:
E.g。
Public ReadOnly Property SupplierCodeFormatted() As String
Get
Return Supplier.Code.PadLeft(7, "0")
End Get
End Property