| Author | 
		  Message
		 | 
		
		  | akashdwolf | 
		  
		    
			  
				 Posted: Mon Oct 15, 2018 9:51 am    Post subject: Remove extra comma from fixed length output using DFDL | 
				     | 
			   
			 
		   | 
		
		
		   Apprentice
 
 Joined: 09 Feb 2017 Posts: 28 Location: Mumbai 
  | 
		  
		    
			  
				I am doing XML to Fixed Length Conversion using DFDL.
 
I need to create 3 lines for 3 incoming complexTypes and do padding for all the elements with a space.
 
I am able to do this but after every element a comma is added,I need help to remove the comma.
 
 
Below is the flow order:
 
HTTPInput -->Comput-->Fileoutput
 
 
 
Below is the esql code:
 
 
CREATE COMPUTE MODULE TEST_Compute
 
	CREATE FUNCTION Main() RETURNS BOOLEAN
 
	BEGIN
 
    SET OutputRoot.DFDL = InputRoot.XMLNSC;		
 
   	END;
 
END MODULE;
 
 
Below is the DFDL:
 
 
<?xml version="1.0" encoding="UTF-8"?>
 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:ibmDfdlExtn="http://www.ibm.com/dfdl/extensions" xmlns:ibmSchExtn="http://www.ibm.com/schema/extensions" xmlns:recSepFieldsFmt="http://www.ibm.com/dfdl/RecordSeparatedFieldFormat">
 
    <xsd:import namespace="http://www.ibm.com/dfdl/RecordSeparatedFieldFormat" schemaLocation="../IBMdefined/RecordSeparatedFieldFormat.xsd" />
 
    <xsd:annotation>
 
        <xsd:appinfo source="http://www.ogf.org/dfdl/">
 
            <dfdl:format encoding="{$dfdl:encoding}" escapeSchemeRef="" occursCountKind="implicit" ref="recSepFieldsFmt:RecordSeparatedFieldsFormat" />
 
        </xsd:appinfo>
 
    </xsd:annotation>
 
    <xsd:complexType name="Header">
 
        <xsd:sequence dfdl:sequenceKind="ordered" dfdl:separatorPolicy="suppressedAtEndLax">
 
            <xsd:element dfdl:length="30" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="Structure" type="xsd:string" />
 
            <xsd:element dfdl:length="10" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="Action" type="xsd:string" />
 
            <xsd:element dfdl:length="20" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="UserWhoCreated" type="xsd:string" />
 
            <xsd:element dfdl:length="26" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="UserWhoCreatedTS" type="xsd:string" />
 
            <xsd:element dfdl:length="20" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="UserWhoUpdated" type="xsd:string" />
 
            <xsd:element dfdl:length="26" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="UserWhoUpdatedTS" type="xsd:string" />
 
        </xsd:sequence>
 
    </xsd:complexType>
 
    <xsd:complexType name="Entity">
 
        <xsd:sequence dfdl:sequenceKind="ordered">
 
            <xsd:element dfdl:length="50" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="businessName" type="xsd:string" />
 
            <xsd:element dfdl:length="50" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="address1" type="xsd:string" />
 
            <xsd:element dfdl:length="50" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="address2" type="xsd:string" />
 
            <xsd:element dfdl:length="40" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="city" type="xsd:string" />
 
            <xsd:element dfdl:length="3" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="state" type="xsd:string" />
 
            <xsd:element dfdl:length="3" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="country" type="xsd:string" />
 
            <xsd:element dfdl:length="11" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="postalCode" type="xsd:string" />
 
            <xsd:element dfdl:length="15" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="phone" type="xsd:string" />
 
            <xsd:element dfdl:length="10" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="phoneExtension" type="xsd:string" />
 
        </xsd:sequence>
 
    </xsd:complexType>
 
    <xsd:complexType name="PersonalDetails">
 
        <xsd:sequence dfdl:sequenceKind="ordered">
 
            <xsd:element dfdl:length="50" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="Name" type="xsd:string" />
 
            <xsd:element dfdl:length="40" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="city" type="xsd:string" />
 
            <xsd:element dfdl:length="3" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="state" type="xsd:string" />
 
            <xsd:element dfdl:length="3" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="country" type="xsd:string" />
 
            <xsd:element dfdl:length="11" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="postalCode" type="xsd:string" />
 
            <xsd:element dfdl:length="15" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="phone" type="xsd:string" />
 
        </xsd:sequence>
 
    </xsd:complexType>
 
    <xsd:complexType name="CustomerRequest">
 
        <xsd:sequence dfdl:sequenceKind="ordered">
 
            <xsd:element dfdl:terminator="%CR;%LF;" name="Header" nillable="false" type="Header" />
 
            <xsd:element dfdl:terminator="%CR;%LF;" name="corporateEntity" nillable="false" type="Entity" maxOccurs="1" />
 
            <xsd:element dfdl:terminator="%CR;%LF;" name="PersonalDetails" nillable="false" type="PersonalDetails" maxOccurs="unbounded" />
 
        </xsd:sequence>
 
    </xsd:complexType>
 
    <xsd:element dfdl:lengthKind="implicit" ibmSchExtn:docRoot="true" name="CreateCustomerRequest" type="CustomerRequest" />
 
