Author |
Message
|
happyj |
Posted: Mon Dec 24, 2012 4:24 am Post subject: TDS parsing query - repeating element with null values |
|
|
Voyager
Joined: 07 Feb 2005 Posts: 87
|
Hello there. - I Dont know if anyone is still working but worth a try anyway.
I am trying to use the TDS MRM Parser on WMB 6.1.0.3 to parse a delimited data structure.
My data consists of a variable number of delimited fields and so I have set the
message set to contain a tag delimited format with the delimiter set as | ( Pipe)
and supress absent delimiters as 'Never'
On the message definition file I have a type (set to All Elements Delimited) with a single
repeating element DATA_RECORD (string type) (Min Occurs 1, Max Occurs -1)
The data is being parsed as:
2012-12-24 11:26:16.539885 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '9'.
2012-12-24 11:26:16.550056 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '33'.
2012-12-24 11:26:16.550217 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '41'.
2012-12-24 11:26:16.550364 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '78'.
2012-12-24 11:26:16.550482 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '82'.
2012-12-24 11:26:16.550606 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '91'.
2012-12-24 11:26:16.550730 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '102'.
2012-12-24 11:26:16.550856 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '115'.
2012-12-24 11:26:16.550974 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '120'.
2012-12-24 11:26:16.551130 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '166'.
2012-12-24 11:26:16.551287 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '208'.
2012-12-24 11:26:16.551407 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '214'.
2012-12-24 11:26:16.551529 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '221'.
2012-12-24 11:26:16.551645 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '224'.
2012-12-24 11:26:16.551764 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '228'.
2012-12-24 11:26:16.551886 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '235'.
2012-12-24 11:26:16.552034 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '239'.
2012-12-24 11:26:16.552155 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '244'.
2012-12-24 11:26:16.552288 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '245'.
2012-12-24 11:26:16.552389 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '246'.
2012-12-24 11:26:16.552485 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '247'.
2012-12-24 11:26:16.552589 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '257'.
2012-12-24 11:26:16.552713 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '266'.
2012-12-24 11:26:16.552837 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '277'.
2012-12-24 11:26:16.552961 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '288'.
2012-12-24 11:26:16.553076 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '289'.
2012-12-24 11:26:16.553173 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '291'.
2012-12-24 11:26:16.553293 54 UserTrace BIP5607I: The end of the bit stream has been reached at byte '307'.
i.e the parser has seen 27 delimiters, (28 data fields) including some null input fields.
The null fields are
2012-12-24 11:26:16.552288 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '245'.
2012-12-24 11:26:16.552389 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '246'.
2012-12-24 11:26:16.552485 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '247'.
and
2012-12-24 11:26:16.553076 54 UserTrace BIP5610I: ''|'' has been matched as a repeating element delimiter for ''/IN_MSG'' at byte '289'.
The MRM parser is however only seeing 24 fields
(0x01000021:Name+):MRM = ( ['mrm' : 0x1037abaf0]
(0x0300000B:NameValue+):DATA_RECORD = 'AAAAAAAA' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'BBBBBBBBBBBBBBBBBBBBB' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'CCCCCCC' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'EEE' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'FFFFFFFF' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'GGGGGGGGGG' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'HHHHHHHHHHHH' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'IIII' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = '* please do not use *' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'LLLL' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'MMM' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'NN' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'OO' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'PPPPPP' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'QQQ' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'RRR' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'SSSSSSSS' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'TTTTTT' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'UUUUU' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'VVVVVVVVVV' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'W' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'XXXXXXXXXXXX' (CHARACTER)
)
)
The infocenter says that for NULL fields to be interpreted set
Nillable = true
TDS Encoding Null = 'NullLiteralValue'
TDS Encoding Null Value = ''
but this is not changing what I see in the trace.
The structure I am looking for is
(0x01000021:Name+):MRM = ( ['mrm' : 0x1037abaf0]
(0x0300000B:NameValue+):DATA_RECORD = 'AAAAAAAA' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'BBBBBBBBBBBBBBBBBBBBB' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'CCCCCCC' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'EEE' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'FFFFFFFF' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'GGGGGGGGGG' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'HHHHHHHHHHHH' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'IIII' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = '* please do not use *' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'LLLL' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'MMM' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'NN' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'OO' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'PPPPPP' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'QQQ' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'RRR' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = '' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = '' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = '' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'SSSSSSSS' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'TTTTTT' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'UUUUU' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'VVVVVVVVVV' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = '' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'W' (CHARACTER)
(0x0300000B:NameValue+):DATA_RECORD = 'XXXXXXXXXXXX' (CHARACTER)
)
)
Any help is much appreciated
Thank you |
|
Back to top |
|
 |
kimbert |
Posted: Sat Dec 29, 2012 11:45 am Post subject: |
|
|
 Jedi Council
Joined: 29 Jul 2003 Posts: 5542 Location: Southampton
|
You are on the right track If you set up the TDS parser correctly, you will get all 28 fields in the message tree, and the empty fields will be set to NULL ( that is the explicit ESQL value NULL, not the empty string ). |
|
Back to top |
|
 |
happyj |
Posted: Wed Jan 02, 2013 12:57 am Post subject: |
|
|
Voyager
Joined: 07 Feb 2005 Posts: 87
|
Thanks
Any hints on which settings to try or the section of the documentation to re-read?
Is it related to
Nillable = true
TDS Encoding Null = 'NullLiteralValue'
TDS Encoding Null Value = '' |
|
Back to top |
|
 |
kimbert |
Posted: Wed Jan 02, 2013 1:51 am Post subject: |
|
|
 Jedi Council
Joined: 29 Jul 2003 Posts: 5542 Location: Southampton
|
|
Back to top |
|
 |
happyj |
Posted: Wed Jan 02, 2013 2:12 am Post subject: |
|
|
Voyager
Joined: 07 Feb 2005 Posts: 87
|
Thanks I will try this again. |
|
Back to top |
|
 |
|