Вверх ↑
Этот топик читают: Гость
Ответов: 45
Рейтинг: 4
#16: 2015-03-04 11:00:14 ЛС | профиль | цитата
Tad писал(а):
А я имел в виду поиск всех повторяющихся строк в списке строк.
Разницу улавливаешь ?

А разве я не тоже самое имел в виду? Не?
Есть строка, которую надо в списке найти столько раз, сколько она есть. Тут словами играть можно хоть как

Tad писал(а):
И тут без ArrayEnum или For (перебор всех строк списка) никак.

Про перебор я уже уяснил. Остановился на ArrayEnum, вроде как все устроило.
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#17: 2015-03-04 11:23:15 ЛС | профиль | цитата
DRc писал(а):
А разве я не тоже самое имел в виду? Не?
Может быть ты и имел "тоже самое" ввиду, но почти все подсказки тебе, говорят о том, что подсказывающие тебя не поняли.

DRc писал(а):
Можно как то сделать, чтобы поиск по списку выводил все варианты, а не первый попавшийся?
DRc писал(а):
Есть строка, которую надо в списке найти столько раз, сколько она есть.
Вот это и слов меньше и всем понятно.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
1
Голосовали:DRc
Разработчик
Ответов: 26164
Рейтинг: 2127
#18: 2015-03-04 11:27:41 ЛС | профиль | цитата
А не быстрее было бы искать прямо в тексте, никуда его не загружая
карма: 22

1
Голосовали:Tad
Ответов: 45
Рейтинг: 4
#19: 2015-03-04 11:54:59 ЛС | профиль | цитата
nesco писал(а):
А не быстрее было бы искать прямо в тексте, никуда его не загружая

Это через SearchInFile?
Add(MainForm,2953706,21,105)
{
Width=313
Height=222
link(onCreate,3389893:doSave,[])
}
Add(SearchInFile,14037412,196,252)
{
FileName="SIF.txt"
link(onSearch,9300043:doCompare,[])
link(Text,8549512:Var2,[])
}
Add(Edit,4029089,203,196)
{
Left=15
Top=15
Width=270
Text="123"
}
Add(StrList,3389893,119,84)
{
FileName="SIF.txt"
Strings=#3:123|3:321|6:123123|3:321|3:456|
}
Add(Button,12509312,126,252)
{
Left=15
Top=45
Caption="Search"
link(onClick,14037412:doSearch,[])
}
Add(Memo,7358780,322,259)
{
Left=15
Top=75
Width=270
ScrollBars=2
}
Add(If_else,9300043,252,259)
{
link(onTrue,7358780:doAdd,[])
link(Op2,8549512:Var3,[(265,243)])
}
Add(GetDataEx,8549512,203,238)
{
link(Data,4029089:Text,[])
}

