Example #1
0
        static void Main(string[] args)
        {
            if (args.Length < 3)
            {
                return;
            }

            string connectionString = args[0];

            _period = args[1];
            string fileName = args[2];

            try
            {
                _list = new List <PeriodInfo>();
                _year = _period.Substring(0, 4);

                using (_writer = new StreamWriter(fileName))
                    using (_connection = new IrbisConnection(connectionString))
                    {
                        _manager = new MagazineManager(_connection);
                        MagazineInfo[] allMagazines = _manager.GetAllMagazines();
                        foreach (MagazineInfo magazine in allMagazines)
                        {
                            ProcessMagazine(magazine);
                        }

                        _list = _list.OrderBy(i => i.Title).ToList();

                        _writer.WriteLine("<h3>");
                        _writer.WriteLine(Resources.MagazineRegistrationForPeriod);
                        _writer.WriteLine(HtmlText.Encode(_period));
                        _writer.WriteLine("</h3>");
                        _writer.WriteLine("<table border='1' cellpadding='3' cellspacing='0'>");
                        _writer.WriteLine("<tr>");
                        _writer.WriteLine(Resources.MagazineTitle);
                        _writer.WriteLine(Resources.ExpectedIssueNumbers);
                        _writer.WriteLine(Resources.RegisteredIssues);
                        _writer.WriteLine(Resources.MissedIssues);
                        _writer.WriteLine("</tr>");
                        foreach (PeriodInfo info in _list)
                        {
                            PrintMagazine(info);
                        }
                        _writer.WriteLine("</table>");
                    }
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception);
            }
        }
Example #2
0
 static void PrintMagazine
 (
     [NotNull] PeriodInfo info
 )
 {
     _writer.WriteLine("<tr>");
     _writer.WriteLine("<td>");
     _writer.WriteLine(HtmlText.Encode(info.Title));
     _writer.WriteLine("</td>");
     _writer.WriteLine("<td>");
     _writer.WriteLine(HtmlText.Encode(info.Registered));
     _writer.WriteLine("</td>");
     _writer.WriteLine("</tr>");
 }
Example #3
0
 public void HtmlText_Encode_1()
 {
     Assert.AreEqual(string.Empty, HtmlText.Encode(string.Empty));
     Assert.AreEqual("&quot;Hello&quot;", HtmlText.Encode("\"Hello\""));
     Assert.AreEqual("&num;5", HtmlText.Encode("#5"));
     Assert.AreEqual("&amp;5", HtmlText.Encode("&5"));
     Assert.AreEqual("&apos;Hello&apos;", HtmlText.Encode("'Hello'"));
     Assert.AreEqual("&lt;10", HtmlText.Encode("<10"));
     Assert.AreEqual("&gt;10", HtmlText.Encode(">10"));
     Assert.AreEqual("Hello&nbsp;World", HtmlText.Encode("Hello\x00A0World"));
     Assert.AreEqual("&cent;10", HtmlText.Encode("\x00A210"));
     Assert.AreEqual("&pound;10", HtmlText.Encode("\x00A310"));
     Assert.AreEqual("&yen;10", HtmlText.Encode("\x00A510"));
     Assert.AreEqual("&sect;10", HtmlText.Encode("\x00A710"));
     Assert.AreEqual("&copy; by me", HtmlText.Encode("\x00A9 by me"));
     Assert.AreEqual("Hel&shy;lo", HtmlText.Encode("Hel\x00ADlo"));
     Assert.AreEqual("&reg; 2017", HtmlText.Encode("\x00AE 2017"));
     Assert.AreEqual("&euro;10", HtmlText.Encode("\x20AC10"));
 }
