Domanda

Sto usando il motore di template NVelocity per produrre un output di campo a lunghezza fissa - conosci il genere di cose:

Field        Start Pos   Field Length  Notes
----------   ---------   ------------  ---------
Supplier      1           7            Leading Zeros
GRN           8           9            -
...

e.g.
>0001234    123A<

Il problema è Sto provando a chiamare String.PadRight () con il sovraccarico per specificare lo zero iniziale e NVelocity non ne ha nessuno.

Funziona:

$Document.SupplierCode.PadRight(7)

Ma questo non:

$Document.SupplierCode.PadRight(7,"0")

Ho provato:

  • Virgolette singole ( '0' )

  • Doppie virgolette singole ( '' 0 '' )

  • Virgolette doppie ( " 0 " )

  • Doppie virgolette doppie ( " " 0 " " )

  • Escap delle virgolette per tutto quanto sopra ( \ " 0 \ " )

  • Nessuna citazione!

Tutto quello su cui ho trovato lavoro è la Homepage di NVelocity e la Pagina di riferimento del linguaggio Templating di velocità , il nether mi sta indicando una soluzione .

Mi dispiace, non sono in grado di fornirti o indicarti un luogo in cui puoi testare le tue idee, ma qualsiasi suggerimento tu possa avere sarà il benvenuto!

Grazie per l'aiuto; o)

È stato utile?

Soluzione 2

Una soluzione trovata da un collega è quella di creare un'altra proprietà nell'oggetto Document che restituisca la stringa formattata:

per es.

Public ReadOnly Property SupplierCodeFormatted() As String
    Get
        Return Supplier.Code.PadLeft(7, "0")
    End Get
End Property

Altri suggerimenti

Al momento sto affrontando lo stesso problema, per quanto ne so, è dovuto al fatto che le funzioni PadLeft e PadRight della classe String ricevono il secondo parametro, il principale "0", come carattere, non come una stringa.

NVelocity ti consente di specificare il parametro come stringa usando '0', ma in questo modo internamente genera un'eccezione di cast (o qualcosa di simile), perché il parametro è previsto come char.

Non ho ancora trovato (sto usando NVelocity da 1 ora!) un modo per specificare il parametro come char, al momento ho solo una soluzione sporca come applicare un Sostituisci (" " ;, " 0 ") dopo PadLeft / PadRight, quindi il modello diventa

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top