Click here to Skip to main content
15,885,032 members
Articles / Programming Languages / C#

Wrapper Class for Parsing Fixed-Width, Multiple Section Files

Rate me:
Please Sign up or sign in to vote.
4.07/5 (4 votes)
21 Apr 2006CPOL8 min read 51.5K   1.1K   33  
An article describing a wrapper class to import very large multiple section reports, typically from a legacy system, into the modern SQL Server or other RDBMS.
<!-- 
Entity: 
Section.Length '1' Based from first line after StartString Found.
Section.Length > 0 = No End String Needed, stop reading at number of lines. Next section is next line.
Section.Length = 0 = Detail Line = Traditional Fixed Width, Multiple Rows of Data. Footer defined by 
Footer character.
StartString = Character + Number of empty spaces
EndString for Single Line Sections.
When StartIndex = -1, Field inherits from previous row. Thus, the header must contain all
Foriegn Key data, allowing the Detail & Footer Sections to be synchronized.
-->
<RecordDefinition>
	<SECTION Name="RDPAPHeader" Length="7" StartString="1\n" SectionFormat="Header">
		<FIELD Name="RunDate" StartIndex="77" Length="8" DataType="String" LineNumber="0" />
		<FIELD Name="CheckDate" StartIndex="105" Length="8" DataType="DateTime" LineNumber="0" />
		<FIELD Name="Publisher" StartIndex="11" Length="30" DataType="String" LineNumber="2" />
		<FIELD Name="PubCode" StartIndex="51" Length="5" DataType="Int32" LineNumber="2" />
		<FIELD Name="Title" StartIndex="7" Length="27" DataType="String" LineNumber="3" />
		<FIELD Name="TitleCode" StartIndex="47" Length="5" DataType="String" LineNumber="3" />
		<FIELD Name="TCCheckDigit" StartIndex="53" Length="1" DataType="String" LineNumber="3" />
		<FIELD Name="Issue" StartIndex="64" Length="4" DataType="String" LineNumber="3" />
		<FIELD Name="Year" StartIndex="77" Length="4" DataType="String" LineNumber="3" />
		<FIELD Name="CoverPrice" StartIndex="97" Length="7" DataType="String" LineNumber="3" />
	</SECTION>
	<SECTION Name="RDPAPDetails" Length="0" EndString="0" SectionFormat="FixedWidth">
		<FIELD Name="PubCode" StartIndex="-1" Length="5" DataType="Int32" LineNumber="0" />
		<FIELD Name="TitleCode" StartIndex="-1" Length="5" DataType="String" LineNumber="0" />
		<FIELD Name="Issue" StartIndex="-1" Length="4" DataType="String" LineNumber="0" />
		<FIELD Name="Year" StartIndex="-1" Length="4" DataType="String" LineNumber="0" />
		<FIELD Name="RetailerCode" StartIndex="2" Length="6" LineNumber="0" DataType="Int32" />
		<FIELD Name="RCCheckDigit" StartIndex="9" Length="1" LineNumber="0" DataType="Int32" />
		<FIELD Name="RetailerName" StartIndex="12" Length="27" LineNumber="0" DataType="String" />
		<FIELD Name="RetailerCity" StartIndex="39" Length="13" LineNumber="0" DataType="String" />
		<FIELD Name="RetailerState" StartIndex="52" Length="2" LineNumber="0" DataType="String" />
		<FIELD Name="NoStores" StartIndex="56" Length="7" LineNumber="0" DataType="Decimal" />
		<FIELD Name="DrawCopies" StartIndex="62" Length="11" LineNumber="0" DataType="Int32" />
		<FIELD Name="AvgPerDrawStore" StartIndex="73" Length="11" LineNumber="0" DataType="Decimal" />
		<FIELD Name="SaleCopies" StartIndex="83" Length="10" LineNumber="0" DataType="Int32" />
		<FIELD Name="AvgPerSaleStore" StartIndex="98" Length="5" LineNumber="0" DataType="Decimal" />
		<FIELD Name="SalePercent" StartIndex="105" Length="4" LineNumber="0" DataType="Decimal" />
		<FIELD Name="AllowanceAmount" StartIndex="111" Length="11" LineNumber="0" DataType="Decimal" />
		<FIELD Name="AllowanceRateAmount" StartIndex="123" Length="8" LineNumber="0" DataType="Decimal" />
	</SECTION>
	<SECTION Name="RDPAPFooter" Length="4" SectionFormat="Footer">
		<FIELD Name="PubCode" StartIndex="-1" Length="5" DataType="Int32" LineNumber="0" />
		<FIELD Name="TitleCode" StartIndex="-1" Length="5" DataType="String" LineNumber="0" />
		<FIELD Name="Issue" StartIndex="-1" Length="4" DataType="String" LineNumber="0" />
		<FIELD Name="Year" StartIndex="-1" Length="4" DataType="String" LineNumber="0" />	
		<FIELD Name="NoStores" StartIndex="56" Length="7" LineNumber="0" DataType="Decimal" />
		<FIELD Name="DrawCopies" StartIndex="62" Length="11" LineNumber="0" DataType="Int32" />
		<FIELD Name="AvgPerDrawStore" StartIndex="73" Length="11" LineNumber="0" DataType="Decimal" />
		<FIELD Name="SaleCopies" StartIndex="83" Length="10" LineNumber="0" DataType="Int32" />
		<FIELD Name="AvgPerSaleStore" StartIndex="98" Length="5" LineNumber="0" DataType="Decimal" />
		<FIELD Name="SalePercent" StartIndex="105" Length="4" LineNumber="0" DataType="Decimal" />
		<FIELD Name="AllowanceAmount" StartIndex="111" Length="11" LineNumber="0" DataType="Decimal" />
		<FIELD Name="AdministrationCharge" StartIndex="111" Length="11" LineNumber="1" DataType="Decimal" />
		<FIELD Name="TotalCharge" StartIndex="111" Length="11" LineNumber="2" DataType="Decimal" />
	</SECTION>
</RecordDefinition>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
United States United States
Tampa, FL developer with about 11 years of experience.

Comments and Discussions