</xsd:schema>
 
 
Input Request:
 
 
<CreateCustomerRequest>
 
    <Header>
 
        <Structure></Structure>
 
        <Action>CREATE</Action>
 
        <UserWhoCreated>TEST</UserWhoCreated>
 
        <UserWhoCreatedTS>0001-01-01-00.00.00.000000</UserWhoCreatedTS>
 
        <UserWhoUpdated>TEST</UserWhoUpdated>
 
        <UserWhoUpdatedTS>0001-01-01-00.00.00.000000</UserWhoUpdatedTS>
 
    </Header>
 
    <corporateEntity>
 
        <businessName>Marine International</businessName>
 
        <address1>One Marine drive</address1>
 
        <address2>One Marine drive</address2>
 
        <city>Fort Lauradel</city>
 
        <state>FL</state>
 
        <country>USA</country>
 
        <postalCode>32111</postalCode>
 
        <phone>101</phone>
 
        <phoneExtension>91</phoneExtension>
 
    </corporateEntity>
 
    <PersonalDetails>
 
        <Name>Marine1 International</Name>
 
        <city>Fort Lauradel</city>
 
        <state>FL</state>
 
        <country>USA</country>
 
        <postalCode>32111</postalCode>
 
        <phone>101</phone>
 
    </PersonalDetails>
 
</CreateCustomerRequest>
 
 
 
 
Current Output:
 
                              ,CREATE    ,TEST                ,0001-01-01-00.00.00.000000,TEST                ,0001-01-01-00.00.00.000000
 
,Marine International                              ,One Marine drive                                  ,One Marine drive                                  ,Fort Lauradel                           ,FL ,USA,32111      ,101            ,91        
 
,Marine1 International                             ,Fort Lauradel                           ,FL ,USA,32111      ,101            
 
 
 
Expected Output:
 
                              CREATE    TEST                0001-01-01-00.00.00.000000TEST                0001-01-01-00.00.00.000000
 
Marine International                              One Marine drive                                  One Marine drive                                  Fort Lauradel                           FL USA32111      101            91        
 
Marine1 International                             Fort Lauradel                           FL USA32111      101            
 
 
 
How can I remove these commas?
 
 
Thanks in advance !!! | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | Vitor | 
		  
		    
			  
				 Posted: Mon Oct 15, 2018 9:56 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		    Grand High Poobah
 
 Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA 
  | 
		  
		    
			  
				How did you create the DFDL? It's importing the RecordSeparatedFieldFormat, which IIRC comes out of the CSV wizard and defaults to a comma as a separator. _________________ Honesty is the best policy.
 
Insanity is the best defence. | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | akashdwolf | 
		  
		    
			  
				 Posted: Mon Oct 15, 2018 10:03 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Apprentice
 
 Joined: 09 Feb 2017 Posts: 28 Location: Mumbai 
  | 
		  
		    
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | akashdwolf | 
		  
		    
			  
				 Posted: Mon Oct 15, 2018 10:06 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Apprentice
 
 Joined: 09 Feb 2017 Posts: 28 Location: Mumbai 
  | 
		  
		    
			  
				| Actally I refered smuktineni's post from that link but I did not use COBOL. | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | Vitor | 
		  
		    
			  
				 Posted: Mon Oct 15, 2018 10:25 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		    Grand High Poobah
 
 Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA 
  | 
		  
		    
			  
				
   
	| akashdwolf wrote: | 
   
  
	| Actally I refered smuktineni's post from that link but I did not use COBOL. | 
   
 
 
 
OK, but that doesn't really say anything about what you did, just that you read the post first. 
 
 
So:
 
 
- did you use one of the wizards; if so which one?
 
- if you used record oriented text (and if you didn't, I've found your problem) what setting did you select?
 
 
Let's start there. _________________ Honesty is the best policy.
 
Insanity is the best defence. | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | timber | 
		  
		    
			  
				 Posted: Mon Oct 15, 2018 10:41 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		    Grand Master
 
 Joined: 25 Aug 2015 Posts: 1292
  
  | 
		  
		    
			  
				As Vitor pointed out, this line:
   
	| Code: | 
   
  
	| <xsd:import namespace="http://www.ibm.com/dfdl/RecordSeparatedFieldFormat" schemaLocation="../IBMdefined/RecordSeparatedFieldFormat.xsd" />  | 
   
 
...is importing a set of DFDL properties designed for delimited formats. Your format is not delimited - it's a fixed-length format.
 
 
If I was modelling this I would probably not bother to import any default format. DFDL will tell you (via errors) when you haven't set a mandatory property. Fix the errors until DFDL stops reporting them, and you'll be good to go. | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | akashdwolf | 
		  
		    
			  
				 Posted: Mon Oct 15, 2018 10:49 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Apprentice
 
 Joined: 09 Feb 2017 Posts: 28 Location: Mumbai 
  | 
		  
		    
			  
				Thanks Vitor for replying,
 
 
I followed the below steps:
 
 
New Message Model-->Record-oriented Text-->Create an emptyDFDL schema file,I will model my data using DFDL schema editor
 
 
Below DFDL was created along with default IBM XSD RecordSeparatedFieldFormat.xsd:
 
 
<?xml version="1.0" encoding="UTF-8"?>
 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:ibmDfdlExtn="http://www.ibm.com/dfdl/extensions" xmlns:ibmSchExtn="http://www.ibm.com/schema/extensions" xmlns:recSepFieldsFmt="http://www.ibm.com/dfdl/RecordSeparatedFieldFormat">
 
    <xsd:import namespace="http://www.ibm.com/dfdl/RecordSeparatedFieldFormat" schemaLocation="../IBMdefined/RecordSeparatedFieldFormat.xsd" />
 
    <xsd:annotation>
 
        <xsd:appinfo source="http://www.ogf.org/dfdl/">
 
            <dfdl:format encoding="{$dfdl:encoding}" escapeSchemeRef="" occursCountKind="implicit" ref="recSepFieldsFmt:RecordSeparatedFieldsFormat" />
 
        </xsd:appinfo>
 
    </xsd:annotation>
 
</xsd:schema>
 
 
After this I manually pasted the schema.
  Last edited by akashdwolf on Mon Oct 15, 2018 11:24 am; edited 1 time in total | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | Vitor | 
		  
		    
			  
				 Posted: Mon Oct 15, 2018 10:50 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		    Grand High Poobah
 
 Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA 
  | 
		  
		    
			  
				
   
	| timber wrote: | 
   
  
	As Vitor pointed out, this line:
   
	| Code: | 
   
  
	| <xsd:import namespace="http://www.ibm.com/dfdl/RecordSeparatedFieldFormat" schemaLocation="../IBMdefined/RecordSeparatedFieldFormat.xsd" />  | 
   
 
...is importing a set of DFDL properties designed for delimited formats. Your format is not delimited - it's a fixed-length format. | 
   
 
 
 
I was hoping for a "Doh!" moment when the OP realizes there's a radio button he missed (well that's how I duplicated his problem.......)
 
 
   
	| timber wrote: | 
   
  
	| If I was modelling this I would probably not bother to import any default format. DFDL will tell you (via errors) when you haven't set a mandatory property. Fix the errors until DFDL stops reporting them, and you'll be good to go. | 
   
 
 
 
 
 
 
It's a nice simple format and I doubt using a wizard would be that much faster. _________________ Honesty is the best policy.
 
Insanity is the best defence. | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | Vitor | 
		  
		    
			  
				 Posted: Mon Oct 15, 2018 10:52 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		    Grand High Poobah
 
 Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA 
  | 
		  
		    
			  
				
   
	| akashdwolf wrote: | 
   
  
	
 
Below DFDL was created along with default IBM XSD RecordSeparatedFieldFormat.xsd: | 
   
 
 
 
A record separated field format will not work for your fixed length data. If your data is not fixed length but is space delimited, then you need to set that up.
 
 
   
	| akashdwolf wrote: | 
   
  
	| After this I manually pasted the schema. | 
   
 
 
 
Having cut it from where? _________________ Honesty is the best policy.
 
Insanity is the best defence. | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | Vitor | 
		  
		    
			  
				 Posted: Mon Oct 15, 2018 10:55 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		    Grand High Poobah
 
 Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA 
  | 
		  
		    
			  
				If it was me, and it isn't, I'd go with @timber's suggestion.
 
 
Start again with a blank schema.
 
 
Don't import any of the IBM schemas unless you're sure you need them (tip: you don't).
 
 
Model the types and the messages.
 
 
Bask in the triumph.
 
 
This will be much faster than trying to fix what you have. _________________ Honesty is the best policy.
 
Insanity is the best defence. | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | akashdwolf | 
		  
		    
			  
				 Posted: Mon Oct 15, 2018 12:43 pm    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Apprentice
 
 Joined: 09 Feb 2017 Posts: 28 Location: Mumbai 
  | 
		  
		    
			  
				Thanks timber and Vitor.
 
I made the suggested changes and its working now.    | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | 
		    
		   |