using System.Data; using MarketData.CSVHelper; namespace MarketData.MarketDataModel { public class EconomicIndicators : List { public EconomicIndicators() { } public EconomicIndicators(List indicators) { this.AddRange(indicators); } public List GetYears() { if(0==Count)return null; List years=(from EconomicIndicator economicIndicator in this select economicIndicator.Year).Distinct().ToList(); years.Sort(); return years; } public Dictionary GetDictionary() { Dictionary dictionary=new Dictionary(); if(0==Count)return null; for(int index=0;index list=new List(); dictionary.Add(economicIndicator.CountryCode,new EconomicIndicators()); } EconomicIndicators economicIndicators=dictionary[economicIndicator.CountryCode]; economicIndicators.Add(economicIndicator); } List keys=new List(dictionary.Keys); foreach(String key in keys) { dictionary[key].Sort(new EconomicIndicatorByYear()); } return dictionary; } public static EconomicIndicators FromZipFile(String strPathZipFile,String strPathExtractFolder,bool debug=false) { try { if(Directory.Exists(strPathExtractFolder)) { try{Directory.Delete(strPathExtractFolder,true);} catch(Exception exception){MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Unable to delete folder {0}, exception was {1}",strPathExtractFolder,exception.ToString()));} } Directory.CreateDirectory(strPathExtractFolder); List extractFiles=ExtractFileHelper.ExtractToFolder(strPathZipFile,strPathExtractFolder); if(null==extractFiles||0==extractFiles.Count) { MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Could not locate data in zip file {0}",strPathZipFile)); return null; } String strPathExtractFile=(from String strPathExtractFileName in extractFiles where !strPathExtractFileName.Contains("Metadata") select strPathExtractFileName).FirstOrDefault(); if(null==strPathExtractFile) { MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Could not locate data in zip file {0}",strPathZipFile)); return null; } CSVFileExt2 csvFile=new CSVFileExt2(); int dataRow=csvFile.FindLineWith(strPathExtractFile,"Country Name"); if(-1==dataRow) { MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Could not locate start of data in zip file {0}",strPathZipFile)); return null; } csvFile.LoadCSVFile(strPathExtractFile,dataRow); if(0==csvFile.RowCount) { MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Could not locate data in zip file {0}",strPathZipFile)); return null; } if(!debug) { try{File.Delete(strPathZipFile);} catch(Exception exception) { MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Could not remove zip file {0}, exception was {1}",strPathZipFile,exception.ToString())); } } try{Directory.Delete(strPathExtractFolder,true);} catch(Exception exception) { MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Error removing folder {0}, exception was {1}",strPathExtractFolder,exception.ToString())); } return EconomicIndicators.FromDataTable(csvFile.ToDataTable()); } catch(Exception exception) { MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Error extracting economic indicators from zip file {0}, error was {1}",strPathZipFile,exception.ToString())); return null; } finally { if(File.Exists(strPathZipFile)) { try{File.Delete(strPathZipFile);} finally{;} } } } public static EconomicIndicators FromDataTable(DataTable dataTable) { String strValue=null; String strYear=null; try { EconomicIndicators economicIndicators=new EconomicIndicators(); DataColumnCollection columns=dataTable.Columns; DataRowCollection rows=dataTable.Rows; for(int rowIndex=0;rowIndex { public int Compare(EconomicIndicator p1,EconomicIndicator p2) { return p1.Year.CompareTo(p2.Year); } } public class EconomicIndicator { public String Source{get;set;} public String CountryName{get;set;} public String CountryCode{get;set;} public String IndicatorName{get;set;} public String IndicatorCode{get;set;} public double IndicatorValue{get;set;} public int Year{get;set;} } }