Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
В общем имеем готовый список от 300 до 30000 файлов (К примеру, что бы был понятен масштаб).
Теперь необходимо в списке оставить элементы которые указываются в EditBox. Пример на скринах... в архиве по разным папкам могут хранится несколько таких файлов. Вот как именно их оставить в списке, а остальное удалить?
Вникал в команды работающие со строками, но так и не допетрил. Через цикл нереально (долго)
Первый скрин. Указанный файл может находится как по одному пути:
Второй скрин. Так и по другому:
Пути эти, которые указаны до названия файлов они обязательны, обрезать их нельзя!
p.s. Скорее всего решение на поверхности, может туплю, но уже не соображаю нихрена...
Вот как именно их оставить в списке, а остальное удалить?
Скопировать то, что надо в отдельный массив, список очистить, а потом скопировать из массива обратно в список. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Скопировать то, что надо в отдельный массив, список очистить, а потом скопировать из массива обратно в список.
Мне не понятна сама реализация.
Как именно в списке найти то, что указано в эдитбоксе?
Добавлено (23 Марта 2015, 19:27) --------------------------------------------- То есть совпадений, как я указал выше может, быть несколько. Например 26 файлов с таким именем...
Добавлено (23 Марта 2015, 19:33) --------------------------------------------- Забыл ещё добавить, то, что находится в листбоксе имеется отдельно в переменной
Как именно в списке найти то, что указано в эдитбоксе?
Гм... ListBoxFindItem
ЦитатаRezzoxe ()
Мне не понятна сама реализация.
ЦитатаRezzoxe ()
совпадений, как я указал выше может, быть несколько. Например 26 файлов с таким именем...
Код
ListBoxFindItem Тут копируем первое найденное в массив. ListBoxDeleteItem ListBoxFindItem А тут копируем следующее первое найденное в массив. ListBoxDeleteItem
И т.д. пока отыскивается. Делать, разумеется в цикле. Потом из массива обратно в список.
ЦитатаRezzoxe ()
что находится в листбоксе имеется отдельно в переменной
В данном случае это - лишнее, но можно и приспсобить где-нибудь по необходимости. И не забыть, что после манипуляций с ListBox его содержимое и содержимое этой переменной могут отличаться. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
ListBoxFindItem Тут копируем первое найденное в массив. ListBoxDeleteItem ListBoxFindItem А тут копируем следующее первое найденное в массив. ListBoxDeleteItem
То есть получается каждый файл не прогоняем через цикл. Вот это и надо было. А только те которые найдутся через FindItem. Спасибо, сейчас попробую.
Действительно, всё просто. Видимо запарился я сегодня с этим распаковщиком.
Не все просто.. Если не ошибаюсь, то ListBoxFindItem чувствительна к регистру. Если так то сначала надо перевести:
ЦитатаRezzoxe ()
имеется отдельно в переменной
в нижний или верхний регистр, скопировать в "невидимый" ListBox (или ComboBox), затем то, что ищешь тоже перевести в "регистр" и тогда уже искать. ListBox-ы можно "синхронизировать" в случае необходимости. В общем, есть варианты.
Добавлено (23 Марта 2015, 20:44) --------------------------------------------- А можно и вообще использовать SearchStr, но я бы предпочел, пожалуй, вариант с ListBox-ами.
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
эмммм.... заминка. Команде поиска FindItem оказывается необходимы все символы элемента, я то думал ей будет достаточно части элемента... к примеру как на скриншотах, только название файла без пути.
Сообщение отредактировано Rezzoxe - Пн, 23 Марта 2015, 21:12
Разумеется. Значит, перед поиском нужно дополнить "искомое" недостающими элементами (или убрать лишнее в противном случае), а потом искать.
ЦитатаRezzoxe ()
только название файла без пути.
Дополнять "путем", и все дела. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Дело в том, что путь неизвестен, пользователю известно лишь имя файла, к примеру ему из архива 15000 файлов нужен только один этот файл... и чтобы скроллингом не искать я решил вот такой простенький поиск по списку сделать...
Что значит неизвестен? Ведь откуда-то список берется.
ЦитатаRezzoxe ()
из архива 15000
А архив в воздухе висит? - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Я заранее создаю эти списки другой утилитой подготовленной на нб. Это некий костыль на костыле, или как один сейчас выразился костыль 80 уровня...
Как бы имитация того, что прога анализирует какие файлы находятся в архиве, но на самом деле, пользователь указывает архив, далее прога сверяет какой список относится к этому архиву и загружает этот список в листбокс.
ЦитатаPeter ()
Что значит неизвестен?
Распаковщик для модмейкеров, в разное время им может понадобится определённый файл. Его название они знают, но расположение где он находится нет. Поиск по списку нужен только для того чтобы один нужный файл не искать по списку размером до 30000 файлов.
Да и это не нужно! Можно искать "внутри" архива (по папкам) - ведь в архиве пути прописаны относительно "корня архива".
Добавлено (23 Марта 2015, 22:11) ---------------------------------------------
ЦитатаRezzoxe ()
Я заранее создаю эти списки другой утилитой подготовленной на нб.
Ещё проще! Омар, все, что тебе нужно - найти строку в списке. (может не одну строку) Так просто сформируй правильно "запрос", тебе ведь все заранее известно - и названия файлов, и пути к ним, и даже список готовый есть! В чем проблема я не понимаю.
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Вот как я и написал выше... мы не можем заглянуть внутрь архива, мы лишь это имитируем Я заранее знаю список того или иного архива.
Раньше распаковщик извлекал все файлы. Но это не всегда удобно, а теперь есть возможность распаковать только нужный файл.
Добавлено (23 Марта 2015, 22:15) ---------------------------------------------
ЦитатаPeter ()
Омар, все, что тебе нужно - найти строку в списке. (может не одну строку) Так просто сформируй правильно "запрос", тебе ведь все заранее известно - и названия файлов, и пути к ним, и даже список готовый есть! В чем проблема я не понимаю.
Проблема в том что искать надо когда этот список находится уже в листбоксе. У пользователя конечный продукт, я не знаю что он захочет найти в этом списке...
Добавлено (23 Марта 2015, 22:21) --------------------------------------------- Аааа... кажется допетрил, ща
Сообщение отредактировано Rezzoxe - Пн, 23 Марта 2015, 22:17
Проблема в том что искать надо когда этот список находится уже в листбоксе.
ЦитатаPeter ()
В чем проблема я не понимаю.
ЧТО МЕШАЕТ ИСКАТЬ В ЛИСТБОКСЕ?
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Да не ищет она по названию файла, ей вся строчка нужна
У-У-У-У!!!!
ЦитатаPeter ()
Так просто сформируй правильно "запрос", тебе ведь все заранее известно - и названия файлов, и пути к ним, и даже список готовый есть! В чем проблема я не понимаю.
Все, дальше, без меня! Весь вечер впустую постил получается. Пардон!
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Омар, как то так.. не факт что регулярка правильная (я только учусь) :), мож кто подправит. В верхнем поле вводишь имя файла, можно с расширением, внизу получишь список всех найденных.
ЦитатаPeter ()
mishem, ты непробиваем!
Я молчал до последнего.
Изобретаете велосипед, да еще с поиском в 30 000 строках.
Если пользоваться средствами НБ, то я б вообще разбил бы на два списка. В одном путь к файлу, в другом имя файла с расширением. После искал бы там где имена, при найденном результате объединял бы бы путь и имя файла.
Омар, плагин hpwControl
Добавлено (24 Марта 2015, 00:51) ---------------------------------------------
ЦитатаPeter ()
Так просто сформируй правильно "запрос", тебе ведь все заранее известно - и названия файлов, и пути к ним, и даже список готовый есть! В чем проблема я не понимаю.
Не может он правильно сформировать запрос. Ему известно может быть только имя файла которе введет пользователь. Имен таких может быть несколько с разными путями.
Вывод, искать в самом файле, но штатный поиск не выдает номер строки, нужен плагин.
Как выше сказал, разбивать на путь и имя файла, если искать только по имени, то разбивать еще и на расширения, отдельный список с расширениями. Отделять расширение от имени файла.
Тогда мы можем найти по имени нужную строку, но опять, находит по моему первую по списку, а ему как я понимаю нужны все возможные.
Не ходи вокруг да около, объясни по существу плиз...
ЦитатаPeter ()
перед поиском нужно дополнить "искомое" недостающими элементами (или убрать лишнее в противном случае), а потом искать.
Все пути тебе заранее известны, подставляешь в переменную (перед именем файла, которое набрал пользователь) путь, и вперед! По первому пути не нашлось (или нашлось), подставляешь другой путь, и снова ищешь. Если надо, подставляешь расширение. Надо просто сформировать строку, которую ищешь, в том виде, в каком они в списке, т.е. с путями. Ну, я даже не знаю как ещё объяснять. Решение лежит на поверхности. Для NB все это вообще плевое дело!
Единственное, что смущает - 15000 строк.
Добавлено (24 Марта 2015, 01:05) ---------------------------------------------
Цитатаmishem ()
находит по моему первую по списку, а ему как я понимаю нужны все возможные.
Мля! Нет я точно начну материться! Читать умеем?
ЦитатаPeter ()
ListBoxFindItem Тут копируем первое найденное в массив. ListBoxDeleteItem ListBoxFindItem А тут копируем следующее первое найденное в массив. ListBoxDeleteItem
Уже найденное надо просто выкидывать из списка! Все, у меня больше нет сил! - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Это понятно все. Опять мы приходим к вопросу в целесообразности плагина. Зачем изобретать велосипед средствами НБ, когда есть готовый плагин который делает все это в рАзы лучше.
Другое дело что этим плагином нужно еще научиться работать.
А вообще, что такое НБ? Это те же плагины только вшиты штатными командами.
В делфи тоже можно писать свои функции\компоненты, или пользоваться готовыми. В основном все пользуются готовыми, а не изобретают велосипед. Я уже неоднократно говорил, лучше свой потенциал потратить на что то другое. Можно например ложку сделть своими руками, и каждому встречному говорить, смотри, это я сам сделал. На что встречному будет глубоко наплевать. А можно пойти и купить ее в магазине. На что встречному тоже будет наплевать. Так ради чего люди делают что то своими руками? Только ради своего тщеславия.
Другое дело, делать что то своими руками чего еще нет. Это, прогресс. И встречный порадуется, и сам будешь доволен. Не хочешь читать хелп?
Опять мы приходим к вопросу в целесообразности плагина.
Цитатаmishem ()
Зачем изобретать велосипед средствами НБ,
А чего тут изобретать-то? Все просто как 2х2!
Цитатаmishem ()
делает все это в рАзы лучше.
Ты уверен? Я - нет!
Цитатаmishem ()
что такое НБ? Это те же плагины только вшиты штатными командами.
Да нет, дружище! NB будет конструкцией по-сложнее комка из вшитых плагинов.
Цитатаmishem ()
В основном все пользуются готовыми,
И почему ты так решил? Ничто не мешает создавать свои функции, и пользоваться ими, и подавляющее большинство программеров именно так и делает. И печатной работы в Delphi в сотни раз больше, чем в NB! А в Delphi, между прочим, все в основном - полуфабрикаты, от которых толку в чистом виде очень немного.
Цитатаmishem ()
Я уже неоднократно говорил, лучше свой потенциал потратить на что то другое.
А я всегда говорил (и буду пропагандировать эту идею), что нужно работать головой, и только так можно поднять "потенциал". И не раз уже приводил в качестве примера одну и ту же программу ас-мастера, сделанную без единого плагина, причем, в программе, потенциально уступающей NB. В NB же, если бы кто стал делать аналог, то была бы задействована куча плагинов, в чем я ни секунды не сомневаюсь. Впрочем, какая разница? Очень нравиться использовать плагины? Пожалуйста! Нет проблем.
Цитатаmishem ()
Только ради своего тщеславия.
Это у кого болезненное самолюбие, или немеряные амбиции, причем, при весьма посредственных способностях. Остальные делают ради своего удовольствия. А удовольствие и тщеславие далеко не одно и то же. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Все пути тебе заранее известны, подставляешь в переменную (перед именем файла, которое набрал пользователь) путь, и вперед!
Да ёлки-палки!!! Такой метод подразумевает использование цикла по каждой строчке. А на эту тему мы уже разговаривали в теме про zm_functions. Он может перебирать так до часа...
Совсем другое дело, если бы эта команда искала по части названия, а не целиком. Сама команда удобная так-как она не будет так долго проходит каждую строчку как это делает цикл
Добавлено (24 Марта 2015, 10:07) --------------------------------------------- Объясню ещё проще... если метод Петра подразумевает проход циклом каждой строчки, то мне оно не надо, я могу это сделать. Я в первом посте написал что через цикл долго...
Цитатаmishem ()
Не может он правильно сформировать запрос. Ему известно может быть только имя файла которе введет пользователь. Имен таких может быть несколько с разными путями.
Цитатаmishem ()
Тогда мы можем найти по имени нужную строку, но опять, находит по моему первую по списку, а ему как я понимаю нужны все возможные.
И что я ещё не упомянул: Это ещё простенький список, он содержит файлы одного архива, а таких архивов (от 300 до 15000 файлов) будет около 100. И будут даже случаи что необходимо будет ввести в листбокс список из нескольких архивов, вот тогда и получается около 30000 файлов за раз.
Петр мы с тобой обсуждали скорость цикла, пришли в итоге к выводу что это не по плечу нб. А мне кстати тогда надо было создавать вот такие списки. Про то, что в листбокс можно кинуть список гуртом я узнал только из недавней темы про визуализацию winamp (Мишем показал как это делается через команду SetObjectCaption). В итоге я не жду теперь часа, список из 15000 файлов грузится в листбокс за 1-2 секунды.
Вот и с поиском надо как-то схитрить... Опять же, всё написано с учётом того, что Петр предлагает проход циклом каждой строчки
mishem, спасибо конечно. Но я говорил что плагины эти на дух не переношу, да и потом я далёк от регулярок, а всё что у меня в проекте я должен понимать.
метод Петра подразумевает проход циклом каждой строчки
Омар, а ты вообще думал над тем, что я тебе предложил? Где ты там узрел проход каждой строчки? Цикл тебе будет нужен только при "подставлении" путей к названию файла в соответствии с количеством папок/подпапок. Или ты хочешь, чтобы "по щучьему велению" - раз и в дамках?
ЦитатаRezzoxe ()
от 300 до 15000 файлов)
Надо разумно подходить к формированию задачи. Можно напихать в архивы файлов на терабайты, а потом искать иголку в стоге сена и без единого цикла. В общем, все... Делайте как хотите.
Добавлено (24 Марта 2015, 11:33) --------------------------------------------- Дарю на последок ещё идею: если все заранее известно (пути, файлы и проч), то почему бы не запихать эти данные в базу, а потом искать по базе? Уж точно будет в разы (ели не десятки раз) быстрее и гибче "божественной" регулярки, и присутствие плагина будет оправдано! - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Цикл тебе будет нужен только при "подставлении" путей к названию файла в соответствии с количеством папок/подпапок.
Подставляться и будет по циклу, перебираться то будут все возможные пути...
Легче забить на такой поиск...
Добавлено (24 Марта 2015, 11:36) ---------------------------------------------
ЦитатаPeter ()
Дарю на последок ещё идею: если все заранее известно (пути, файлы и проч), то почему бы не запихать эти данные в базу, а потом искать по базе?
О базе думал, но никогда с ней не работал, надо будет попробовать... Тем более, надо будет сверять архив не только со списком, но ещё с несколькими параметрами. Типа с каким ключом распаковывать и тд и тп... там архивы с разными ключами...
Подставляться и будет по циклу, перебираться то будут все возможные пути...
ЦитатаPeter ()
Надо разумно подходить к формированию задачи.
Ты думаешь регулярка тебя спасет?
База и только база! Без вариантов!
А дальше поступай как знаешь. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
mishem, спасибо конечно. Но я говорил что плагины эти на дух не переношу, да и потом я далёк от регулярок, а всё что у меня в проекте я должен понимать.