Вверх ↑
Этот топик читают: Гость
Ответов: 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, так как это единственный список строк, добавление элементов в который происходит мгновенно, но все портят абзацы.

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

0
vip
#1.1контекстная реклама от партнеров
Ответов: 1925
Рейтинг: 172
#2: 2017-11-21 18:38:27 ЛС | профиль | цитата
А так тоже тормозит:

Add(MultiElement,6464093,469,777)
{
link(onEvent1,13974535:doStrCat,[])
}
BEGIN_SDK
Add(EditMulti,15696509,14,7)
{
EventCount=1
WorkCount=1
Width=223
Height=144
}
END_SDK
Add(InfoTip,12950695,434,742)
{
Info=#7:Фильтры|
Width=106
Height=102
}
Add(Memo,6768843,231,714)
{
Top=25
Width=400
Height=625
Visible=1
ScrollBars=3
link(onChange,8473477:doEvent1,[(282,720)(282,748)])
}
Add(BitBtn,12502054,91,742)
{
Top=5
link(onClick,5002783:doExecute,[])
}
Add(ODialog,5002783,161,742)
{
link(onExecute,6768843:doLoad,[])
}
Add(Str_Enum,2608642,343,777)
{
Delimiter=""
link(onEnum,6464093:doWork1,[])
link(onEndEnum,8064464:doData,[(399,790)(399,860)])
link(String,6768843:Text,[(349,730)(320,730)(320,774)(237,774)])
}
Add(Hub,8473477,294,742)
{
link(onEvent2,2608642:doEnum,[(326,755)(326,783)])
}
Add(StrCat,13974535,560,777)
{
link(Str1,13880693:Var1,[(566,765)(554,765)(554,824)])
}
Add(DoData,8064464,602,854)
{
link(onEventData,15885128:doAdd,[])
link(Data,13880693:Var3,[(608,824)])
}
Add(Memo,15885128,770,854)
{
Left=250
Top=95
ScrollBars=3
}
Add(GetDataEx,13880693,560,819)
{
link(Data,13974535:Result,[])
}
?
карма: 9
0
Ответов: 4
Рейтинг: 0
#3: 2017-11-21 18:41:46 ЛС | профиль | цитата
К
3042 писал(а):
А так тоже тормозит:


К сожалению да, я так тоже пробовал, занимает 90 секунд. Что с памятью, что без памяти обычным соединением строк, время одинаковое, т.е. вывод, что в данной схеме тормозит именно соединение строк.
И все бы ничего, но ведь с StrList вся схема отрабатывает менее чем за 1 сек. Следовательно это можно реализовать, но как?

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

0
Ответов: 1925
Рейтинг: 172
#4: 2017-11-21 19:00:46 ЛС | профиль | цитата
А так?

Add(MultiElement,5452683,497,574)
{
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,462,539)
{
Info=#7:Фильтры|
Width=106
Height=102
}
Add(Memo,13721227,245,511)
{
Top=25
Width=400
Height=625
Visible=1
ScrollBars=3
link(onChange,7875099:doEvent1,[(296,517)(296,545)])
}
Add(BitBtn,11517881,105,539)
{
Top=5
link(onClick,2082917:doExecute,[])
}
Add(ODialog,2082917,168,539)
{
link(onExecute,13721227:doLoad,[])
}
Add(Str_Enum,7820137,357,574)
{
Delimiter=""
link(onEnum,5452683:doWork1,[])
link(onEndEnum,7652272:doReplace,[(495,587)(495,678)])
link(String,13721227:Text,[(363,527)(334,527)(334,571)(251,571)])
}
Add(Hub,7875099,308,539)
{
link(onEvent2,7820137:doEnum,[(340,552)(340,580)])
}
Add(StrList,14607851,602,574)
{
}
Add(RichEdit,8140962,672,658)
{
Left=820
Top=40
Width=375
Height=505
ScrollBars=2
InsertCRLF=1
}
Add(Replace,7652272,602,672)
{
SubStr="\r\n"
link(onReplace,8140962:doText,[])
link(Str,14607851:Text,[])
link(Dest,14510793:Value,[(622,646)(650,646)])
}
Add(Memory,14510793,644,588)
{
}
карма: 9
0
Ответов: 4
Рейтинг: 0
#5: 2017-11-21 19:10:11 ЛС | профиль | цитата
3042 писал(а):
А так?


