Beispiel #1
0
        /// <summary>
        /// Чтение STEP файла и извлечение из каждой текстовой строки трех составляющих сущности: номер, название, параметры
        /// </summary>
        /// <param name="path">Путь к файлу на диске</param>
        /// <returns>Возвращает список базовых сущностей</returns>
        public List <BaseEntity> getAllPrimaryEntities(String path, IExtractOperationsCallback callback)
        {
            //Объявление пустого списка базовых сущностей
            List <BaseEntity> allPrimaryEntities = new List <BaseEntity>();

            //Проверки на правильность пути и существование файла
            if (path != null && path.Length > 0 && File.Exists(path))
            {
                //Строка буфер
                String line;

                // Чтение файла и обработка его по строкам
                using (StreamReader file = new StreamReader(path, Encoding.Default))
                {
                    //"Компиляция" объекта регулярного выражения на основании текстового представления
                    Regex regex = new Regex(PATTERN_PRIMARY);

                    int currentStep  = 5;
                    int progressStep = 0;
                    if (callback != null)
                    {
                        int countLinesInFile = System.IO.File.ReadAllLines(path).Length;
                        progressStep = countLinesInFile > 60 ? countLinesInFile / 60 : 60 / countLinesInFile;
                    }

                    //Цикл выполняется до тех пор, пока результат чтения строк из файла не станет null
                    while ((line = file.ReadLine()) != null)
                    {
                        //Проверка строки на ненулевую длину
                        if (line.Length > 0)
                        {
                            //Получение результата применения регулярного выражения regex к строке line
                            Match match = regex.Match(line);
                            if (!match.Success)
                            {
                                //Если совпадений не найдено, переход к следующей строке
                                continue;
                            }

                            //Получение всех групп результата регулярного выражения
                            //Всего 4 группы, первая группа (0) содержит всю строку, вторая группа (1) содержит номер,
                            //третья группа (2) содержит название, четвертая группа (3) содержит строку параметров
                            //Необходимые номера групп (1,2,3) объявлены выше как константы
                            GroupCollection matchGroups = match.Groups;

                            //Создание новой базовой сущности (для дальнейшего заполнения)
                            BaseEntity baseEntity = new BaseEntity();

                            //Попытка получения номера группы в виде числа из строкового представления
                            int number = -1;
                            if (int.TryParse(matchGroups[MATCH_NUMBER].Value, out number))
                            {
                                //Сохранение полученного номера в сущности
                                baseEntity.Number = number;
                            }
                            else
                            {
                                //В случае ошибки переход к следующей строке файла
                                continue;
                            }

                            //Получение и сохраенение имени сущности
                            baseEntity.Name = matchGroups[MATCH_NAME].Value;

                            //Получение и сохранение параметров сущности
                            baseEntity.Params = new EntityParam(matchGroups[MATCH_PARAMS].Value);

                            //Разбор сторки парметров на составляющие и сохранение их в виде List<List<Параметр>>
                            baseEntity.ParsedParams = parseParams(baseEntity.Params);

                            //Добавление сущности в список сущностей
                            allPrimaryEntities.Add(baseEntity);
                        }

                        if (callback != null)
                        {
                            currentStep += progressStep;
                            callback.extractionStep(currentStep < 65 ? currentStep : 65);
                        }
                    }
                }
            }
            //Возвращение заполненного списка базовых сущностей
            return(allPrimaryEntities);
        }
Beispiel #2
0
 /// <summary>
 /// Конструктор для создания нового объекта, к которому в дальнейшем можно обращаться за результатами.
 /// </summary>
 /// <param name="path">Путь к STEP файлу</param>
 /// <param name="callback">Callback для слежения за процессом и получения результата</param>
 public StepExtractor(string path, IExtractOperationsCallback callback)
 {
     mStepFilePath = path;
     mCallback     = callback;
 }