private bool ParseTxtDocument(string fileName, CMETickerInfoCollection bulletinInfo) { // получить секцию из имени файла int sectionNum; if (!GetSectionNumFromFileName(fileName, out sectionNum)) { return(false); } SectionNum = sectionNum.ToString(); // получить набор таблиц (экспирация - опцион - тип опциона) CMEBulletinTable curTable = null; bool docDateParsed = false; CMETickerInfo curTicker = null; CMEBulletinReference curTickerRef = null; using (var sr = new StreamReader(fileName, Encoding.Unicode)) { while (!sr.EndOfStream) { // парсинг даты var line = sr.ReadLine(); try { if (!docDateParsed) { docDateParsed = IsDateRow(line); continue; } // строка содержит месяц экспирации? line = line.Trim(' ', (char)9); var parts = line.Split(new[] { ' ', (char)9 }, StringSplitOptions.RemoveEmptyEntries); if (parts.Length == 0) { continue; } var em = ExpirationMonth.Parse(parts[0]); if (em != null) { if (curTicker != null && curTickerRef != null) { // создать таблицу if (curTable != null) { tables.Add(curTable); } curTable = new CMEBulletinTable { ExpMonth = em, OptStyle = curTickerRef.OptionStyle, OptType = curTickerRef.OptionType, SpotSymbol = curTicker.SpotSymbol, StrikeToBaseRatio = curTicker.StrikeToBaseRatio, PremiumToBaseRatio = curTicker.PremiumToBaseRatio, InvertRate = curTicker.InvertRate }; } continue; } // строка содержит заголовок? // EURO FX C (EU) // BRIT PND-P EU CMETickerInfo tick; CMEBulletinReference tickRef; if (bulletinInfo.FindTicker(parts, out tick, out tickRef, SectionNum)) { if (futuresInfo != null) { if (futuresInfo.Ticker == null) { futuresInfo.Ticker = tick; } } curTicker = tick; curTickerRef = tickRef; continue; } var row = CMEBulletinTableRow.ParseLine(line); if (row != null && curTable != null) { curTable.rows.Add(row); } if (row == null) // строка содержит данные по фьючам? { var summ = CheckFutureInfoLine(parts); if (summ != null) { futuresInfo = summ; } } } catch (Exception ex) { Logger.ErrorFormat("CMEDocumentParser.ParseTxtDocument parse line: \"{0}\", line:[{1}]", ex.Message, line); } } } try { CMEBulletinTable.MergeSameTables(tables); } catch (Exception ex) { Logger.Error("CMEDocumentParser.ParseTxtDocument MergeSameTables", ex); } return(true); }
private bool ParseTxtDocument(string fileName, CMETickerInfoCollection bulletinInfo) { // получить секцию из имени файла int sectionNum; if (!GetSectionNumFromFileName(fileName, out sectionNum)) return false; SectionNum = sectionNum.ToString(); // получить набор таблиц (экспирация - опцион - тип опциона) CMEBulletinTable curTable = null; bool docDateParsed = false; CMETickerInfo curTicker = null; CMEBulletinReference curTickerRef = null; using (var sr = new StreamReader(fileName, Encoding.Unicode)) { while (!sr.EndOfStream) { // парсинг даты var line = sr.ReadLine(); try { if (!docDateParsed) { docDateParsed = IsDateRow(line); continue; } // строка содержит месяц экспирации? line = line.Trim(' ', (char) 9); var parts = line.Split(new[] {' ', (char) 9}, StringSplitOptions.RemoveEmptyEntries); if (parts.Length == 0) continue; var em = ExpirationMonth.Parse(parts[0]); if (em != null) { if (curTicker != null && curTickerRef != null) { // создать таблицу if (curTable != null) tables.Add(curTable); curTable = new CMEBulletinTable { ExpMonth = em, OptStyle = curTickerRef.OptionStyle, OptType = curTickerRef.OptionType, SpotSymbol = curTicker.SpotSymbol, StrikeToBaseRatio = curTicker.StrikeToBaseRatio, PremiumToBaseRatio = curTicker.PremiumToBaseRatio, InvertRate = curTicker.InvertRate }; } continue; } // строка содержит заголовок? // EURO FX C (EU) // BRIT PND-P EU CMETickerInfo tick; CMEBulletinReference tickRef; if (bulletinInfo.FindTicker(parts, out tick, out tickRef, SectionNum)) { if (futuresInfo != null) if (futuresInfo.Ticker == null) futuresInfo.Ticker = tick; curTicker = tick; curTickerRef = tickRef; continue; } var row = CMEBulletinTableRow.ParseLine(line); if (row != null && curTable != null) curTable.rows.Add(row); if (row == null) // строка содержит данные по фьючам? { var summ = CheckFutureInfoLine(parts); if (summ != null) futuresInfo = summ; } } catch (Exception ex) { Logger.ErrorFormat("CMEDocumentParser.ParseTxtDocument parse line: \"{0}\", line:[{1}]", ex.Message, line); } } } try { CMEBulletinTable.MergeSameTables(tables); } catch (Exception ex) { Logger.Error("CMEDocumentParser.ParseTxtDocument MergeSameTables", ex); } return true; }