Эх, к сожалению так тоже пробовал, тот же результат(((( Собственно, когда я заметил, что в StrList данные добавляются без задержки времени, это первое, что я сделал.

--- Добавлено в 2017-11-21 19:25:24

Время

Редактировалось 1 раз(а), последний 2017-11-21 19:25:24
карма: 0

0
Ответов: 8886
Рейтинг: 823
#6: 2017-11-21 20:36:54 ЛС | профиль | цитата
skorobeyspb, пять секунд на 640000 символов устроит? (Win7, 3500 МГц, ОЗУ 8 Гб)


Add(MainForm,2953706,777,210)
{
Width=798
Height=306
link(onCreate,12651080:doWork2,[(816,230)(816,251)(172,251)(172,111)])
}
Add(MultiElement,5452683,525,154)
{
link(onEvent1,8598429:doSimvol,[])
}
BEGIN_SDK
Add(EditMulti,14062513,14,7)
{
EventCount=1
WorkCount=1
Width=223
Height=144
link(doWork1,8764461:doReplace,[(67,13)(67,41)])
}
Add(Replace,8764461,77,35)
{
SubStr="\10"
DestStr=" "
link(onReplace,13781638:doReplace,[])
}
Add(Replace,13781638,133,35)
{
SubStr="\13"
link(onReplace,14062513:onEvent1,[(172,41)(172,13)])
}
END_SDK
Add(InfoTip,10677425,490,119)
{
Info=#7:Фильтры|
Width=106
Height=102
}
Add(Memo,13721227,308,140)
{
Left=55
Top=1
Width=360
Height=260
ScrollBars=2
link(onChange,3124031:doTimer,[])
}
Add(BitBtn,11517881,105,91)
{
Top=5
link(onClick,6497433:doEvent1,[])
}
Add(ODialog,2082917,182,49)
{
}
Add(Str_Enum,7820137,441,154)
{
Delimiter=""
link(onEnum,5452683:doWork1,[])
link(onEndEnum,8598429:doStop,[])
link(String,13721227:Text,[(447,131)(398,131)(398,201)(314,201)])
}
Add(Hub,7875099,406,140)
{
OutCount=3
link(onEvent1,8598429:doStart,[(599,146)(599,153)])
link(onEvent2,5765131:doStart,[(431,153)(431,209)])
link(onEvent3,7820137:doEnum,[])
}
Add(RichEdit,8140962,693,133)
{
Left=420
Top=1
Width=360
Height=260
ScrollBars=3
InsertCRLF=1
}
Add(TimeCounter,5765131,693,203)
{
link(onStop,15088095:doString,[])
}
Add(Hub,6417071,658,147)
{
link(onEvent1,8140962:doText,[])
link(onEvent2,5765131:doStop,[(683,160)(683,216)])
}
Add(Hub,6497433,154,91)
{
link(onEvent1,7345710:doClear,[(228,97)(228,118)])
link(onEvent2,12651080:doWork1,[])
}
Add(MultiElement,12651080,182,98)
{
link(onEvent1,12095356:doData,[(221,104)(221,167)])
link(onEvent2,7345710:doAdd,[])
}
BEGIN_SDK
Add(EditMulti,6229223,21,21)
{
EventCount=2
WorkCount=2
Width=391
Height=151
link(doWork1,8604866:doFor,[(39,27)(39,55)])
link(doWork2,14358382:doRandSeed,[(214,34)(214,69)])
}
Add(For,8604866,49,49)
{
End=5500
link(onEvent,3176202:doFor,[])
link(onStop,6229223:onEvent1,[(88,62)(88,27)])
}
Add(For,3176202,105,49)
{
End=9
link(onEvent,8728549:doFor,[])
link(onStop,2882879:doEvent1,[(151,62)(151,146)])
}
Add(For,8728549,161,49)
{
End=9
link(onEvent,14358382:doRandom,[])
link(onStop,15012832:doData,[(207,62)(207,97)])
}
Add(Random,14358382,231,49)
{
Min=224
Max=255
link(onRandom,9397542:doConvert,[])
}
Add(StrCat,14624114,336,49)
{
Point(doClear)
link(Str1,7137491:Var3,[(342,40)(376,40)(376,91)])
}
Add(Convertor,9397542,273,49)
{
Mode=4
link(onResult,8552071:doWork2,[])
}
Add(DoData,15012832,273,91)
{
Data=String( )
link(onEventData,8552071:doWork3,[(319,97)])
}
Add(HubEx,8552071,315,49)
{
link(onEvent,14624114:doStrCat,[])
}
Add(Hub,2882879,287,140)
{
link(onEvent1,15495871:doData,[(333,146)(333,111)])
link(onEvent2,14624114:doClear,[(326,153)(326,62)])
}
Add(DoData,15495871,343,105)
{
link(onEventData,6229223:onEvent2,[(391,111)(391,34)])
link(Data,7137491:Var2,[])
}
Add(GetDataEx,7137491,343,86)
{
Angle=3
link(Data,14624114:Result,[(342,91)])
}
END_SDK
Add(Timer,3124031,357,140)
{
Interval=10
Enable=1
AutoStop=1
link(onTimer,7875099:doEvent1,[])
}
Add(FormatStr,15088095,735,210)
{
Mask="Обработано %1 символов за %2 мсек"
link(onFString,2953706:doCaption,[])
link(Str1,7820137:NumSubStr,[(741,201)(447,201)])
}
Add(StrList,7345710,252,105)
{
}
Add(DoData,12095356,252,161)
{
link(onEventData,13721227:doText,[])
link(Data,7345710:Text,[])
}
Add(InlineCode,8598429,609,147)
{
WorkPoints=#7:doStart|8:doSimvol|6:doStop|
EventPoints=#5:onRes|
VarPoints=#
DataPoints=#
Code=#15:unit HiAsmUnit;|17:// Author Tad 8-)|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|13: ss:string;|9: public|24: onRes : THI_Event;|52: PROCEDURE doStart(var _Data:TData; Index:Word);|53: PROCEDURE doSimvol(var _Data:TData; Index:Word);|51: PROCEDURE doStop(var _Data:TData; Index:Word);|5: end;|0:|14:implementation|0:|30:PROCEDURE THiAsmClass.doStart;|0:|5:BEGIN|9: ss:='';|4:END;|0:|31:PROCEDURE THiAsmClass.doSimvol;|0:|5:BEGIN|25: ss:=ss+toString(_Data);|4:END;|0:|29:PROCEDURE THiAsmClass.doStop;|5:BEGIN|24: _hi_onEvent(onRes,ss);|9: ss:='';|4:END;|0:|4:end.|
link(onRes,6417071:doEvent1,[])
}

карма: 19

0
Ответов: 233
Рейтинг: 12
#7: 2017-11-21 20:54:48 ЛС | профиль | цитата
Леонид писал(а):
skorobeyspb, пять секунд на 640000 символов устроит? (Win7, 3500 МГц, ОЗУ 8 Гб)


Извини, не в тему конечно, но какой проц обрабатывает эту схему 5 секунд?
карма: 2

0
Ответов: 4
Рейтинг: 0
#8: 2017-11-22 00:14:56 ЛС | профиль | цитата
Леонид писал(а):
skorobeyspb, пять секунд на 640000 символов устроит? (Win7, 3500 МГц, ОЗУ 8 Гб)


Я в восторге и шоке одновременно!!! 682 000 символов за 862 м.сек!!! Это шикарно. Леонид, огромное спасибо!
карма: 0

0
Ответов: 8886
Рейтинг: 823
#9: 2017-11-22 00:25:06 ЛС | профиль | цитата
Iliya, вот:
4ядра.jpg
карма: 19

0
Ответов: 16884
Рейтинг: 1239
#10: 2017-11-22 16:38:23 ЛС | профиль | цитата
Леонид, а не пробовал в конец сгенерированного текста добавить нормальное слово, например, "КОНЕЦ"
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 8886
Рейтинг: 823
#11: 2017-11-22 18:56:48 ЛС | профиль | цитата
Tad, а на х, ой, а зачем?
Вообще-то ожидал обвинения в плагиате, т. к. IC использовал ваш
карма: 19

0
Ответов: 16884
Рейтинг: 1239
#12: 2017-11-22 21:30:52 ЛС | профиль | цитата
Леонид писал(а):
а зачем?
Чтобы проверить, а всё обработало или нет.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 8886
Рейтинг: 823
#13: 2017-11-22 22:02:45 ЛС | профиль | цитата
Tad, сдвинуть бегунками в самое окончание массива и без контрольного слова сравнить последние символы, всё так же, но без контрольного, почти нецензурного, слова "конец"
карма: 19

0
Ответов: 16884
Рейтинг: 1239
#14: 2017-11-23 13:43:32 ЛС | профиль | цитата
Леонид писал(а):
сдвинуть бегунками в самое окончание массива и без контрольного слова сравнить последние символы

Леонид19.png

Редактировалось 2 раз(а), последний 2017-11-23 13:47:43
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 8886
Рейтинг: 823
#15: 2017-11-23 15:28:42 ЛС | профиль | цитата
Tad, слева по строкам разбито, справа в одну строку
Tad_21.jpg
карма: 19

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)