Форум
Написать нам
  • Страница 1 из 1
  • 1
Модератор форума: as-master  
Разложение пути на части
SowerДата: Воскресенье, 05 Июля 2009, 09:55 | Сообщение # 1
Ветеран форума
Группа: Проверенные
Сообщений: 916
Репутация: 11
Награды: 3
Статус: Offline
У MMB есть функции для извлечения пути, диска,директории, имени файла, расширения, а этот пример показывает способо "разложения пути" на более конкретные части, тоесть: диск, директория со всеми её папками (!), и имени файла, этот скрипт может работать с любыми путями, однако, если путь ведет к файлу, которого не сущесвует, то имя файла будет последним элементом в массиве с элементами директории.

Code

   path$='C:\Documents and Settings\Admin\Мои документы\file.txt'
LoadText("r$","\")
h$='#'
nPath$=StrChange(path$,r$,h$)+'#'
val=GetArrayNum(nPath$,#)
disc$=GetArrayItem(nPath$,#,1  )
val1=val
For i=2 To val1
    folber$=GetArrayItem(nPath$,#,i)
    what$=disc$+ExtractDir(path$)+folber$
    FileExist("what$","ok")
    If (ok=1) Then
      file$=GetArrayItem(nPath$,#,i)
      val=i
    Else
      r=r+1
      folber$[r]=GetArrayItem(nPath$,#,i)
    End
Next i
r=0

Некоторые пояснения: LoadText("r$","\") - используется для загрузки символа \, который не может загружаться в текстовую переменную без пробела.

В переменной path$ ваш путь, который нужно разложить.

-----------------------------------------------------
Пример использования: создаем скрипт, закидываем туда этот код (без строки path$='C:\Documents and Settings\Admin\Мои документы\file.txt'), в нужном месте создаем комманду RunScript("имя вашего скрипта"), в переменно path$ перед запуском скрипта должен быть нужный для разложения путь.

После работы скрипта - вот так можно считать значения:

Code
Message("","disc$")
For i=1 To r
    Message("","folber$[i]")
Next i
Message("","file$")

т.е. disc$ = имя диска, в массиве folber$[] эллементы пути без диска, в file$ имя файла с расширением, в переменной r - количесвто элементов в массиве folber$[].

Сообщение отредактировал Grand - Воскресенье, 05 Июля 2009, 09:57
 
toizyДата: Воскресенье, 05 Июля 2009, 12:40 | Сообщение # 2
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Скрипт очень замусорен. Кроме того, переменная disk$ не обязательно будет содержать именно имя диска, т.к. путь может быть относительным. Для проверки, содержит ли путь имя диска, лучше использовать штатную функцию. Затем, проверка в цикле на существование пути не нужна совершенно, с таким же успехом мы можем вызвать FileExists всего один раз для целого пути и не замедлять и без того медленный цикл. Ещё, смена разделителя - бесполезная работа, потому что мы можем использовать сразу символ '\' и это будет работать.

Моя версия идеи (короткий скрипт в 5 строк):

Code
temp$ = path$ + '\\'
ArrayLen = GetArrayNum(temp$, \)
For idx = 1 To ArrayLen
    Element$[idx] = GetArrayItem(temp$,\,idx)
Next idx

где path$ - путь, ArrayLen - число элементов массива Element$[].

Пример использования в прищепке.

Добавлено (05 Июль 2009, 12:40)
---------------------------------------------
Вот это больше всего понравилось :) Проверка каждого значения, файл это или папка. Т.е. если файл существует, значит, это файл, а если нет, то папка:

Code
FileExist("what$","ok")  
     If (ok=1) Then...

т.е. ты хочешь сказать, что в середине пути у нас могут быть файлы? :)

По определению, если путь полный, то первый элемент это диск, последний - файл. всё остальное - папки.

Прикрепления: Media1.7z (0.7 Kb)


Жизнь оказалась не такой уж и забавной, как поначалу...
 
SowerДата: Воскресенье, 05 Июля 2009, 13:05 | Сообщение # 3
Ветеран форума
Группа: Проверенные
Сообщений: 916
Репутация: 11
Награды: 3
Статус: Offline
Quote (toizy)
всё остальное - папки.

Так, а если это путь не к файлу, а просто папка, например C:\Папка? :)
 
toizyДата: Воскресенье, 05 Июля 2009, 13:27 | Сообщение # 4
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
А зачем вообще это нужно? не пойму. кому надо, тот и так проверит, FileExist вроде никто не отменял. Но если это путь к папке, то всё равно не нужно делать проверку в цикле.

Жизнь оказалась не такой уж и забавной, как поначалу...
 
SergДата: Воскресенье, 05 Июля 2009, 13:36 | Сообщение # 5
Ветеран форума
Группа: Проверенные
Сообщений: 959
Репутация: 6
Награды: 8
Статус: Offline
Разложение пути на части...
Grand,а какие варианты применения этого скрипты,ты же зачем то делал?


 
SowerДата: Понедельник, 06 Июля 2009, 07:07 | Сообщение # 6
Ветеран форума
Группа: Проверенные
Сообщений: 916
Репутация: 11
Награды: 3
Статус: Offline
Quote (Serg)
Grand,а какие варианты применения этого скрипты,ты же зачем то делал?

Например для создания дерева каталогов, используя средсва ммб, чтобы знать все папки на пути к конечной и правильно разложить в иерархии.
 
  • Страница 1 из 1
  • 1
Поиск: