Beispiel #1
0
        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;
        }