------------ Дoбавленo в 11.54:
Да, скорость значительно быстрей.
Add(MainForm,2953706,14,105)
{
Width=306
Height=474
link(onCreate,10876761:doFor,[])
}
Add(SearchInFile,14037412,196,252)
{
FileName="SIF.txt"
Point(onEnd)
Point(NumStr)
link(onSearch,9300043:doCompare,[])
link(Text,8549512:Var2,[])
link(onEnd,603773:doStop,[(240,272)(240,268)(79,268)(79,265)])
}
Add(Edit,4029089,189,168)
{
Left=15
Top=15
Width=270
Text="123"
}
Add(StrList,3389893,168,84)
{
FileName="SIF.txt"
Strings=#3:123|3:321|6:123123|3:321|3:456|
}
Add(Button,12509312,35,252)
{
Left=15
Top=45
Caption="Search"
link(onClick,603773:doStart,[])
}
Add(Memo,7358780,385,259)
{
Left=15
Top=80
Width=270
ScrollBars=2
link(Str,14037412:NumStr,[(391,247)(297,247)(297,296)(202,296)])
}
Add(If_else,9300043,252,259)
{
link(onTrue,7358780:doAdd,[])
link(Op2,829905:Var2,[])
}
Add(GetDataEx,8549512,203,238)
{
link(Data,4029089:Text,[(209,219)(195,219)])
}
Add(TimeCounter,603773,91,252)
{
link(onStart,9910596:doEvent1,[])
link(onStop,10268:doText,[(209,265)(209,314)])
}
Add(Label,10268,252,308)
{
Left=76
Top=46
}
Add(For,10876761,70,119)
{
End=200000
link(onEvent,3389893:doAdd,[(135,125)(135,90)])
link(onStop,3389893:doSave,[(135,132)(135,125)])
}
Add(Memory,1115968,259,210)
{
Point(Data)
link(Data,8549512:Var3,[(265,198)(239,198)(239,243)])
}
Add(Hub,9910596,140,252)
{
link(onEvent1,15373729:doWork2,[(206,258)(206,216)])
link(onEvent2,14037412:doSearch,[(175,265)(175,258)])
}
Add(Button,5025775,42,462)
{
Left=15
Top=320
Caption="Search"
link(onClick,2408488:doStart,[])
}
Add(TimeCounter,2408488,98,462)
{
link(onStart,6970297:doEvent1,[])
link(onStop,10189651:doText,[(156,475)(156,524)])
}
Add(Hub,6970297,147,462)
{
link(onEvent1,15373729:doWork3,[(167,468)(167,219)])
link(onEvent2,3008004:doEnum,[(171,475)(171,468)])
}
Add(ArrayEnum,3008004,182,462)
{
link(onItem,14401021:doCompare,[])
link(onEndEnum,2408488:doStop,[(226,475)(226,565)(86,565)(86,475)])
link(Array,3389893:Array,[])
}
Add(Memo,8927946,287,462)
{
Left=75
Top=320
Width=210
Height=110
link(Str,3008004:Index,[(293,450)(272,450)(272,506)(195,506)])
}
Add(If_else,14401021,231,462)
{
link(onTrue,8927946:doAdd,[])
link(Op2,829905:Var1,[(244,250)])
}
Add(GetDataEx,829905,259,245)
{
link(Data,1115968:Value,[])
}
Add(HubEx,15373729,217,210)
{
link(onEvent,1115968:doValue,[])
}
Add(Label,10189651,182,518)
{
Left=17
Top=342
}
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#20: 2015-03-04 12:03:03 ЛС | профиль | цитата

Add(MainForm,2953706,336,399)
{
Width=306
Height=474
}
Add(SearchInFile,14037412,448,350)
{
FileName="SIF.txt"
Point(onEnd)
Point(NumStr)
link(onSearch,9438959:doCompare,[])
link(onEnd,603773:doStop,[(492,370)(492,439)(382,439)(382,363)])
}
Add(Edit,4029089,539,301)
{
Left=15
Top=15
Width=270
Text="123"
}
Add(Button,12509312,336,350)
{
Left=15
Top=45
Caption="Search"
link(onClick,603773:doStart,[])
}
Add(Memo,7358780,616,357)
{
Left=15
Top=80
Width=270
ScrollBars=2
}
Add(TimeCounter,603773,392,350)
{
link(onStart,14037412:doSearch,[])
link(onStop,10268:doText,[(435,363)(435,405)])
}
Add(Label,10268,448,399)
{
Left=76
Top=46
}
Add(If_else,9438959,532,357)
{
link(onTrue,7358780:doAdd,[])
link(Op2,4029089:Text,[])
}


карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26164
Рейтинг: 2127
#21: 2015-03-04 12:31:08 ЛС | профиль | цитата
Ну вот, как оказалось, решение плавало на поверхности
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#22: 2015-03-04 13:58:50 ЛС | профиль | цитата
И про скорость
find_std.png
find_ic.png
find_strlist.png
find_not_time_load_in_strlist.png
В используемом файле 803005 строк. Искалась строка № 803003.
Во всех случаях перебор всех строк.
Где
DRc писал(а):
С полным перебором строк медленно работает.
не увидел.
4 или 6.5 секунд для почти миллиона строк это не существенно. ИМХО.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 4find_std.png [24.3KB] [511], find_ic.png [21.9KB] [492], find_strlist.png [25.1KB] [509], find_not_time_load_in_strlist.png [26.3KB] [512]
Ответов: 45
Рейтинг: 4
#23: 2015-03-04 14:28:33 ЛС | профиль | цитата
Tad писал(а):
И про скорость

Если не считывать с Edit строку поиска, а как подсказал MAV сначала ее записать в память то скорость в 2 раза быстрей. И потом, если явно указать строку для поиска SearchInFile, скорость еще быстрей.
Сравните:
Add(MainForm,2953706,21,105)
{
Width=806
Height=564
link(onCreate,10876761:doFor,[(65,125)(65,157)(-6,157)(-6,188)])
}
Add(SearchInFile,13847902,266,98)
{
FileName="SIF.txt"
Point(onEnd)
Point(NumStr)
link(onSearch,9438959:doCompare,[])
link(onEnd,10172051:doStop,[(310,118)(310,187)(200,187)(200,111)])
}
Add(Edit,3153334,350,42)
{
Left=15
Top=10
Width=270
Text="123"
}
Add(Button,1057631,154,98)
{
Left=15
Top=40
Caption="Search"
link(onClick,10172051:doStart,[])
}
Add(Memo,2741103,434,105)
{
Left=15
Top=75
Width=270
ScrollBars=2
link(Str,13847902:NumStr,[(440,93)(356,93)(356,142)(272,142)])
}
Add(TimeCounter,10172051,210,98)
{
link(onStart,13847902:doSearch,[])
link(onStop,6042733:doText,[(253,111)(251,137)(253,153)])
}
Add(Label,6042733,266,147)
{
Left=76
Top=41
}
Add(If_else,9438959,350,105)
{
link(onTrue,2741103:doAdd,[])
link(Op2,3153334:Text,[(363,89)(356,89)])
}
Add(Memory,6592151,399,301)
{
Point(Data)
link(Data,3224100:Text,[(405,289)(356,289)(356,338)(307,338)])
}
Add(PointHint,6903760,147,28)
{
Info=#10:Ваш пример|
Transparent=0
VAlign=0
Width=337
Height=200
}
Add(SearchInFile,3296384,266,357)
{
FileName="SIF.txt"
Point(onEnd)
Point(NumStr)
link(onSearch,3074587:doCompare,[])
link(onEnd,2611087:doStop,[(310,377)(310,373)(142,373)(142,370)])
}
Add(Edit,3224100,301,294)
{
Left=15
Top=220
Width=270
Text="123"
}
Add(Button,12129626,98,357)
{
Left=15
Top=250
Caption="Search"
link(onClick,2611087:doStart,[])
}
Add(Memo,6396029,434,364)
{
Left=15
Top=285
Width=270
ScrollBars=2
link(Str,3296384:NumStr,[(440,352)(356,352)(356,401)(272,401)])
}
Add(TimeCounter,2611087,154,357)
{
link(onStart,10610625:doEvent1,[])
link(onStop,69595:doText,[(226,370)(226,412)])
}
Add(Label,69595,266,406)
{
Left=76
Top=251
}
Add(If_else,3074587,350,364)
{
link(onTrue,6396029:doAdd,[])
link(Op2,6592151:Value,[(363,348)(405,348)])
}
Add(PointHint,4718897,77,273)
{
Info=#46:Пример с записью строки в память перед поиском|
Transparent=0
VAlign=0
Width=407
Height=214
}
Add(Hub,10610625,231,357)
{
link(onEvent1,6592151:doValue,[(322,363)(322,307)])
link(onEvent2,3296384:doSearch,[(255,370)(255,363)])
}
Add(Memory,3160134,854,301)
{
Point(Data)
link(Data,11224983:Text,[(860,289)(811,289)(811,338)(762,338)])
}
Add(SearchInFile,11577702,721,357)
{
FileName="SIF.txt"
Point(onEnd)
Point(NumStr)
link(onSearch,1468738:doCompare,[])
link(Text,16453743:Var1,[(734,341)])
link(onEnd,14981175:doStop,[(765,377)(765,373)(597,373)(597,370)])
}
Add(Edit,11224983,756,294)
{
Left=335
Top=220
Width=270
Text="123"
}
Add(Button,7780723,553,357)
{
Left=335
Top=250
Caption="Search"
link(onClick,14981175:doStart,[])
}
Add(Memo,15550771,889,364)
{
Left=335
Top=285
Width=270
ScrollBars=2
link(Str,11577702:NumStr,[(895,352)(811,352)(811,401)(727,401)])
}
Add(TimeCounter,14981175,609,357)
{
link(onStart,12706251:doEvent1,[])
link(onStop,3978398:doText,[(681,370)(681,412)])
}
Add(Label,3978398,721,406)
{
Left=396
Top=251
}
Add(If_else,1468738,805,364)
{
link(onTrue,15550771:doAdd,[])
link(Op2,16453743:Var2,[(818,348)(860,348)])
}
Add(PointHint,606638,532,273)
{
Info=#42:Пример с явным указанием строки для поиска|
Transparent=0
VAlign=0
Width=407
Height=200
}
Add(Hub,12706251,686,357)
{
link(onEvent1,3160134:doValue,[(767,363)(767,307)])
link(onEvent2,11577702:doSearch,[(710,370)(710,363)])
}
Add(GetDataEx,16453743,854,336)
{
link(Data,3160134:Value,[])
}
Add(For,10876761,6,182)
{
End=200000
link(onEvent,3389893:doAdd,[(71,188)(71,153)])
link(onStop,3389893:doSave,[(71,195)(71,188)])
}
Add(StrList,3389893,104,147)
{
FileName="SIF.txt"
Strings=#3:123|3:321|6:123123|3:321|3:456|
}


