private void ParseSingleFile(String filename) { if (!_anythingCached) { if (!IsCached(filename)) { Download(filename); } else { _anythingCached = true; } } var lReader = new System.IO.StreamReader(HtmlCacheFileName(filename), TambonHelper.ThaiEncoding); String lCurrentLine = String.Empty; PopulationDataEntry lCurrentEntry = null; int lDataState = 0; while ((lCurrentLine = lReader.ReadLine()) != null) { #region parse name if (lCurrentLine.StartsWith(_tableEntryStart)) { String lValue = StripTableHtmlFromLine(lCurrentLine); lCurrentEntry = new PopulationDataEntry(); lCurrentEntry.ParseName(lValue); if (_changwat == null) { _changwat = lCurrentEntry; } else if ((_currentSubEntry == null) | (EntityTypeHelper.SecondLevelEntity.Contains(lCurrentEntry.Type))) { _changwat.SubEntities.Add(lCurrentEntry); _currentSubEntry = lCurrentEntry; } else { _currentSubEntry.SubEntities.Add(lCurrentEntry); } lDataState = 0; } #endregion #region parse population data if (lCurrentLine.StartsWith(_tableDataStart)) { if (lCurrentEntry == null) { throw new ArgumentOutOfRangeException(); } String lValue = StripTableHtmlFromLine(lCurrentLine); if (!String.IsNullOrEmpty(lValue)) { switch (lDataState) { case 0: lCurrentEntry.Male = Int32.Parse(lValue); break; case 1: lCurrentEntry.Female = Int32.Parse(lValue); break; case 2: lCurrentEntry.Total = Int32.Parse(lValue); break; case 3: lCurrentEntry.Households = Int32.Parse(lValue); break; default: throw new ArgumentOutOfRangeException(); } } lDataState++; } #endregion } }