Skip to content

Commit

Permalink
ускорил чтение фич
Browse files Browse the repository at this point in the history
рефакторинг
удалил пустые строки
добавил TODO на проблемные участки
  • Loading branch information
artbear committed Sep 15, 2018
1 parent ad2c922 commit 9e44bdf
Showing 1 changed file with 46 additions and 54 deletions.
100 changes: 46 additions & 54 deletions lib/featurereader/vbFeatureReader/vbFeatureReader/Ext/ObjectModule.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -1301,7 +1301,7 @@


ДвДанныеФичи = СтрТаблицаУжеСуществующихСценариев.ДвоичныеДанные;
ИмяВременнойФичи = ПолучитьИмяВременногоФайла("feature");
ИмяВременнойФичи = ПолучитьИмяВременногоФайла("feature");//TODO подумать об ускорении через Потоки или другой алгоритм
ДвДанныеФичи.Записать(ИмяВременнойФичи);


Expand Down Expand Up @@ -1338,11 +1338,8 @@

МассивСценариевЗащитаОтЗацикливанияКеш.Удалить(МассивСценариевЗащитаОтЗацикливанияКеш.Количество()-1);



СкопироватьСтрокиСценарияВУказаннуюСтроку(СтрСтрокиШагов,ПромДерево,НРег(НовыйStepDefinition),СтрТаблицаУжеСуществующихСценариев.ИмяФайла);


КонецЕсли;

КонецЕсли;
Expand All @@ -1353,7 +1350,6 @@

БылаОшибка = Ложь;


Если ЕстьЗаменаТаблицыПримеров Тогда
ТаблицаСтрокПримеров = ЗаменитьТаблицуПримеровНаПереданнуюТаблицу(ПередаваемыеТаблицы[ПередаваемыеТаблицы.Количество()-1]);
КонецЕсли;
Expand Down Expand Up @@ -1939,7 +1935,7 @@
Возврат Тзн;
КонецФункции

Функция ФичаИмеетКорректныеОтступыВНачалеСтрок(Тзн,ИмяФайла,ИмяФайлаОригинальное)
Функция ПроверитьЧтоФичаИмеетКорректныеОтступыВНачалеСтрок(Тзн, ИмяФайлаОригинальное)
Статус = Истина;
ВыводилИмяФичи = Ложь;

Expand Down Expand Up @@ -2034,17 +2030,16 @@
Тзн.Колонки.Добавить("НельзяСоздаватьОбласть");
Тзн.Колонки.Добавить("КлючевоеСлово");

Текст = Новый ЧтениеТекста;
Текст.Открыть(ИмяФайла,"UTF-8");
//TODO подумать об ускорении через Потоки или другой алгоритм вместо передачи и чтения временного файла
МассивСтрокФайла = ЗагрузитьФайлВМассив(ИмяФайла);

НомСтр = 0;
Пока Истина Цикл
Стр = Текст.ПрочитатьСтроку();
Если Стр = Неопределено Тогда
Прервать;
КонецЕсли;
Для каждого Стр Из МассивСтрокФайла Цикл

Если Лев(СокрЛП(Стр),1) = "#" Тогда
СтрокаБезЛевыхПробелов = СокрЛ(Стр);
СтрокаБезПробелов = СокрП(СтрокаБезЛевыхПробелов);

Если Лев(СтрокаБезЛевыхПробелов, 1) = "#" Тогда
ПозицияПоиска = Найти(Стр, ТэгУказанияЯзыка);
Если ПозицияПоиска > 0 Тогда
СтрокаЯзыка = СокрЛП(Сред(Стр, ПозицияПоиска+СтрДлина(ТэгУказанияЯзыка)));
Expand All @@ -2054,8 +2049,7 @@
КонецЕсли;
КонецЕсли;


Если НРег(СокрЛП(Стр)) = "@tree" Тогда
Если НРег(СтрокаБезПробелов) = "@tree" Тогда
НадоСтроитьДерево = Истина;
КонецЕсли;

Expand All @@ -2066,50 +2060,30 @@
СтрТзн.НомСтр = НомСтр;
КонецЦикла;

Текст.Закрыть();



ПредыдущийОтступ = 0;
Если НадоСтроитьДерево Тогда
Текст = Новый ЧтениеТекста;
Текст.Открыть(ИмяФайла,"UTF-8");

Ном = -1;
Пока Истина Цикл
Ном = Ном + 1;

Стр = Текст.ПрочитатьСтроку();
Если Стр = Неопределено Тогда
Прервать;
КонецЕсли;


Для Ном = 0 По Тзн.Количество() - 1 Цикл

СтрТзн = Тзн[Ном];
СтрТзн.ЗначениеОтступа = ВычислитьЗначениеОтступа(СтрТзн.Стр,ПредыдущийОтступ);
СтрТзн.ЗначениеОтступа = ВычислитьЗначениеОтступа(СтрТзн.Стр, ПредыдущийОтступ);
СтрТзн.ПредыдущийОтступ = ПредыдущийОтступ;
СтрТзн.СледующийОступ = СтрТзн.ЗначениеОтступа;

Если Ном > 0 Тогда
Тзн[Ном-1].СледующийОступ = СтрТзн.ЗначениеОтступа;
КонецЕсли;


ПредыдущийОтступ = СтрТзн.ЗначениеОтступа;
КонецЦикла;

Текст.Закрыть();



ЕстьПримеры = Ложь;
КолСтрок = Тзн.Количество()-1;
ОбойтиТаблицуОтступов(Тзн,КолСтрок,ЕстьПримеры);
ОбойтиТаблицуОтступов(Тзн, КолСтрок, ЕстьПримеры);

Если ЕстьПримеры Тогда
СтрокаСШагом = Неопределено;
Для Ккк = 0 По КолСтрок-1 Цикл
Для Ккк = 0 По КолСтрок-1 Цикл //TODO исправить ошибку чтения последнего примера - д.б. По КолСтрок
ТекСтрокаТзн = Тзн[Ккк];

Если ТекСтрокаТзн.Примеры = Истина Тогда
Expand All @@ -2122,21 +2096,14 @@
Если Не ЭтоНеСтрокаСШагом_ОпределимПоПервомуСимволу(ТекСтрокаТзн.Стр) Тогда
СтрокаСШагом = ТекСтрокаТзн;
КонецЕсли;



КонецЦикла;

//ОбойтиТаблицуОтступов(Тзн,КолСтрок,ЕстьПримеры);
КонецЕсли;

Если Не ФичаИмеетКорректныеОтступыВНачалеСтрок(Тзн,ИмяФайла,ИмяФайлаОригинальное) Тогда
//НадоСтроитьДерево = Ложь;
КонецЕсли;
ПроверитьЧтоФичаИмеетКорректныеОтступыВНачалеСтрок(Тзн, ИмяФайлаОригинальное);
КонецЕсли;




Возврат Тзн;
КонецФункции

Expand All @@ -2149,8 +2116,8 @@
Возврат Ложь;
КонецФункции

Процедура ОбойтиТаблицуОтступов(Тзн,КолСтрок,ЕстьПримеры)
Для Ккк = 0 По КолСтрок-1 Цикл
Процедура ОбойтиТаблицуОтступов(Тзн, КолСтрок, ЕстьПримеры)
Для Ккк = 0 По КолСтрок-1 Цикл //TODO ?? исправить ошибку чтения последней строки - д.б. По КолСтрок
ТекСтрокаТзн = Тзн[КолСтрок - Ккк];
ПредСтрокаТзн = Тзн[КолСтрок - Ккк - 1];

Expand Down Expand Up @@ -2494,7 +2461,7 @@

Если НРег(УниверсальноеИмяФайла) = НРег(ИмяФайла) Тогда
ФайлВременнаяФича = ПолучитьИмяВременногоФайла("feature");
Элем.ДвоичныеДанные.Записать(ФайлВременнаяФича);
Элем.ДвоичныеДанные.Записать(ФайлВременнаяФича);//TODO подумать об ускорении через Потоки или другой алгоритм
КонецЕсли;
КонецЦикла;
КонецЕсли;
Expand Down Expand Up @@ -3754,7 +3721,7 @@
Возврат Текст.Прочитать();
КонецФункции

Функция ПолучитьСледующуюСтрокуМодуля(СтрТзн,Тзн)
Функция ПолучитьСледующуюСтрокуМодуля(СтрТзн, Тзн)
Индекс = Тзн.Индекс(СтрТзн);
Если Индекс = Тзн.Количество()-1 Тогда
Возврат Неопределено;
Expand Down Expand Up @@ -4685,7 +4652,7 @@

//очистим содержимое функции
КолСтрок = ТелоМодуля.Количество();
Для Ккк = 0 По КолСтрок-1 Цикл
Для Ккк = 0 По КолСтрок-1 Цикл //TODO ?? исправить ошибку чтения последней строки - д.б. По КолСтрок
ИдСтроки = КолСтрок - Ккк - 1;

СтрокаМодуля = ТелоМодуля[ИдСтроки];
Expand Down Expand Up @@ -5974,6 +5941,31 @@

КонецФункции

// TODO исправить дублирование с bddRunner
Функция ЗагрузитьФайлВМассив(Знач ИмяФайла, РезМассив = Неопределено)
Если РезМассив <> Неопределено Тогда
Массив = РезМассив;
Иначе
Массив = Новый Массив;
КонецЕсли;

Текст = Новый ЧтениеТекста;
Текст.Открыть(ИмяФайла, "UTF-8");

Пока Истина Цикл
Стр = Текст.ПрочитатьСтроку();
Если Стр = Неопределено Тогда
Прервать;
КонецЕсли;

Массив.Добавить(Стр);
КонецЦикла;

Текст.Закрыть();

Возврат Массив;
КонецФункции

ЭтоУФ = Ложь;

СоответствиеТаблицПереводов = Новый Соответствие;
Expand Down

0 comments on commit 9e44bdf

Please sign in to comment.