Страница 16 из 27
Добавлено: Ср ноя 24, 2010 12:02
Flasher
Batya
А дальше, если ключ найден, то используем его в следующем методе.
Я в принципе вчера разобрался, что делать со значением переменной, чтобы выдёргивать нужный кусок. Конструкция Left("блабла", Len("блабла"-x). Но хотелось бы узнать именно, как работать с найденным ключём.
Добавлено: Ср ноя 24, 2010 13:17
Batya
Flasher писал(а):А дальше, если ключ найден, то используем его в следующем методе.
И в чём здесь проблема?
Flasher писал(а):Но хотелось бы узнать именно, как работать с найденным ключём.
Как угодно.
Можно, например, вывести его на экран
Flasher писал(а):Left("блабла", Len("блабла")-x)
Здесь пропустил скобку.
Добавлено: Ср ноя 24, 2010 13:21
Flasher
Batya писал(а):И в чём здесь проблема?
Можно, например, вывести его на экран
Ну и как его вывести? Как вообще указывать найденное в дальнейших методах?
Добавлено: Ср ноя 24, 2010 13:35
Batya
Погоди, ты ничего не путаешь?
Элемент массива существует только при
точном соответствии по ключу.
Т.е. здесь
Код: Выделить всё
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 писал(а):Как вообще указывать найденное в дальнейших методах?
В итоге, если найден элемент по переменной, используемой как ключ, то тебе и нужно дальше обрабатывать эту переменную.
Добавлено: Ср ноя 24, 2010 13:52
Flasher
Batya писал(а):Погоди, ты ничего не путаешь?
Элемент массива существует только при точном соответствии по ключу.
Ну это логично. А что я путаю?
Batya писал(а):В итоге, если найден элемент по переменной, используемой как ключ, то тебе и нужно дальше обрабатывать эту переменную.
Это я ещё вчера понял
отсюда и реализовал. Просто я думал, что найденный элемент массива тоже можно как-то обрабатывать, а не только значение переменной, с которых совпал элемент массива.
Добавлено: Ср ноя 24, 2010 15:00
Batya
Flasher писал(а):Просто я думал, что найденный элемент массива тоже можно как-то обрабатывать, а не только значение переменной, с которых совпал элемент массива.
Не сваливай понятия в одну кучу.
Элемент массива - это сущность, которая обусловлена ключом и значением.
У элемента массива можно поменять как значение, так и ключ.
Если ты нашёл элемент массива по ключу, хранящемуся в переменной, то ты можешь обратиться к найденному элементу именно по этому ключу.
Короче, не надо абстракций.
Опиши конкретную задачу.
Добавлено: Пт ноя 26, 2010 05:33
Flasher
Batya
Упрёк понятен. Как ты уже, наверно, понял, скрипт с реализацией
тут.
Вот поясни конкретно, что имеется в виду под "ты можешь обратиться к найденному элементу именно по этому ключу"? Т.е. ровно как
было предписано изначально?
Тогда у меня другой вопрос: можно ли задавать значения в массиве в виде объектов/методов, а не текста, а потом обращаться к найденным значениям по соответствующим им ключам? Если да, то как это будет выглядеть?
Добавлено: Пт ноя 26, 2010 10:29
Batya
Flasher
Честно говоря, пока нет времени понять твою логику с кучей 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 писал(а):можно ли задавать значения в массиве в виде объектов/методов, а не текста, а потом обращаться к найденным значениям по соответствующим им ключам?
Значения ассоциированного массива могут быть любыми - и объектами, и другими массивами.
Ключи же - не знаю, не пробовал.
Добавлено: Пт ноя 26, 2010 10:43
Flasher
Batya
А я ведь
Arrow никогда не пользовался. Удобная функция. Спасибо! Теперь почаще буду смотреть в "Прочие функции". Про то, чтобы впихнуть всё в одну переменную сразу что-то не подумал. Логично ведь.
Не против, если я там свой скрипт заменю на переделанный?
Добавлено: ладно, я там просто ссылку на твой пост добавлю.
Batya писал(а):Ключи же - не знаю, не пробовал.
Про ключи-то я и не спрашиваю, как ты мог заметить, они в данном скрипте являются объектами.

Добавлено: Пт ноя 26, 2010 11:27
Volniy
The key is used to retrieve an individual item and is usually a integer or a string, but can be anything except an array.
Ключ (обычно это целочисленная переменная или строка) может быть чем угодно,
кроме массива.
Добавлено: Пт ноя 26, 2010 11:53
Batya
Flasher писал(а):Про ключи-то я и не спрашиваю, как ты мог заметить, они в данном скрипте являются объектами.
Ты не прав. У тебя это строка, а не объект.
Flasher писал(а):А я ведь Arrow никогда не пользовался.
Не Arrow, а Array.
Flasher писал(а):Не против, если я там свой скрипт заменю на переделанный?
Не против.
Volniy
Спасибо за информацию.
Добавлено: Пт ноя 26, 2010 11:57
Flasher
Batya писал(а):У тебя это строка, а не объект.
Строка, использующая метод NameSpace объекта Shell. Что не так?
Batya писал(а):Не Arrow, а Array.
Ну описался. Прям обязательно было поправлять?

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