| 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: 5543 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: 5543 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 | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | 
		    
		   |