Вверх ↑
Ответов: 4
Рейтинг: 0
#1: 2017-11-21 18:31:25 ЛС | профиль | цитата
Здравствуйте! Прошу совета (помощи), так как облазил весь с форум с большим количеством поисковых запросов, но ответ на свой так и не нашел.
Цель элементарная: есть текстовый файл (в файле 628 000 элементов), его необходимо открыть, пропустить все символы через фильтры (именно каждый символ), результат внести в текстовый редактор для последующего сохранения. Здесь главным является то, что необходимо проанализировать каждый символ поочереди и в зависимости от предыдущего, анализировать следующий.
Задача вроде элементарная: Файл, перебор элементов строки, фильтры, конечный редактор текста.
Схема: [scroll=]
Add(MultiElement,5452683,651,371)
{
link(onEvent1,6453425:doAdd,[])
}
BEGIN_SDK
Add(EditMulti,14062513,14,7)
{
EventCount=1
WorkCount=1
Width=223
Height=144
link(doWork1,14062513:onEvent1,[])
}
END_SDK
Add(InfoTip,10677425,616,336)
{
Info=#7:Фильтры|
Width=106
Height=102
}
Add(Memo,13721227,413,343)
{
Top=25
Width=400
Height=625
ScrollBars=3
link(onChange,7820137:doEnum,[(464,349)(464,377)])
}
Add(BitBtn,11517881,273,371)
{
Left=165
Top=265
link(onClick,2082917:doExecute,[])
}
Add(ODialog,2082917,343,371)
{
link(onExecute,13721227:doLoad,[])
}
Add(Str_Enum,7820137,525,371)
{
link(onEnum,5452683:doWork1,[])
link(String,13721227:Text,[(531,359)(502,359)(502,403)(419,403)])
}
Add(RichEdit,6453425,819,371)
{
Left=820
Top=40
Width=375
Height=505
ScrollBars=2
InsertCRLF=1
}

Перебор всех элементов (682 000) и их прохождение через фильтры занимает (без добавления в конечный редактор) меньше одной секунды, а если в конце цепи стоит любой визуальный редактор, то это время увеличивается до 200 секунд и более.
Логично предположив, что задержка может быть связана именно с добавлением в визуальный редактор, построил цепочку: Перебор-фильтры-соединение строк (так как каждый элемент идет отдельно)-память-ДуДата-Текстовый редактор
Схема: [scroll=]
Add(MultiElement,5452683,581,378)
{
link(onEvent1,13974535:doStrCat,[])
}
BEGIN_SDK
Add(EditMulti,14062513,14,7)
{
EventCount=1
WorkCount=1
Width=223
Height=144
link(doWork1,14062513:onEvent1,[])
}
END_SDK
Add(InfoTip,10677425,546,343)
{
Info=#7:Фильтры|
Width=106
Height=102
}
Add(Memo,13721227,343,315)
{
Top=25
Width=400
Height=625
Visible=1
ScrollBars=3
link(onChange,7875099:doEvent1,[(394,321)(394,349)])
}
Add(BitBtn,11517881,203,343)
{
Top=5
link(onClick,2082917:doExecute,[])
}
Add(ODialog,2082917,273,343)
{
link(onExecute,13721227:doLoad,[])
}
Add(Str_Enum,7820137,455,378)
{
Delimiter=""
link(onEnum,5452683:doWork1,[])
link(onEndEnum,8064464:doData,[(511,391)(511,461)])
link(String,13721227:Text,[(461,331)(432,331)(432,375)(349,375)])
}
Add(Hub,7875099,406,343)
{
link(onEvent2,7820137:doEnum,[(438,356)(438,384)])
}
Add(StrCat,13974535,672,378)
{
link(onStrCat,7811884:doValue,[])
link(Str1,12480499:Var1,[(678,366)(710,366)(710,422)])
}
Add(Memory,7811884,735,378)
{
}
Add(DoData,8064464,714,455)
{
link(onEventData,15885128:doAdd,[])
link(Data,12480499:Var2,[])
}
Add(Memo,15885128,882,455)
{
Left=250
Top=95
ScrollBars=3
}
Add(GetDataEx,12480499,714,417)
{
Angle=1
link(Data,7811884:Value,[(741,422)])
}

В таком случае время сократилось до 90 секунд, причем как и ранее, время на перебор и прохождение фильтров составляет меньше 1 сек., а вот время на соединение строк и внесение в память как раз составляет 90 сек., внесение результата после окончания перебора в текстовый редактор также составляет менее 1 сек. Т.е. в данном случае весь процесс тормозит соединение строк.

Попробовал третьим вариантом, Редактор-Фильтры-StrList (он не визуальный),затем перенести в редактор строк.
Схема:
[scroll=]
Add(MultiElement,5452683,595,378)
{
link(onEvent1,14607851:doAdd,[])
}
BEGIN_SDK
Add(EditMulti,14062513,14,7)
{
EventCount=1
WorkCount=1
Width=223
Height=144
link(doWork1,14062513:onEvent1,[])
}
END_SDK
Add(InfoTip,10677425,560,343)
{
Info=#7:Фильтры|
Width=106
Height=102
}
Add(Memo,13721227,343,315)
{
Top=25
Width=400
Height=625
Visible=1
ScrollBars=3
link(onChange,7875099:doEvent1,[(394,321)(394,349)])
}
Add(BitBtn,11517881,203,343)
{
Top=5
link(onClick,2082917:doExecute,[])
}
Add(ODialog,2082917,266,343)
{
link(onExecute,13721227:doLoad,[])
}
Add(Str_Enum,7820137,455,378)
{
Delimiter=""
link(onEnum,5452683:doWork1,[])
link(onEndEnum,8222284:doData,[(546,391)(546,482)])
link(String,13721227:Text,[(461,331)(432,331)(432,375)(349,375)])
}
Add(Hub,7875099,406,343)
{
link(onEvent2,7820137:doEnum,[(438,356)(438,384)])
}
Add(StrList,14607851,700,378)
{
}
Add(DoData,8222284,700,476)
{
link(onEventData,8140962:doAdd,[])
link(Data,14607851:Text,[])
}
Add(RichEdit,8140962,770,476)
{
Left=820
Top=40
Width=375
Height=505
ScrollBars=2
InsertCRLF=1
}
Все получилось, результат был добавлен в конечный редактор менее чем за 1 секунду[/b, [b]НО, каждый элемент на новой строчке, а необходимо, что бы элементы шли подряд. StrList единственный элемент, в который можно добавлять символы после перебора без задержки, но в нем отсутствует возможность отключить добавление символов 10 и 13, поэтому все символу в итоге выдаются в виде вертикальной строки.

Я уже пробовал и через массивы добавлять в редактор и МТ потоки, результат тот же - на все уходит 90 сек. и более, хотя сам перебор и проход через фильтры занимает менее 1 сек.

Собственно вопросы и просьба о помощи:
1. Почему весь процесс тормозит соединение строк и есть ли аналог, позволяющий соединить строки без задержек?
2. Если аналога нет, то возможно ли добавление в текстовый редактор символов без указанных задержек?
3. Если опять же нет, то как в StrList отключить добавление символов 10 и 13, так как это единственный список строк, добавление элементов в который происходит мгновенно, но все портят абзацы.
карма: 0

0
Редактировалось 1 раз(а), последний 2017-11-21 18:35:20