Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Здравствуйте! У меня есть очень не простой вопрос. Короче, программа такая: программа ищет на компьютере определенные файлы и сохраняет результат в переменную.-это понятно. Далее результат т.е. переменную нужно разбить на строчки.-это тоже понятно. Вот, хотелось бы сделать чтобы фаил разбивался на столько строчек, которые написаны в переменной т.е. столько fileread, сколько в переменной [kolstr]. Подсчитать колтчество строчек получилось, а вот как разбивать в зависимости от количества строчек в переменной [kolstr]. А вдруг у пользователя таких файлов 30, а в программе предусмотрено 20. Сейчас приведу банальный пример, чтобы было поняьнее.
А нужно создать динамическое условие т.е. само изменяется от количества строчек. Если быть точнее фаил сам разбивается на нужное кол-во строчек. А то, если я сделаю, например до 1000 файлов-сами понимаете, что писать очень долго, да,и повторюсь "А если у пользователя больше этих файлов?". Надеюсь, так более понятно. Спасибо.
Добавлено (14 Августа 2012, 12:16) --------------------------------------------- Ой, огромное Вам спасибо. как говорится "то, что доктор прописал".
Добавлено (14 Августа 2012, 12:36) --------------------------------------------- А вот еще вопрос судя по всему тоже по циклам. Я получил пути к этим файлам. (с помощью предыдущего цикла). Теперь мне нужно прочитать эти файлы (FileRead) в зависимости от того какие (по названию) и сколько пременных в предыдущем цикле. Помогите пожалуйста.
Например у вас есть массив имён файлов [NameFile_[i]] размером в [KolElNameFile]=20 файлов Проходим по циклу с начала(1-го имени файла) до конца(количество имён файлов). Проходимся по всему массиву и выполняем чтение одного файла (2-й код во 2-м сообщении), подставляя вместо file.txt один из элементов массива имён файлов. А дальше уже выполняем все эти действия с каждой строкой каждого файла. Win7 Pro SP1 x64; NBv5.5.4rus,v5.6.2rus, v5.7.0en, Opera
Сообщение отредактировано Gorezcaid - Вт, 14 Августа 2012, 13:09
Только не запутайтесь с переменными, когда будете делать цикл в цикле. Удачи, если что - спрашивайте Win7 Pro SP1 x64; NBv5.5.4rus,v5.6.2rus, v5.7.0en, Opera
Сообщение отредактировано Gorezcaid - Вт, 14 Августа 2012, 13:22
Добавлено (14 Августа 2012, 13:35) --------------------------------------------- Еще вопрос. Не про реализацию, а просто возможно ли. Вдруг, это все зря. Мне еще понадобится сделать по прочитанным файлам поиск определенных совпадений. Не суть, главное-поиск. Это возможно будет?
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Чтобы не запускать лишний раз цикл, можно сразу и искать совпадения. Конкретное решение зависит от того что именно требуется. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
По поводу цикла. Можно какой нибудь отдаленный пример. А то, совсем затупил. По поводу поиска. Есть тхт грубо говоря база поиска. Есть другой тхт в котором должны искаться совпадения. В подобных проектах делал так: разбивал базу поиска построчно, а потом искал в тех файлах, в которых нужно найти определенные совпадения. А здесь то мы не знаем сколько у пользователя данных файлов...
разбивал базу поиска построчно, а потом искал в тех файлах, в которых нужно найти определенные совпадения.
В принципе, верно.
Quote (AleksandrArchipov)
А здесь то мы не знаем сколько у пользователя данных файлов...
Вам ничто не мешает это узнать: FileList.
Quote (AleksandrArchipov)
какой нибудь отдаленный пример
"Отдаленный" пример вам уже привели в сообщении 2. Только вместо AlertBox сразу использовать SearchStr, и т.д. в ещё одном цикле.
Quote (Peter)
Конкретное решение зависит от того что именно требуется.
Если проблематично сразу использовать поиск, то можно и "потом". - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Peter, Я сначала разберусь с циклом, а потом... Походу дела спрошу. Если можно). Просто, цикл не использовал, поэтому пока тяжело. Буду читать, разбираться. Спасибо.
Добавлено (14 Августа 2012, 19:32) ---------------------------------------------
Quote (Peter)
"Отдаленный" пример вам уже привели в сообщении 2. Только вместо AlertBox сразу использовать SearchStr, и т.д. в ещё одном цикле.
нет, это следующий шаг. Мне бы хотелось пока прочитать файлы в переменные.
Quote (Gorezcaid)
Например у вас есть массив имён файлов [NameFile_[i]] размером в [KolElNameFile]=20 файлов Проходим по циклу с начала(1-го имени файла) до конца(количество имён файлов). Проходимся по всему массиву и выполняем чтение одного файла (2-й код во 2-м сообщении), подставляя вместо file.txt один из элементов массива имён файлов. А дальше уже выполняем все эти действия с каждой строкой к
Для того, чтобы было проще начать изучать циклы лучше использовать "список", т.е. объект "ListBox" (для наглядности), а не безликий массив, а потом уже применять массивы. Правда, следует учитывать, что список, по сути, тоже массив, но приемы работы с "массивами" и со "списками" несколько отличаются, и в каком-то одном случае (необязательно цикл) разумнее применить список, а в другом - массив.
Например, если требуется отыскать точное совпадение строк (слов), то со "списком" все намного упрощается (ListBoxFindItem), в противном случае уже придеться прибегнуть к использованию массива, и код усложнится. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Листбокс я пробовал. С ним у меня проблем нет. А вот с циклом... Я, немного алгоритм не понимаю. Вот, получил я списки файлов т.е. пути к ним. Теперь, мне нужно их прочитать целиком. С помощью
Я, немного алгоритм не понимаю. Вот, получил я списки файлов т.е. пути к ним. Теперь, мне нужно их прочитать целиком. С помощью
Вот потому я и говорю, чтот надо использовать ListBox. Когда срабатывает команда FileRead "file.txt" "All" "[file]" , то в переменную [file] помещается содержимое файла, при это строки в файле будут разделены символами [#13][#10]. Далее командой StrParse "[file]" "[#13][#10]" "[MasStr_]" "[KolEl]" мы разбиваем единую стоку на составные части, каждая из которых помещается в отдельную переменную, имя которой состоит из заданного имени массива [MasStr_] плюс порядковый номер, т.е. [MasStr_1], [MasStr_2], [MasStr_3], и т.д.
Чтобы была понятна аналогия с ListBox, поместите на страничку объект ListBox, в его свойствах укажите следующее:
а затем сделайте так: FileRead "file.txt" "All" "[StringList]" , и посмотрите на результат.
Добавлено (14 Августа 2012, 20:53) ---------------------------------------------
Quote (Сергей)
а сочетание указанных символов
Да, к сожалению, такая "засада" есть.
Лечится, например, проверкой наличия пробелов "до" найденной позиции, и "после" окончания найденного. К тому же можно использовать (если надо) "С учетом регистра".
Добавлено (14 Августа 2012, 21:02) ---------------------------------------------
Quote (Сергей)
Цитата от (AleksandrArchipov) Не первый раз делаю такие проекты.
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
-разбиваем потому, что мы не знаем сколько этих файлов на компе. Следующий шаг:3.Нам нужно прочитать файлы, по путям которые мы получили из шага 2. Вот, в 3 шаге и проблема... извините за "вынос" мозга.
В данном случае вы не обрабатываете никаких путеЙ! Построчно вы разбиваете содержимое файла file.txt, а вам нужно разбить результат поиска файлов командой zmfindfiles.
Quote (AleksandrArchipov)
-разбиваем потому, что мы не знаем сколько этих файлов на компе.
Это почему же "мы не знаем"? Очень даже прекрасно знаем:
Quote (Из подобия справки к плагину)
По завершении поиска общее количество найденных файлов выводится в переменную [zmFindFilesCount]
Но можно и "разбить" StrParse "[Результат поиска]" "[#13][#10]" "[MasStr_]" "[KolEl]" При этом мы имеем количество файлов [KolEl], а так же список имен файлов: [MasStr_1], [MasStr_2], [MasStr_3], .. [MasStr_ [KolEl]].
Так вот и запускаем цикл (по списку), начиная с первого файла [MasStr_1] до последнего [MasStr_ [KolEl]]
Code
Loop "1" "[KolEl]" "[i]" .Здесь делаем то, что нужно .Надо прочитать файл по полученным путям? Поехали: FileRead "[MasStr_[i]]" "All" "[Сохраняем куда надо]" EndLoop
После каждой итерации цикла переменная [i] будет увеличиваться на единицу, и таким образхом мы прочитаем все файлы (по списку). - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
В данном случае вы не обрабатываете никаких путеЙ! Построчно вы разбиваете содержимое файла file.txt, а вам нужно разбить результат поиска файлов командой zmfindfiles.
Я имел введу. Что после окончания поиска, запускается подпрограмма в которая сохраняет результат поиска в переменную. ваш способ разумнее. Сейчас попробую.
Добавлено (14 Августа 2012, 22:13) --------------------------------------------- Тьфу. результат поиска в фаил.
Добавлено (14 Августа 2012, 22:19) --------------------------------------------- Всем, кто принимал участие-огромное спасибо! Со всем разобрался. Без вашей помощи не знаю, что и делал.
Добавлено (14 Августа 2012, 22:52) --------------------------------------------- По поиску: где ошибка?
вот демка, кликай по кнопке появится результат Это я как понял задумку
Добавлено (14 Августа 2012, 23:20) --------------------------------------------- Тока я использовал два листбокса, т.с. для наглядности
Добавлено (14 Августа 2012, 23:40) ---------------------------------------------
Quote (AleksandrArchipov)
Нужно чтобы искала все комбинации
во втором примере ищет по всей базе ключевых слов
Добавлено (14 Августа 2012, 23:47) --------------------------------------------- Кстати, что значит "чтобы искала все комбинации"? Если в одном файле встечается несколько искомых слов, то тогда надо организовывать еще один цикл. Или пересмотреть организацию проекта. Одну задачу можно решить по разному! 1- делать несколько циклов 2- возможно организовать все через бд 3- плагин (или js) и работать регуляркой Но, чтоб определить как и что делать, надо знать задачу полностью! А не фрагменты.
Сергей, за демку спасибо. А поиск нужен такой- например, у пользователя несколько файлов с именем 1.тхт, 2.тхт, 3.тхт. Есть так называемая база поиска. Назовем ее bazapoiska.txt. В ней 10 строчек. Программа разбивает на строчки, каждой строчке присваивается переменная. Далее поиск: нужно найти в файлах 1,2,3 все возможные комбинации. Точнее-сначала один файил погонять по базе поиска, второй, третий и т.д.
Добавлено (15 Августа 2012, 09:29) --------------------------------------------- Мне подходит, кажется, search2. Но мне нужно брать базу поиска их файла, а не лист бокса. Переделаю.
.=========/Загрузка базы данных/========= FileRead "!BazaDan" "All" "[file]" StrParse "[file]" "[#13][#10]" "[MasBazaDan_]" "[KolElBazaDan]" .[MasBazaDan_]-массив проверяемых строк .[KolElBazaDan]-количество элементов массива .=========/Поиск имён файлов/========= .[NameFile_]=Массив имён файлов SetVar "[NameFile_1]" "ИмяФайла1.txt" SetVar "[NameFile_2]" "ИмяФайла2.txt" SetVar "[NameFile_3]" "ИмяФайла3.txt" SetVar "[NameFile_4]" "ИмяФайла4.txt" .[KolElNameFile]=Кол-во файлов SetVar "[KolElNameFile]" "4" .=========/Чтение строк всех файлов/========= Loop "1" "[KolElNameFile]" "[h]" .[h]=№ имени файла .[NameFile_[h]]=Имя файла FileRead "![NameFile_[h]]" "All" "[file]" .[file]=содержимое файла .////////// .Здесь обрабатывать строки всего файла сразу Loop "1" "[KolElBazaDan]" "[j]" SearchStr "[MasBazaDan_[j]]" "[file]" "[result]" "" If "[result]" "<>" "0" .Значение [MasBazaDan_[j]] найдено в файле [NameFile_[h]] Else .Значение не найдено в файле EndIf EndLoop .////////// .Построчно StrParse "[file]" "[#13][#10]" "[MasStr_]" "[KolEl]" Loop "1" "[KolEl]" "[i]" .[i]=Номер строки в файле .[MasStr_[i]]=Одна из строк файла, по порядку .Здесь обрабатывать одну строку одного файла EndLoop .////////// EndLoop
'Поиск имён файлов' на сколько я знаю у вас уже есть. В этом примере производится поиск по базе данных в файле, где каждая строка базы данных ищется по всему файлу.
Добавлено (15 Августа 2012, 12:07) ---------------------------------------------
Quote (AleksandrArchipov)
Не первый раз делаю такие проекты.
может и не первый, но такие вещи как цикл лучше самому изучать используя отладку. Иначе дальше будет всё сложнее....и сложнее... Win7 Pro SP1 x64; NBv5.5.4rus,v5.6.2rus, v5.7.0en, Opera