This is a good example of the difference between # and 0 pattern
characters when unparsing.

With the pattern "0,000", the value "100" will be padded with zero's and
so will unparse to "0,100", which matches the expected length of 5.

However, with the pattern "#,###", the value "100" will unparse to
"100"--no comma is needed and it will not zero pad. But your test1
element is defined as having a length of 5 and the the unparsed value
has a length of 3. In this case, Daffodil uses textNumberPadKind and
related properties (textNumberPadCharacter, textNumberJustification,
etc.) to pad the unparsed value up to the needed 5 characters.

So I would guess that you have textNumberPadKind="padChar",
textNumberPadCharacter="f", and textNumberJustification="left". Those
three properties will cause Daffodil to add extra "f" characters as
padding to the right of the string.

I don't think I would say to never use the '#' character. There are
certainly going to be times where you don't want extra padding
characters, like in some delimited formats where numbers do not have
explicit lengths.

- Steve

On 6/25/19 1:32 PM, Costello, Roger L. wrote:
> Hello DFDL community,
> 
> My input file has this:
> 
> 0,100
> 
> 0,100
> 
> My DFDL schema is this:
> 
> <xs:elementname="input">
> <xs:complexType>
> <xs:sequencedfdl:separator="%NL;"dfdl:separatorPosition="infix">
> <xs:elementname="test1"type="xs:unsignedInt"
>                  dfdl:length="5"dfdl:lengthKind="explicit"
>                  dfdl:textNumberCheckPolicy="strict"
>                  dfdl:textNumberPattern="#,###"/>
> <xs:elementname="test2"type="xs:unsignedInt"
>                  dfdl:length="5"dfdl:lengthKind="explicit"
>                  dfdl:textNumberCheckPolicy="strict"
>                  dfdl:textNumberPattern="0,000"/>
> </xs:sequence>
> </xs:complexType>
> </xs:element>
> 
> The output of parsing is this:
> 
> <input>
> <test1>100</test1>
> <test2>100</test2>
> </input>
> 
> The output of unparsing is this:
> 
> 100ff
> 0,100
> 
> Huh?
> 
> Why am I getting 100ff?
> 
> I think the lesson learned is never use the pound (#) symbol in 
> dfdl:textNumberPattern. Do you agree?
> 
> /Roger
> 

Reply via email to