Esempio n. 1
0
        /// <summary>
        /// создать XLS-файлы из бюллетеней
        /// </summary>
        private void ProcessDecompressedBulletins()
        {
            var          futuresSummary = new List <CMEFuturesSummary>();
            StreamWriter sw             = null;

            try
            {
                foreach (var fileName in Directory.GetFiles(
                             string.Format("{0}\\{1}", ExecutablePath.ExecPath, FolderTemp),
                             "Section*.pdf"))
                {
                    // получить номер секции
                    var fileNameOnly = Path.GetFileNameWithoutExtension(fileName);
                    if (string.IsNullOrEmpty(fileNameOnly))
                    {
                        continue;
                    }
                    var endIndex      = fileNameOnly.IndexOf('_');
                    var startIndex    = "Section".Length;
                    var sectionString = fileNameOnly.Substring(startIndex, endIndex - startIndex);

                    // отбор только тех бюллетеней, что перечислены в bulletinInfo
                    if (!bulletinInfo.sectionsToParse.Contains(sectionString))
                    {
                        continue;
                    }

                    // преобразовать в текст
                    var fileNameTxt = fileName.Replace(".pdf", ".txt");
                    try
                    {
                        PdfConverter.PdfFileToText(fileName, fileNameTxt);
                    }
                    catch (Exception ex)
                    {
                        Logger.ErrorFormat("Ошибка в PdfFileToText({0}): {1}", fileName, ex);
                        throw;
                    }

                    // преобразовать в XLS
                    var parser = new CMEDocumentParser(fileNameTxt, bulletinInfo, futuresSummary);
                    if (!parser.Parsed)
                    {
                        continue;
                    }

                    // создать поток вывода (один на все файлы)
                    if (sw == null)
                    {
                        var nameXls = string.Format("{0}\\{1}\\_{2:ddMMyyyy}.xls",
                                                    ExecutablePath.ExecPath, FolderTemp, parser.DocumentDate);
                        sw = new StreamWriter(nameXls, false, Encoding.Unicode);
                    }
                    parser.WriteTablesInExcelFormat(sw);
                    // записать информацию по фьючерсам в отдельный файл
                    if (futuresSummary.Count > 0)
                    {
                        var minDate     = futuresSummary.Min(fs => fs.DocumentDate);
                        var maxDate     = futuresSummary.Max(fs => fs.DocumentDate);
                        var sumFileName = string.Format("{0}\\{1}\\_{2:ddMMyy}_{3:ddMMyy}.txt",
                                                        ExecutablePath.ExecPath, FolderTemp, minDate, maxDate);
                        CMEDocumentParser.WriteFutureSummary(sumFileName, futuresSummary);
                    }
                }
            }
            finally
            {
                if (sw != null)
                {
                    sw.Close();
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// создать XLS-файлы из бюллетеней
        /// </summary>
        private void ProcessDecompressedBulletins()
        {
            var futuresSummary = new List<CMEFuturesSummary>();
            StreamWriter sw = null;
            try
            {
                foreach (var fileName in Directory.GetFiles(
                    string.Format("{0}\\{1}", ExecutablePath.ExecPath, FolderTemp),
                    "Section*.pdf"))
                {
                    // получить номер секции
                    var fileNameOnly = Path.GetFileNameWithoutExtension(fileName);
                    if (string.IsNullOrEmpty(fileNameOnly)) continue;
                    var endIndex = fileNameOnly.IndexOf('_');
                    var startIndex = "Section".Length;
                    var sectionString = fileNameOnly.Substring(startIndex, endIndex - startIndex);

                    // отбор только тех бюллетеней, что перечислены в bulletinInfo
                    if (!bulletinInfo.sectionsToParse.Contains(sectionString)) continue;

                    // преобразовать в текст
                    var fileNameTxt = fileName.Replace(".pdf", ".txt");
                    try
                    {
                        PdfConverter.PdfFileToText(fileName, fileNameTxt);
                    }
                    catch (Exception ex)
                    {
                        Logger.ErrorFormat("Ошибка в PdfFileToText({0}): {1}", fileName, ex);
                        throw;
                    }

                    // преобразовать в XLS
                    var parser = new CMEDocumentParser(fileNameTxt, bulletinInfo, futuresSummary);
                    if (!parser.Parsed) continue;

                    // создать поток вывода (один на все файлы)
                    if (sw == null)
                    {
                        var nameXls = string.Format("{0}\\{1}\\_{2:ddMMyyyy}.xls",
                            ExecutablePath.ExecPath, FolderTemp, parser.DocumentDate);
                        sw = new StreamWriter(nameXls, false, Encoding.Unicode);
                    }
                    parser.WriteTablesInExcelFormat(sw);
                    // записать информацию по фьючерсам в отдельный файл
                    if (futuresSummary.Count > 0)
                    {
                        var minDate = futuresSummary.Min(fs => fs.DocumentDate);
                        var maxDate = futuresSummary.Max(fs => fs.DocumentDate);
                        var sumFileName = string.Format("{0}\\{1}\\_{2:ddMMyy}_{3:ddMMyy}.txt",
                            ExecutablePath.ExecPath, FolderTemp, minDate, maxDate);
                        CMEDocumentParser.WriteFutureSummary(sumFileName, futuresSummary);
                    }
                }
            }
            finally
            {
                if (sw != null) sw.Close();
            }
        }