4 или 6.5 секунд для почти миллиона строк это не существенно. ИМХО.

Когда данная процедура выполняется часто, любое ускорение процесса это хорошо
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#24: 2015-03-04 14:52:44 ЛС | профиль | цитата
Насчет Memory MAV прав.
quick_search.png
Получилось в 3.
nesco писал(а):
Ну вот, как оказалось, решение плавало на поверхности
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1quick_search.png [29.2KB] [382]
Разработчик
Ответов: 26164
Рейтинг: 2127
#25: 2015-03-04 15:17:44 ЛС | профиль | цитата
Tad писал(а):
Получилось в 3

Можно еще ускорить, если не писать построчно в Memo, а записать сначала в StrList, а затем переслать уже готовым текстом в Memo
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#26: 2015-03-04 15:29:32 ЛС | профиль | цитата
quick_search_1.png
Так ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1quick_search_1.png [31.9KB] [422]
Разработчик
Ответов: 4698
Рейтинг: 426
#27: 2015-03-04 15:30:08 ЛС | профиль | цитата
Tad, а как так получилось, что решение на IC медленнее последнего твоего теста с Memory?
карма: 10
0
Ответов: 16884
Рейтинг: 1239
#28: 2015-03-04 15:35:40 ЛС | профиль | цитата
Assasin, на IC - это чтение построчно из файла на диске.
code_35257.txt
Тут многое зависит от скорости диска.
А загрузка тестового файла (81 мега, >800000 строк) в StrList всего 0.5 sec . Сам был удивлён.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_35257.txt [741B] [205]
Разработчик
Ответов: 26164
Рейтинг: 2127
#29: 2015-03-04 15:51:36 ЛС | профиль | цитата
ЕМНИП. То Memo понимает ввод полного текста через верхнюю точку по doAdd. Тч DoData совсем не нужен
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#30: 2015-03-04 16:14:08 ЛС | профиль | цитата
nesco писал(а):
Memo понимает ввод полного текста через верхнюю точку
Где написано ?
Или это определяется только методом тыка ?
Метод тыка - это не мой метод !
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)