|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
Всем доброе время суток. Напишу сразу, в Foxpro не программировал. По работе понадобилось перебрать и сравнить кучу баз. Базы находятся во многих подкаталогах. Каталоги располагаются примерно так: база1\база1,1\D???????.dbf, S???????.dbf \база1,2\D???????.dbf, S???????.dbf база2\база2,1\D???????.dbf, S???????.dbf \база2,2\D???????.dbf, S???????.dbf база3\база3,1\D???????.dbf, S???????.dbf \база3,2\D???????.dbf, S???????.dbf база4\база4,1\D???????.dbf, S???????.dbf \база4,2\D???????.dbf, S???????.dbf Накопал код программки в которой база D используется в виде параметра и подставляется как Alias. Проблема в том как указать в set path to, путь к расположению всех этих баз, так как пути не вмещаются в определенное ограничение в 2046 символов команды. Помогите пожалуйста. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2010, 19:41 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
В предыдущем посте я немного спешил, поэтому немного более развернуто поясню сейчас. В visual foxpro projects\DATA\ находятся базы, но они там находятся не просто как куча файлов, а в подкаталогах, которые в свою очередь, также находятся в подкаталогах. Т.е. вид такой как на рисунке. После того как база D находится, должно произойти сравнение по определенным полям с базой S расположенной в том же каталоге, что и база D. После чего из Базы D и базы S должны быть удалены записи, отвечающие условию проверки. Запуск .PRG файла происходит из командной строки, где параметр (база D) передается таким образом c:\foxpro program.prg d???????.dbf Каким образом можно указать SET PATH TO что бы в этих ~80 каталогах с подкаталогами, были обнаружены нужные базы и переданы как параметр. Желательно пояснить для FOXPRO 2.6 или Visual FOXPRO 9. Вы поможете мне не только с решением этого вопроса, но и научите меня тому что меня интересует. P.S. перечитал кучу хелпов, постов и советов, в которых описано как указать путь к базам находящимся непосредственно в .\DATA\, и они мне не подходят. Спасибо за помощь! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2010, 23:49 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
mpol, 1) забудьте про set path, не нужна эта команда ни в Вашем конкретном случае, ни вообще. 2) то, что Вы называете "базами", принято называть просто таблицами. 3) в размещении таблиц видимо есть определенная система? Ну не просто ж так они распиханы по директориям? Но даже если случайным образом - функция adir Вам поможет ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2010, 00:13 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
XAndympol, 1) забудьте про set path, не нужна эта команда ни в Вашем конкретном случае, ни вообще. 2) то, что Вы называете "базами", принято называть просто таблицами. 3) в размещении таблиц видимо есть определенная система? Ну не просто ж так они распиханы по директориям? Но даже если случайным образом - функция adir Вам поможет ;) Размещение таблиц действительно не просто так. Но, если я правильно понимаю, то для того что бы функция ADIR отработала, нужно тоже указать ей путь к базам, что они находятся именно там. Опять же как указать путь? Или я не правильно мыслю? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2010, 08:19 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
mpolдля того что бы функция ADIR отработала, нужно тоже указать ей путь к базам, что они находятся именно там. Опять же как указать путь? Или я не правильно мыслю?В аргументах, как же еще? Или Вы под словами "маска файлов" не можете представить что-то вроде "009\D???????.dbf"? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2010, 10:05 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
mpol, в функции ADIR можно указать атрибут, включающий обработку каталогов. Действуйте так: 1 первым ADIRом забираете в массив список всех папок в опорной папке 2 перебираете их в цикле 3 для каждой подпапки вторым ADIRом во второй массив забираете список её подпапок 4 перебираете их в цикле 5 для каждой подпапки второго массива опять же ADIRом считываете их содержимое и обрабатываете, как вам надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2010, 10:37 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
проходящий.mpolдля того что бы функция ADIR отработала, нужно тоже указать ей путь к базам, что они находятся именно там. Опять же как указать путь? Или я не правильно мыслю?В аргументах, как же еще? Или Вы под словами "маска файлов" не можете представить что-то вроде "009\D???????.dbf"? Если бы у меня был один каталог, я бы такую маску и указал бы, но у меня куча вложенных директорий. Шестипаловmpol, в функции ADIR можно указать атрибут, включающий обработку каталогов. Действуйте так: 1 первым ADIRом забираете в массив список всех папок в опорной папке 2 перебираете их в цикле 3 для каждой подпапки вторым ADIRом во второй массив забираете список её подпапок 4 перебираете их в цикле 5 для каждой подпапки второго массива опять же ADIRом считываете их содержимое и обрабатываете, как вам надо. Мысль очень хорошая, мне нравится. Вот только я пока еще не смог точно разобраться с ADIR, ведь я FOXPRO не знаю. Но я попытаюсь! Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2010, 14:18 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
Вот пример рекурсивного перебора файлов в папке и подпапках. Выводит имена всех файлов на экран: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2010, 14:40 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
mpolпроходящий.пропущено... В аргументах, как же еще? Или Вы под словами "маска файлов" не можете представить что-то вроде "009\D???????.dbf"? Если бы у меня был один каталог, я бы такую маску и указал бы, но у меня куча вложенных директорий. Ни в жисть бы не додумался! Ведь вложенные каталоги - это для меня такая новость! А вместо 009 в моем примере подставить другую строку в цикле невозможно? ps: иногда посещает мысль, что люди совершенно разучились или обленились думать. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2010, 21:58 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
Снова всем привет! Пробую разобраться в этом кусочке кода и понять для себя что есть что. ______________________________________________________________________________________ clear ParseFolder('c:\') return func ParseFolder lpara tcPath local i local array laF[2] ? 'FOLDER: ' + tcPath for i = 1 to adir(laF, addbs(tcPath) + '*.*', 'D') if 'D' $ laF[i, 5] if laF[i, 1] != '.' ParseFolder(addbs(tcPath) + laF[i, 1] + '\') endif else ? 'FILE: ' + tcPath + laF[i, 1] endif endfor return ______________________________________________________________________________________ ParseFolder('c:\') - это указывает функции ParseFolder начальный каталог обработки. lpara tcPath - это параметр или переменная в которую заносится начальный каталог обработки. local i - объявление переменной. local array laF[2] - создание массива с именем laF и что значит 2? Этот массив содержит 2 "колонки" в которые заносятся данные о директориях и файлах обнаруженных при проходе цикла? ? 'FOLDER: ' + tcPath - в начале первого прохода цикла выводится на экран начальный каталог обработки, а в последующие проходы, начальный каталог обработки + найденный каталог. for i = 1 to adir(laF, addbs(tcPath) + '*.*', 'D') - начало цикла, при каждом проходе которого Adir заносит в laF очередной найденный каталог + имя найденного файла если такой есть. Маска *.* указывает на то что заносится ВСЕ и каталоги и файлы? Или это маска для поиска файлов? Я пытался менять маску на *.dbf, но при этом этот код не срабатывал. 'D' - указывает на то, что обрабатываются все каталоги или на то что будут обработаны файлы находящиеся в обнаруженных каталогах??? if 'D' $ laF[i, 5] - условие, если ('D' как я понял, указывает на 'D' в предыдущей команде for i = 1 to adir(laF, addbs(tcPath) + '*.*', 'D')), а не на то, что в массиве находится найденный каталог или файл содержащий в имени D. В этом месте [i, 5] i- это переменная объявленная ранее, а вот что такое 5 я не смог понять и найти в сети объяснения, поясните если не трудно. Буду очень благодарен, все таки я никогда не программировал, а понять желаю все, иначе и учится этому и не нужно, без попытки понять. )))) К стати, когда я при попытке понять что же это за 5, подставлял вместо нее 4 или 7, FOX на меня нецензурно выражался. Наверное было за что. )))) if laF[i, 1] != '.' - снова условие, в котором происходит сравнение найденного, на нахождение в нем точки. Другими словами это выборка на соответствие каталогу, а не файлу. Правильно? ParseFolder(addbs(tcPath) + laF[i, 1] + '\') - тут полный путь с подпапками, addbs добавляет слэш \, если такового в пути не хватает. ? 'FILE: ' + tcPath + laF[i, 1] - выводит найденные файлы на экран. Поясните мне понять, что же все таки означает это - [i, 5] и это - [i, 1]. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2010, 22:41 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
mpolfor i = 1 to adir(laF, addbs(tcPath) + '*.*', 'D') - начало цикла, при каждом проходе которого Adir заносит в laF очередной найденный каталог + имя найденного файла если такой есть. Маска *.* указывает на то что заносится ВСЕ и каталоги и файлы? Или это маска для поиска файлов? Я пытался менять маску на *.dbf, но при этом этот код не срабатывал. 'D' - указывает на то, что обрабатываются все каталоги или на то что будут обработаны файлы находящиеся в обнаруженных каталогах??? if 'D' $ laF[i, 5] - условие, если ('D' как я понял, указывает на 'D' в предыдущей команде for i = 1 to adir(laF, addbs(tcPath) + '*.*', 'D')), а не на то, что в массиве находится найденный каталог или файл содержащий в имени D. В этом месте [i, 5] i- это переменная объявленная ранее, а вот что такое 5 я не смог понять и найти в сети объяснения, поясните если не трудно. Буду очень благодарен, все таки я никогда не программировал, а понять желаю все, иначе и учится этому и не нужно, без попытки понять. )))) К стати, когда я при попытке понять что же это за 5, подставлял вместо нее 4 или 7, FOX на меня нецензурно выражался. Наверное было за что. )))) ... Поясните мне понять, что же все таки означает это - [i, 5] и это - [i, 1]. Ну вот, опять ничего нового? А прочитать хелп по функции adir() религия не позволяет? Там, между прочим, все это и расписано. В хелпе в первую очередь надо искать, а не в сети. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2010, 22:46 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
проходящий. Ни в жисть бы не додумался! Ведь вложенные каталоги - это для меня такая новость! А вместо 009 в моем примере подставить другую строку в цикле невозможно? ps: иногда посещает мысль, что люди совершенно разучились или обленились думать. Я конечно понимаю, что для кого то эта задача как 2 пальца об асфальт, а для меня это внове, и думать я не разучился, я ищу на форумах и во всяких хелпах обяснения, но не везде все расписано и без определенных разъяснений, хоть и возможно но трудно понять. Думаю, через это многие проходили. А в том, что найдутся люди желающие помочь разобраться я не сомневаюсь. P.S. К сожалению, согласен с вашим постскриптумом, но это относится не ко всем. Так что не все потеряно. ) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2010, 22:52 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
Странная логика, все гораздо прозаичней :) mpollocal array laF[2] - создание массива с именем laF и что значит 2? Этот массив содержит 2 "колонки" в которые заносятся данные о директориях и файлах обнаруженных при проходе цикла? 2 ничего не значит, просто невозможно объявить массив менее чем из 2-х элементов. mpolfor i = 1 to adir(laF, addbs(tcPath) + '*.*', 'D') - начало цикла, при каждом проходе которого Adir заносит в laF очередной найденный каталог + имя найденного файла если такой есть. Маска *.* указывает на то что заносится ВСЕ и каталоги и файлы? Или это маска для поиска файлов? Я пытался менять маску на *.dbf, но при этом этот код не срабатывал. 'D' - указывает на то, что обрабатываются все каталоги или на то что будут обработаны файлы находящиеся в обнаруженных каталогах??? ADIR() выполняется один раз и помещает в laF все файлы и папки (параметр 'D') по заданной маске (addbs(tcPath) + '*.*') и возвращает кол-во записей в созданном массиве. mpolif 'D' $ laF[i, 5] - условие, если ('D' как я понял, указывает на 'D' в предыдущей команде Это проверка что указанный элемент массива является каталогом mpolВ этом месте [i, 5] i- это переменная объявленная ранее, а вот что такое 5 я не смог понять и найти в сети объяснения, поясните если не трудно. 5 это константа, что означает тут почитай mpolif laF[i, 1] != '.' - снова условие, в котором происходит сравнение найденного, на нахождение в нем точки. Другими словами это выборка на соответствие каталогу, а не файлу. Правильно? Нет, это особенности файловой системы, есть спец.каталоги "." и ".." которые выбираются при выборе всех подпапок (обозначают родительский диск и родительскую папку), эта проверка для их игнорирования. mpolБуду очень благодарен, все таки я никогда не программировал... Советую начинать с более простых вещей, взять книжку, почтитать и повторять все написанные там примеры. PS Чтоб не гадать - есть хэлп где все расписано, тут по-русски если с английским трудности ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 07:20 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
Dima T, спасибо, буду разбираться. А с более простых вещей не получится, потому что нужно написать программку, и насколько я понимаю, эта часть кода для нее как раз подходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 08:42 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
Dima Tпросто невозможно объявить массив менее чем из 2-х элементов. Минимальная размерность массива все-таки 1, а не 2 Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 11:55 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
ВладимирМ, т.к. массив любой размерности в фоксе - это просто набор связанных переменных, и минимальное количество переменных - одна ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 14:29 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
Ошибся, пусть будет одна а не две, к сути обсуждаемого вопроса это отношения не имеет. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 15:29 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
Dima TНет, это особенности файловой системы, есть спец.каталоги "." и ".." которые выбираются при выборе всех подпапок (обозначают родительский диск и родительскую папку), эта проверка для их игнорирования.'.' обозначает не "родительский диск", а текущую папку. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
ЗЗЫ. Кстати, в коде есть ошибка: директории с названием определённого вида не обрабатываются. Впрочем, в винде такие названия и не распространены ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2010, 05:53 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
Снова всем привет. Пробую разобраться. Пытаюсь выхватить из массива директорию обработки файлов по умолчанию(для каждого параметра свою). И файл (D?????.dbf) как параметр для моей функции, но постоянно что-то получается не так как желаю. )))) Очень интересно. Пробую постоянно все проверить по новому, с новыми операторами. ) Буду бороться с программкой. Всем спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2010, 02:17 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
Снова всем привет. Появилось немного времени и я продолжаю разбираться в этой програмке. )) Сразу вопрос. Каким образом можно указать маску файла, что бы имя нужного файла, при обнаружении его в директории, при сканировании функцией ADIR(), передавалось в качестве параметра? А сама директория в которой находится этот файл, становилась директорией по умолчанию. Например мне нужны все файлы с такой маской X?????.DBF ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2010, 10:36 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
mpolСнова всем привет. Появилось немного времени и я продолжаю разбираться в этой програмке. )) Сразу вопрос. Каким образом можно указать маску файла, что бы имя нужного файла, при обнаружении его в директории, при сканировании функцией ADIR(), передавалось в качестве параметра?Вы не знаете как работать с тестковыми переменными? А сама директория в которой находится этот файл, становилась директорией по умолчанию.А может еще нос вареньем намазать? И нафига нужны пляски со сменой текущего каталога? Так сильно нравится бегать по граблям?Например мне нужны все файлы с такой маской X?????.DBFЕще раз - ны не умеете занести вот этот набор символов в текстовую переменную? Желательно в сочетании с каталогом, в котором хочется поискать файлы. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2010, 11:01 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
Всем привет! Получилась у меня такая программка. Если ее запускать в самом VFP9, то все обрабатывается как и было задумано. Только она не завершается как нужно. ) Но с этим я разберусь позже. Вопрос вот в чем, что нужно написать в этом кусочке кода, что бы информация выводилась не в окно формы, а в Form.Label1.Caption? ?m.kol_ls Когда я указал Form.Label1.Caption = m.kol_ls, мне постоянно выдавало ошибку, поэтому оставил все как есть. Но всетаки интересно как это сделать? Код получившейся программки, во вложении. Буду рад адекватной критике и замечаниям. Проходящему, предлагаю не задерживаясь проходить дальше, ненужные советы и язвительность оставьте пожалуйста при себе. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2011, 14:02 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
mpolВсем привет! Получилась у меня такая программка. Если ее запускать в самом VFP9, то все обрабатывается как и было задумано. Только она не завершается как нужно. ) Но с этим я разберусь позже. Вопрос вот в чем, что нужно написать в этом кусочке кода, что бы информация выводилась не в окно формы, а в Form.Label1.Caption? ?m.kol_ls Когда я указал Form.Label1.Caption = m.kol_ls, мне постоянно выдавало ошибкуКотрую мы должны угадать?, поэтому оставил все как есть. Но всетаки интересно как это сделать?Правильно. В частности, не пытаться число запихать в строковое свойство. Ошибка на несоответствие типа данных была, не так ли? :) Не просто так же там стоИт Код: plaintext
1. Набор команд Код: plaintext 1. 2.
2. Рабочий каталог можно и одной командой заменить и не плодить лишние переменные, да еще и глобальные, как и макроподстановку. Да и повторно его устанавливать как-то некомильфо. 3. Код: plaintext
Код: plaintext
Код: plaintext 1.
5. устал... И это еще не касаясь самого алгоритма обработки. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2011, 15:37 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
В архиве программка и форма. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2011, 15:41 |
|
Как указать в set path to сотни баз для перебора и сравнения информации?
|
|||
---|---|---|---|
#18+
Спасибо, Проходящий. Умеете ведь помочь, когда есть желание. ) Буду делать разбор полетов. Насчет того какую ошибку показывал Фокс, сказать сейчас не могу. Я просто занимаюсь программкой когда есть время. Да и интернета под рукой нет. Пишу сюда когда получается. К стати, про ?, насколько я помню, я выводил не только символьную переменную, но и тип дата. Ведь при , ? DataMax, содержание переменной выводилось. И при запросе ? Vartype(DateMax), показывало D, то есть Date. Другими словами ? выводит на экран не только символьные переменные. Или я ошибаюсь? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2011, 15:55 |
|
|
start [/forum/topic.php?fid=41&msg=37014585&tid=1584636]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 137ms |
0 / 0 |