Windows Script Host
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
И в чём здесь проблема?Flasher писал(а):А дальше, если ключ найден, то используем его в следующем методе.
Как угодно.Flasher писал(а):Но хотелось бы узнать именно, как работать с найденным ключём.
Можно, например, вывести его на экран
Здесь пропустил скобку.Flasher писал(а):Left("блабла", Len("блабла")-x)
Нет, я не сплю. Я просто медленно моргаю.
Погоди, ты ничего не путаешь?
Элемент массива существует только при точном соответствии по ключу.
Т.е. здесь
"Истина" будет выведена только в первом случае, в остальных двух - "Ложь".
Элемент массива существует только при точном соответствии по ключу.
Т.е. здесь
Код: Выделить всё
A = "C:"
B = "C:\1\1"
C = "C:"
D = "C:\1"
E = "C:\2"
Set List = CreateObject("Scripting.Dictionary")
List.Add A, ""
List.Add B, ""
MsgBox List.Exists(C)
MsgBox List.Exists(D)
MsgBox List.Exists(E)В итоге, если найден элемент по переменной, используемой как ключ, то тебе и нужно дальше обрабатывать эту переменную.Flasher писал(а):Как вообще указывать найденное в дальнейших методах?
Нет, я не сплю. Я просто медленно моргаю.
Ну это логично. А что я путаю?Batya писал(а):Погоди, ты ничего не путаешь?
Элемент массива существует только при точном соответствии по ключу.
Это я ещё вчера понял отсюда и реализовал. Просто я думал, что найденный элемент массива тоже можно как-то обрабатывать, а не только значение переменной, с которых совпал элемент массива.Batya писал(а):В итоге, если найден элемент по переменной, используемой как ключ, то тебе и нужно дальше обрабатывать эту переменную.
Не сваливай понятия в одну кучу.Flasher писал(а):Просто я думал, что найденный элемент массива тоже можно как-то обрабатывать, а не только значение переменной, с которых совпал элемент массива.
Элемент массива - это сущность, которая обусловлена ключом и значением.
У элемента массива можно поменять как значение, так и ключ.
Если ты нашёл элемент массива по ключу, хранящемуся в переменной, то ты можешь обратиться к найденному элементу именно по этому ключу.
Короче, не надо абстракций.
Опиши конкретную задачу.
Нет, я не сплю. Я просто медленно моргаю.
Batya
Упрёк понятен. Как ты уже, наверно, понял, скрипт с реализацией тут.
Вот поясни конкретно, что имеется в виду под "ты можешь обратиться к найденному элементу именно по этому ключу"? Т.е. ровно как было предписано изначально?
Тогда у меня другой вопрос: можно ли задавать значения в массиве в виде объектов/методов, а не текста, а потом обращаться к найденным значениям по соответствующим им ключам? Если да, то как это будет выглядеть?
Упрёк понятен. Как ты уже, наверно, понял, скрипт с реализацией тут.
Вот поясни конкретно, что имеется в виду под "ты можешь обратиться к найденному элементу именно по этому ключу"? Т.е. ровно как было предписано изначально?
Тогда у меня другой вопрос: можно ли задавать значения в массиве в виде объектов/методов, а не текста, а потом обращаться к найденным значениям по соответствующим им ключам? Если да, то как это будет выглядеть?
Flasher
Честно говоря, пока нет времени понять твою логику с кучей If-ов. Позже разберусь.
Пока только немного упростил твой скрипт:
Честно говоря, пока нет времени понять твою логику с кучей If-ов. Позже разберусь.
Пока только немного упростил твой скрипт:
Код: Выделить всё
' Reload TC with return to different directories types
' and open archives
' Requirements: Script Helper ActiveX for TC by Volniy
' Parameters: "%X%P%Z" "%T"
' Flasher (c)
'=================================
LP = WScript.Arguments(0)
RP = WScript.Arguments(1)
With CreateObject("TCScript.Helper")
.SendCommand "cm_ConfigSaveDirHistory"
L = Replace(.INIRead(.MainINI, "LeftHistory", "0", ""), "/", "")
R = Replace(.INIRead(.MainINI, "RightHistory", "0", ""), "/", "")
.SendCommand "cm_Exit", True
End With
LM = Left(L, Len(L)-(Len(LP)-1))
RM = Left(R, Len(R)-(Len(RP)-1))
Dim ListL, ListR, NameArr, N, Param, TCexe
Set ListL = CreateObject("Scripting.Dictionary")
Set ListR = CreateObject("Scripting.Dictionary")
NameArr = Array(&Ha, &H3, &H4, &H11, &H12)
With CreateObject("Shell.Application")
For Each N In NameArr
ListL.Add .NameSpace(N).Self.Path & "|" & LP , ""
ListR.Add .NameSpace(N).Self.Path & "|" & RP , ""
Next
End With
If L="::|"&LP And ListR.Exists(R) Then
Param = "/L=""" & L & """ /R=""" & RM & """"
ElseIf ListL.Exists(L) And R="::|"&RP Then
Param = "/L=""" & LM & """ /R=""" & R & """"
ElseIf ListL.Exists(L) And ListR.Exists(R) Then
Param = "/L=""" & LM & """ /R=""" & RM & """"
ElseIf ListL.Exists(L) Then
Param = "/R=""" & R & """ /L=""" & LM & """"
ElseIf ListR.Exists(R) Then
Param = "/L=""" & L & """ /R=""" & RM & """"
Else
Param = "/L=""" & L & """ /R=""" & R & """"
End If
TCexe = "%Commander_Path%\totalcmd.exe"
With CreateObject("WScript.Shell")
.Run """" & .ExpandEnvironmentStrings(TCexe) & """ " & Param, 0
End With
WScript.QuitЗначения ассоциированного массива могут быть любыми - и объектами, и другими массивами. Ключи же - не знаю, не пробовал.Flasher писал(а):можно ли задавать значения в массиве в виде объектов/методов, а не текста, а потом обращаться к найденным значениям по соответствующим им ключам?
Нет, я не сплю. Я просто медленно моргаю.
Batya
А я ведь Arrow никогда не пользовался. Удобная функция. Спасибо! Теперь почаще буду смотреть в "Прочие функции". Про то, чтобы впихнуть всё в одну переменную сразу что-то не подумал. Логично ведь.
Не против, если я там свой скрипт заменю на переделанный?
Добавлено: ладно, я там просто ссылку на твой пост добавлю.

