public static CMEBulletinTableRow ParseLine(string line) { try { var parts = line.Split(new[] { ' ', (char)9, '+' }, StringSplitOptions.RemoveEmptyEntries); if (parts.Length != 14) { return(null); } var row = new CMEBulletinTableRow { Strike = ParseValue(parts[0]) }; if (!row.Strike.HasValue) { return(null); } row.OpenRange = ParseValue(parts[1]); row.High = ParseValue(parts[2]); row.Low = ParseValue(parts[3]); row.ClosingRange = ParseValue(parts[4]); row.SettPrice = ParseValue(parts[5]); row.PtChange = ParseValue(parts[6]); row.Delta = ParseValue(parts[7]); row.Excercises = ParseValue(parts[8]); row.Volume = ParseValue(parts[9]); row.OpenInterest = ParseValue(parts[10]); row.OpenInterestChange = ParseValue(parts[11]); row.ContractHigh = ParseValue(parts[12]); row.ContractLow = ParseValue(parts[13]); return(row); } catch (Exception ex) { Logger.ErrorFormat("CMEBulletinTableRow.ParseLine: \"{0}\", строка [{1}]", ex.Message, line); return(null); } }
public static CMEBulletinTableRow ParseLine(string line) { try { var parts = line.Split(new[] {' ', (char) 9, '+'}, StringSplitOptions.RemoveEmptyEntries); if (parts.Length != 14) return null; var row = new CMEBulletinTableRow {Strike = ParseValue(parts[0])}; if (!row.Strike.HasValue) return null; row.OpenRange = ParseValue(parts[1]); row.High = ParseValue(parts[2]); row.Low = ParseValue(parts[3]); row.ClosingRange = ParseValue(parts[4]); row.SettPrice = ParseValue(parts[5]); row.PtChange = ParseValue(parts[6]); row.Delta = ParseValue(parts[7]); row.Excercises = ParseValue(parts[8]); row.Volume = ParseValue(parts[9]); row.OpenInterest = ParseValue(parts[10]); row.OpenInterestChange = ParseValue(parts[11]); row.ContractHigh = ParseValue(parts[12]); row.ContractLow = ParseValue(parts[13]); return row; } catch (Exception ex) { Logger.ErrorFormat("CMEBulletinTableRow.ParseLine: \"{0}\", строка [{1}]", ex.Message, line); return null; } }
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); }