Example #4
0
        static void Main(string[] args)
        {
            if (args.Length != 3)
            {
                Console.WriteLine
                (
                    "RecordDumper <connection-string> "
                    + "<search-expression> <output-file>"
                );

                return;
            }

            string connectionString = args[0];
            string searchExpression = args[1];
            string outputFileName   = args[2];

            try
            {
                JObject config
                    = JsonUtility.ReadObjectFromFile("dumperConfig.json");
                int   etalonTag   = config["etalonTag"].Value <int>();
                int[] excludeTags = config["excludeTags"]
                                    .Values <int>().ToArray();
                string[] excludePages = config["excludePages"]
                                        .Values <string>().ToArray();

                using (IrbisProvider provider = ProviderManager
                                                .GetAndConfigureProvider(connectionString))
                    using (StreamWriter writer = TextWriterUtility.Create
                                                 (
                               outputFileName,
                               IrbisEncoding.Utf8
                                                 ))
                    {
                        FileSpecification specification = new FileSpecification
                                                          (
                            IrbisPath.MasterFile,
                            provider.Database,
                            "WS31.OPT"
                                                          );
                        IrbisOpt opt = IrbisOpt.LoadFromServer
                                       (
                            provider,
                            specification
                                       );
                        if (ReferenceEquals(opt, null))
                        {
                            throw new IrbisException("Can't load OPT file!");
                        }

                        int[] found = provider.Search(searchExpression);
                        Console.WriteLine("Found: {0}", found.Length);

                        foreach (int mfn in found)
                        {
                            MarcRecord record = provider.ReadRecord(mfn);
                            if (ReferenceEquals(record, null))
                            {
                                continue;
                            }
                            string title = record.FM(etalonTag);
                            if (string.IsNullOrEmpty(title))
                            {
                                continue;
                            }

                            string wsName = opt.SelectWorksheet(opt.GetWorksheet(record));
                            if (string.IsNullOrEmpty(wsName))
                            {
                                continue;
                            }
                            specification = new FileSpecification
                                            (
                                IrbisPath.MasterFile,
                                provider.Database,
                                wsName + ".ws"
                                            );
                            WsFile worksheet = WsFile.ReadFromServer
                                               (
                                provider,
                                specification
                                               );
                            if (ReferenceEquals(worksheet, null))
                            {
                                continue;
                            }

                            Console.WriteLine("MFN={0}: {1}", mfn, title);
                            writer.WriteLine("<h3>{0}</h3>", title);

                            string description = provider.FormatRecord(record, "@");
                            writer.WriteLine(description);

                            RecordField[] fields = record.Fields
                                                   .Where(field => !field.Tag.OneOf(excludeTags))
                                                   .ToArray();

                            writer.WriteLine
                            (
                                "<table border=\"1\" "
                                + "cellpadding=\"3\" "
                                + "cellspacing=\"0\" "
                                + ">"
                            );
                            writer.WriteLine
                            (
                                "<tr bgcolor=\"black\">"
                                + "<th style=\"color:white;text-align:left;\">Поле</th>"
                                + "<th style=\"color:white;text-align:left;\">Подполе</th>"
                                + "<th style=\"color:white;text-align:left;\">Значение</th>"
                                + "</tr>"
                            );
                            foreach (WorksheetPage page in worksheet.Pages)
                            {
                                if (page.Name.OneOf(excludePages))
                                {
                                    continue;
                                }

                                int[] tags = page.Items
                                             .Select(item => item.Tag)
                                             .Select(NumericUtility.ParseInt32)
                                             .ToArray();
                                if (!fields.Any(field => field.Tag.OneOf(tags)))
                                {
                                    continue;
                                }
                                writer.WriteLine
                                (
                                    "<tr><td colspan=\"3\"><b>Вкладка «{0}»</b></td></tr>",
                                    page.Name
                                );

                                foreach (WorksheetItem item in page.Items)
                                {
                                    if (string.IsNullOrEmpty(item.Tag))
                                    {
                                        continue;
                                    }

                                    int tag = NumericUtility.ParseInt32(item.Tag);
                                    if (tag <= 0)
                                    {
                                        continue;
                                    }

                                    RecordField[] itemFields = fields.GetField(tag);
                                    for (int i = 0; i < itemFields.Length; i++)
                                    {
                                        RecordField field = itemFields[i];
                                        title = item.Title;
                                        title = StringUtility.Sparse(title);
                                        if (i != 0)
                                        {
                                            title = string.Format
                                                    (
                                                "(повторение {0})",
                                                i + 1
                                                    );
                                        }
                                        int rowspan = 1;
                                        if (string.IsNullOrEmpty(field.Value))
                                        {
                                            rowspan = 1 + field.SubFields.Count;
                                        }
                                        writer.WriteLine
                                        (
                                            "<tr><td rowspan=\"{0}\" \"width=\"{1}\"><b>{2}</b></td><td colspan=\"2\"><b>{3}</b></td></tr>",
                                            rowspan,
                                            FirstWidth,
                                            field.Tag,
                                            HtmlText.Encode(title)
                                        );

                                        if (!string.IsNullOrEmpty(field.Value))
                                        {
                                            writer.WriteLine
                                            (
                                                "<tr><td colspan=\"2\">&nbsp;</td><td>{0}</td></tr>",
                                                HtmlText.Encode(field.Value)
                                            );
                                        }

                                        if (item.EditMode == "5")
                                        {
                                            string inputInfo = item.InputInfo
                                                               .ThrowIfNull("item.InputInfo");

                                            // Поле с подполями
                                            specification = new FileSpecification
                                                            (
                                                IrbisPath.MasterFile,
                                                provider.Database,
                                                inputInfo
                                                            );
                                            WssFile wss = WssFile.ReadFromServer
                                                          (
                                                provider,
                                                specification
                                                          );
                                            if (ReferenceEquals(wss, null))
                                            {
                                                Console.WriteLine
                                                (
                                                    "Can't load: " + inputInfo
                                                );
                                            }
                                            else
                                            {
                                                foreach (WorksheetItem line in wss.Items)
                                                {
                                                    char     code     = line.Tag.FirstChar();
                                                    SubField subField = field.GetFirstSubField(code);
                                                    if (!ReferenceEquals(subField, null))
                                                    {
                                                        writer.WriteLine
                                                        (
                                                            "<tr>"
                                                            + "<td width=\"{0}\"><b>{1}</b>: {2}</td>"
                                                            + "<td width=\"{3}\">{4}</td></tr>",
                                                            SecondWidth,
                                                            CharUtility.ToUpperInvariant(code),
                                                            HtmlText.Encode(line.Title),
                                                            ThirdWidth,
                                                            HtmlText.Encode(subField.Value)
                                                        );
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            writer.WriteLine("</table>");
                        }
                    }
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception);
            }
        }