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 関数が、2 番目のパラメーターである先頭の「0」を文字列ではなく文字として受け取ることが原因であると理解しています。 .

NVelocity では、'0' を使用してパラメーターを文字列として指定できますが、この方法では内部的にキャスト例外 (または同様のもの) が生成されます。これは、パラメーターが char として想定されているためです。

パラメータを char として指定する方法をまだ見つけていません (1 時間前から NVelocity を使用しているだけです!)。 PadLeft / PadRight であるため、テンプレートは次のようになります。

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

于 2010-01-21T17:28:33.310 に答える
0

同僚が思いついた解決策の1つは、フォーマットされた文字列を返す別のプロパティをDocumentオブジェクトに作成することです。

例えば

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