А я ведь Arrow никогда не пользовался. Удобная функция. Спасибо! Теперь почаще буду смотреть в "Прочие функции". Про то, чтобы впихнуть всё в одну переменную сразу что-то не подумал. Логично ведь.
Не против, если я там свой скрипт заменю на переделанный?
Добавлено: ладно, я там просто ссылку на твой пост добавлю.
Про ключи-то я и не спрашиваю, как ты мог заметить, они в данном скрипте являются объектами.Batya писал(а):Ключи же - не знаю, не пробовал.
Ты не прав. У тебя это строка, а не объект.Flasher писал(а):Про ключи-то я и не спрашиваю, как ты мог заметить, они в данном скрипте являются объектами.
Не Arrow, а Array.Flasher писал(а):А я ведь Arrow никогда не пользовался.
Не против.Flasher писал(а):Не против, если я там свой скрипт заменю на переделанный?
Volniy
Спасибо за информацию.
Нет, я не сплю. Я просто медленно моргаю.
Метод NameSpace объекта Shell возвращает строку. Соответственно, ключём массива является строка (а не объект). Не надо сваливать всё в кучу.Flasher писал(а):Строка, использующая метод NameSpace объекта Shell. Что не так?
На всякий случай.Flasher писал(а):Ну описался. Прям обязательно было поправлять?
А значения в массивах у тебя пока пустые. (Это я тоже, на всякий случай.)Flasher писал(а):Про ключи-то я и не спрашиваю...
Нет, я не сплю. Я просто медленно моргаю.
Да я специально не сваливаю. Я по понятным причинам только вникаю в нюансы терминологии. Ну что'ж, будем знать.Batya писал(а):Соответственно, ключём массива является строка (а не объект). Не надо сваливать всё в кучу.
Напиши тогда, как будет выглядеть использование объектов в подобном массиве. Интересно стало.
Ну да. А они мне в данном случае и не нужны. Если бы я использовал ListL/R.Items(L/R), то другое дело.Batya писал(а):А значения в массивах у тебя пока пустые.
Альтернативой метода SetSrcPath (установить путь в панели-источнике TC) из Хелпера является только запуск через командную строку типа
или есть ещё варианты?
Код: Выделить всё
.Run .ExpandEnvironmentStrings("%COMMANDER_PATH%\totalcmd.exe") & " /O /S /L=" & NewSrcPath