Example #1
0
        /*========================================================*/

        public static FstFile ParseServerFile
        (
            IrbisConnection client,
            string fileName
        )
        {
            FstFile result = new FstFile();

            FileSpecification specification = new FileSpecification
                                              (
                IrbisPath.MasterFile,
                fileName
                                              );
            string content = client.ReadTextFile(specification);

            content = content.Replace("\r", string.Empty);
            foreach (string textLine in content.Split
                     (
                         new[] { '\n' },
                         StringSplitOptions.RemoveEmptyEntries
                     ))
            {
                FstLine fstLine = FstLine.ParseLine(textLine);
                if (fstLine != null)
                {
                    result.Lines.Add(fstLine);
                }
            }

            return(result);
        }
Example #2
0
        /*========================================================*/

        public static FstFile ParseLocalFile
        (
            string fileName
        )
        {
            FstFile result = new FstFile();

            using (StreamReader reader = new StreamReader
                                         (
                       fileName,
                       Encoding.Default
                                         ))
            {
                string textLine;
                while ((textLine = reader.ReadLine()) != null)
                {
                    FstLine fstLine = FstLine.ParseLine(textLine);
                    if (fstLine != null)
                    {
                        result.Lines.Add(fstLine);
                    }
                }
            }

            return(result);
        }
Example #3
0
        static void Main()
        {
            try
            {
                StartTime = DateTime.Now;

                // Устанавливаем обработчик прерывания
                Console.CancelKeyPress += Console_CancelKeyPress;

                ReadConfiguration();

                using (Log = new StreamWriter(LogFileName, true, Encoding.Default))
                {
                    int mfnBefore, mfnAfter;

                    WriteLogLine(new string('=', 70));
                    WriteLogLine("Импорт начат: {0}", StartTime);
                    WriteLogLine(string.Empty);

                    string[] inputFiles = DiscoverFiles();
                    WriteLogLine("Найдено файлов: {0}", inputFiles.Length);
                    if (inputFiles.Length == 0)
                    {
                        WriteLogLine("Нет импортируемых файлов, завершаемся");
                        return;
                    }
                    Array.Sort(inputFiles);

                    using (Client = new IrbisConnection())
                    {
                        //using (Buffer = new RecordBuffer(Client, 100))
                        {
                            //Buffer.Actualize = true;
                            //Buffer.Database = Client.Database;
                            //Buffer.BatchWrite += Buffer_BatchWrite;

                            Client.ParseConnectionString(ConnectionString);
                            WriteLog("Подключение к серверу... ");
                            Client.Connect();
                            WriteLogLine("успешно");

                            Fst = FstFile.ParseServerFile
                                  (
                                Client,
                                FstFileName
                                  );
                            WriteLogLine("Файл FST содержит {0} строк", Fst.Lines.Count);
                            if (Fst.Lines.Count == 0)
                            {
                                WriteLogLine("Плохой файл FST, завершаемся");
                                return;
                            }

                            Magazines = LoadMagazines();
                            WriteLogLine
                            (
                                "Сводных описаний импортируемых журналов в каталоге: {0}",
                                Magazines.Count
                            );
                            if (Magazines.Count == 0)
                            {
                                WriteLogLine("Нет импортируемых журналов в каталоге");
                                return;
                            }

                            mfnBefore = Client.GetMaxMfn();

                            using (Queue = new QueueEngine <RecordTask>
                                           (
                                       Environment.ProcessorCount,
                                       QueueLength
                                           ))
                            {
                                //Queue.Waiting += Queue_Waiting;

                                int index = 0;
                                foreach (string inputFile in inputFiles)
                                {
                                    if (GoOn)
                                    {
                                        ProcessFile
                                        (
                                            ++index,
                                            inputFile
                                        );
                                        if (GoOn && DeleteProcessedFiles)
                                        {
                                            WriteLog("Удаляем файл... ");
                                            File.Delete(inputFile);
                                            WriteLogLine("удален");
                                        }
                                    } // if
                                }     // foreach

                                WriteLogLine("Длина очереди: {0}", Queue.QueueLength);
                                WriteLog("Ожидаем завершения обработки записей в очереди: ");
                            } // using Queue

                            if (!GoOn)
                            {
                                WriteLogLine("Импорт прерван пользователем");
                            }

                            WriteLogLine("Отправка на сервер оставшихся записей");
                        } // using Buffer

                        mfnAfter = Client.GetMaxMfn();
                    } // using Client

                    WriteLogLine("Произведено корректное отключение от сервера");

                    TimeSpan elapsedTime = DateTime.Now - StartTime;
                    WriteLogLine
                    (
                        "Затрачено времени: {0}",
                        elapsedTime
                    );
                    WriteLogLine
                    (
                        "Импортировано файлов: {0}, записей: {1}",
                        FileCount,
                        RecordCount
                    );
                    WriteLogLine
                    (
                        "MFN до={0}, после={1}",
                        mfnBefore,
                        mfnAfter
                    );
                }
            }
            catch (Exception exception)
            {
                Log = null;
                WriteLogLine
                (
                    "ВОЗНИКЛА ОШИБКА: {0}",
                    exception
                );
                WriteLogLine("Аварийное завершение");
            }
        }