Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 30.12.2015
Сообщений: 9

Поиск корневых каталогов

27.03.2018, 07:01. Показов 1178. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, all!

Есть задача, помогите с идеями для алгоритма.
Таблица содержит поля: Имя пользователя, Путь к файловым ресурсам.
Для каждого пользователя путь к ресурсам может иметь несколько корневых каталогов, и эти корневые каталоги не заданы явно.Задача в том чтобы "вычислить" из всего множества строк для пользователя только корневые каталоги или каталог.
Напрашивается перебор строк с анализом вхождения друг в друга, но как подобрать критерий определения корня не хватает фантазии.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.03.2018, 07:01
Ответы с готовыми решениями:

Создайте файл создания отчетов о содержимом корневых каталогов
Создайте файл создания отчетов о содержимом корневых каталогов всех логических дисков в системе с копированием этого отчета в некоторый

Пакетный файл для создания файла отчета о содержимом корневых каталогов всех логических дисков в системе
Никак не получается. Помогите ) • перемещения файла в другой каталог (с запросом перед удалением из исходного каталога); • удаления...

Реализовать поиск заданного файла в древе каталогов и поиск указанной информации в этом файле
Имеется много папок в каждой папке есть файл proc.txt, как можно по всем этим папкам пройтись и из каждой папки в этом файле достать...

3
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
27.03.2018, 08:49
корень - это чувак, у которого нет родителя
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
27.03.2018, 11:21
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
declare @t table (id int, path varchar(1000));
 
insert into @t
values
 (1, 'path1\path2\path3'),
 (1, '\path4\path1\path2\path3'),
 (1, 'path5\path4\path1\path2\path3'),
 (2, 'path7\path2\path3'),
 (2, '\path4\path7\path2\path3'),
 (2, 'path5\path4\path1\path2\path3'),
 (2, 'path6\path5_1\path4\path1\path2\path3');
 
select
 t.id, c.root, t.path
from
 @t t cross apply
 (select replace('\' + t.path + '\', '\\', '\')) a(path_normalized) cross apply
 (select isnull(nullif(patindex('%[^\]\%', a.path_normalized), 0), cast(0x7fffffff as int))) b(pos) cross apply
 (select left(a.path_normalized, b.pos)) c(root)
where
 not exists(select 1 from @t where id = t.id and patindex('%' + c.root + '\%', replace('\' + path + '\', '\\', '\')) > 1);
Добавлено через 48 минут
Поспешил. Исправления:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
declare @t table (id int, path varchar(1000));
 
insert into @t
values
 (1, 'path1\path2\path3'),
 (1, '\path4\path1\path2\path3'),
 (1, 'path5\path4\path1\path2\path3'),
 (2, 'path7\path2\path3'),
 (2, '\path4\path7\path2\path3'),
 (2, 'path5\path4\path1\path2\path3'),
 (2, 'path6\path5\path4\path1\path2\path3');
 
select
 t.id, c.root, t.path
from
 @t t cross apply
 (select replace('\' + t.path + '\', '\\', '\')) a(path_normalized) cross apply
 (select isnull(nullif(patindex('%[^\]\%', a.path_normalized), 0), cast(0x7fffffff as int))) b(pos) cross apply
 (select left(a.path_normalized, b.pos)) c(root)
where
 not exists(select 1 from @t where id = t.id and patindex('%' + a.path_normalized + '%', replace('\' + path + '\', '\\', '\')) > 1)
1
0 / 0 / 0
Регистрация: 30.12.2015
Сообщений: 9
27.03.2018, 13:25  [ТС]
invm, спасибо! Красивый код.

Но я блин не верно сформулировал, мне нужен не корень.

Я лучше приведу пример:

\path1\path2\path3\path_a
\path1\path2\path3\path_b
\path1\path2\path_c
\path1\path2\path3\path4\path_e
\path1\path_f

Результат:
\path1\path2\path3\
\path1\path2\path3\path4\
\path1\path2\
\path1\

Добавлено через 14 минут
Ещё раз исправляюсь, теперь сформулировано верно.
Нужно выбрать самый короткий уникальный путь:

\path1\path2\path3\path_a
\path1\path2\path3\path_b
\path1\path2\path3
\path1\path2\path_c
\path1\path_f

Результат:

\path1\path2\path3
\path1\path2\path_c
\path1\path_f
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.03.2018, 13:25
Помогаю со студенческими работами здесь

Поиск каталогов
Как реализовать функцию, находящую на диске все каталоги?

Поиск файлов и каталогов
Здравствуйте, нужна ваша помощь. Задали написать программу, которая ищет файли і папки в определенном месте, и выводит в алфавитном...

Поиск пустых каталогов
#!/bin/sh cd ${1:-"."} || exit 1 for i in * do if then ls -1 $i | grep "^d"| echo "$i" fi done нужно чтобы выводил...

Поиск каталогов и добавление их имен в список
procedure TForm4.Button1Click(Sender: TObject); var varser:Tsearchrec; search:integer; begin form4.listBox1.Clear;...

Как правильно сделать поиск каталогов
Как правильно сделать поиск каталогов в Dir1 чтоб найденые каталоги выводились к примеру в Text1?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru