/// <summary> /// Retrieve the price paid records from a land registry .csv file /// </summary> /// <param name="filePath"></param> /// <returns></returns> public IEnumerable <HouseSaleDataCsvRow> GetRows() { _parser.TextFieldType = FieldType.Delimited; _parser.SetDelimiters(","); String[] currentRow = null; List <HouseSaleDataCsvRow> pricePaidRecords = new List <HouseSaleDataCsvRow>(); while (!_parser.EndOfData) { currentRow = _parser.ReadFields(); try { HouseSaleDataCsvRow record = BuildPricePaidRecordFromRowFields(currentRow); pricePaidRecords.Add(record); } catch (MalformedLineException ex) { // TODO: NLog Console.WriteLine("Row: {0}, Error: {1}", currentRow[TransactionIdentifierIndex], ex.Message); } } return(pricePaidRecords.AsReadOnly()); }
/// <summary> /// Build a new PricePaidRecord from the row fields /// </summary> /// <param name="fields"></param> /// <returns></returns> private HouseSaleDataCsvRow BuildPricePaidRecordFromRowFields(String[] fields) { HouseSaleDataCsvRow newRecord = new HouseSaleDataCsvRow(); newRecord.Id = ParseTransactionIdentifier(fields[TransactionIdentifierIndex]); newRecord.Price = decimal.Parse(fields[PriceIndex]); newRecord.DateOfTransfer = DateTime.Parse(fields[DateOfTransferIndex]); newRecord.Postcode = fields[PostcodeIndex]; newRecord.PropertyType = ParsePropertyType(fields[PropertyTypeIndex]); newRecord.NewBuild = ParseNewBuild(fields[NewBuildIndex]); newRecord.Holding = ParseHolding(fields[HoldingIndex]); newRecord.PrimaryAddressName = fields[PrimaryAddressIndex]; newRecord.SecondaryAddressName = fields[SecondaryAddressIndex]; newRecord.Street = fields[StreetIndex]; newRecord.Locality = fields[LocalityIndex]; newRecord.TownOrCity = fields[TownOrCityIndex]; newRecord.District = fields[DistrictIndex]; newRecord.County = fields[CountyIndex]; newRecord.PPDCategory = ParsePPDCategory(fields[PPDCategoryIndex]); newRecord.RecordStatus = ParseRecordStatus(fields[RecordStatusIndex]); return(newRecord); }