0

我正在使用NVelocity 模板引擎来生成固定长度的字段输出 - 你知道那种事情:

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")

  • 双双引号 ( ""0"")

  • 转义以上所有内容的引号 ( \"0\")

  • 没有报价!

我发现的所有工作都是NVelocity HomepageVelocity Templating Language Reference page,它们都没有为我提供解决方案。

抱歉,我无法为您提供或指出您可以自己测试您的想法的地方,但我们非常欢迎您提出任何建议!

感谢您的帮助;o)

4

2 回答 2

1

我目前正在处理同样的问题,据我了解,这是因为 String 类的 PadLeft 和 PadRight 函数接收第二个参数,即前导“0”,作为一个字符,而不是作为一个字符串.

NVelocity 允许您使用 '0' 将参数指定为字符串,但通过这种方式,它在内部会生成一个强制转换异常(或类似的东西),因为该参数应为 char。

我还没有找到(我从 1 小时开始就使用 NVelocity!)一种将参数指定为 char 的方法,目前我只有一个肮脏的解决方案,例如在之后应用 Replace(" ", "0") PadLeft / PadRight,所以模板变成

$Document.SupplierCode.PadRight(7).Replace(' ', '0')

于 2010-01-21T17:28:33.310 回答
0

一位同事提出的一种解决方案是在 Document 对象中创建另一个属性,该属性返回格式化的字符串:

例如

Public ReadOnly Property SupplierCodeFormatted() As String
    Get
        Return Supplier.Code.PadLeft(7, "0")
    End Get
End Property
于 2009-01-09T13:06:53.977 回答