Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.09.2007, 00:43
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 1  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
По умолчанию Zinc и VBScript - вызов функций (примеры)

Недавно обнаружил полезную фишку в методе
mdm.System.VBScript.execute()
В документации сказано, что он (метод) ничего не возвращает. Однако это не так.
Код:
var vbCode = 'Function MyFunc(a,b,c,d,e)\r';
vbCode += 'MyFunc=\"Возвращаемое значение\"\r';
vbCode += 'End Function\r';
var Return = mdm.System.VBScript.execute(vbCode, "MyFunc", "", "", "", "", "");
mdm.Dialogs.prompt(Return);
Правда, формально нужно указывать ВСЕ пять аргументов, пусть они и не требуются. Возвращаемое значение может быть либо строкой, либо числом, (объект, массив не возвращается).
Польза в том, что можно использовать vb-скрипты с обратной связью, получая от них данные. Например, задействовать встроенные в vbs функции обработки строк при помощи регулярных выражений, шелльные команды, системные и сетевые функции и т.п.
Скачать доки по скриптам
http://download.microsoft.com/downlo...scrdoc56en.exe
Пример 1
Получить имя компа, юзера, домена
Код:
var vbCode = 'Function MyFunc(a,b,c,d,e)\r';
vbCode += 'Set WshNetwork = CreateObject(\"WScript.Network\")\r';
vbCode += 'MyFunc = WshNetwork.ComputerName & vbNewLine & WshNetwork.UserName & vbNewLine & WshNetwork.UserDomain\r';
vbCode += 'End Function\r';
var Return = mdm.System.VBScript.execute(vbCode, "MyFunc", "", "", "", "", "");
mdm.Dialogs.prompt(Return);
Пример 2
Замена символов в строке. (см. мануал по vb-функции Replace)
Код:
var vbCode = 'Function MyFunc(a,b,c,d,e)\r';
vbCode += 'MyFunc = Replace(a, b, c)\r';
vbCode += 'End Function\r';
var Return = mdm.System.VBScript.execute(vbCode, "MyFunc", "XXpXXPXXp", "p", "_", "", "");
mdm.Dialogs.prompt(Return);
Пример 3
Импорт текста из документа Word. В примере файл "Test line.doc" содержит несколько строк текста.
Код:
var vbCode = 'Function MyFunc(a,b,c,d,e)\r';
vbCode += 'Set objDoc = GetObject(a)\r';
vbCode += 'objDoc.Select\r';
vbCode += 'MyFunc = objDoc.Application.Selection\r';
vbCode += 'objDoc.Application.Quit\r';
vbCode += 'End Function\r';
var Return = mdm.System.VBScript.execute(vbCode, "MyFunc", "C:\\Test line.doc", "", "", "", "");
mdm.Dialogs.prompt(Return);
Аналогично, используя свойства и методы объекта Excel.Sheet, можно импортировать данные из документов Excel.
Пример 4
Регулярные выражения. В примере в передаваемой строке ищется адрес e-mail и производится его разбор.
Код:
var vbCode = 'Function MyFunc(a,b,c,d,e)\r';
vbCode += 'Dim oRe, oMatch, oMatches\r';
vbCode += 'Set oRe = New RegExp\r';
vbCode += 'oRe.Pattern = \"(\\w+)@(\\w+)\\.(\\w+)\"\r';
vbCode += 'Set oMatches = oRe.Execute(a)\r';
vbCode += 'Set oMatch = oMatches(0)\r';
vbCode += 'retStr = \"Email address is: \" & oMatch\r';
vbCode += 'retStr = retStr & vbNewline\r';
vbCode += 'retStr = retStr & \"Email alias is: \" & oMatch.SubMatches(0)\r';
vbCode += 'retStr = retStr & vbNewline\r';
vbCode += 'retStr = retStr & \"Organization is: \" & oMatch. SubMatches(1)\r';
vbCode += 'retStr = retStr & vbNewline\r';
vbCode += 'retStr = retStr & \"Domain is: \" & oMatch. SubMatches(2)\r';
vbCode += 'MyFunc = retStr\r';
vbCode += 'End Function\r';
var Return = mdm.System.VBScript.execute(vbCode, "MyFunc", "Please send mail to dragon@xyzzy.com. Thanks!", "", "", "", "");
mdm.Dialogs.prompt(Return);
Пример 5
Построчное чтение текстового файла. Аргументы вызова - полное имя файла и номер строки, которую нужно прочитать.
Код:
var vbCode = 'Function GetLineTextFile(a,b,c,d,e)\r';
vbCode += 'Const ForReading = 1, ForWriting = 2\r';
vbCode += 'Dim fso, MyFile, res\r';
vbCode += 'Set fso = CreateObject(\"Scripting.FileSystemObject\")\r';
vbCode += 'Set MyFile = fso.OpenTextFile(a, ForReading)\r';
vbCode += 'For i=1 To b\r';
vbCode += 'res = MyFile.ReadLine\r';
vbCode += 'On Error Resume Next\r';
vbCode += 'If res = GetLineTextFile Then\r';
vbCode += 'res = "End line number " & CStr(i-1) & ": " & GetLineTextFile\r';
vbCode += 'GetLineTextFile = res\r';
vbCode += 'Exit Function\r';
vbCode += 'End If\r';
vbCode += 'GetLineTextFile = res\r';
vbCode += 'Next\r';
vbCode += 'MyFile.Close\r';
vbCode += 'End Function\r';
res = mdm.System.VBScript.execute(vbCode, "GetLineTextFile", "c:\\testfile.txt", 1009);
mdm.Dialogs.prompt(res);
Файл, из которого производится чтение, может быть .txt, ini, cfg, .xml и т.д. И бинарный тоже, но с понятными оговорками.
В случае, если передан номер строки, больший их общего количества в файле, возвращается номер последней строки и она сама.


Последний раз редактировалось alexcon314; 13.09.2007 в 03:13.
Старый 13.09.2007, 12:29
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 2  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Прошу прощения за UP. Предыдущий пост заставил меня задуматься, а нельзя ли сделать что-нибудь наподобие динамической библиотеки различных функци vbs? В связи с этим следующий пример.
Код:
var vbCode = 'Function MyFunc(a,b,c,d,e)\r';
vbCode += 'Set objCom = GetObject(a)\r';
vbCode += 'MyFunc = objCom.mkdir(b)\r';
vbCode += 'End Function\r';
var Return = mdm.System.VBScript.execute(vbCode, "MyFunc", "script:http://mdm-zinc.narod.ru/Com/fcom.wsc", "C:\\NewFolder", "", "");
mdm.Dialogs.prompt(Return);
На указанном url лежит файл fcom.wsc (windows scripting component):
Код:
<?xml version="1.0"?>
<component>
<?component error="true" debug="true"?>
<registration
	description="fcom"
	progid="fcom.WSC"
	version="1.00"
	classid="{fd17cd28-824d-4ddb-9980-5825cae259be}"
>
</registration>
<public>
	<method name="mkdir">
		<PARAMETER name="path"/>
	</method>
</public>
<script language="VBScript">
<![CDATA[
function mkdir(path)
	Dim fso, f
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.CreateFolder(path)
	mkdir = f.path
end function
]]>
</script>
</component>
Происходит динамическая подгрузка этого компонента и вызывается его метод mkdir(path), который создает папку 'path'. Проверку на "already exists" я не делал, поэтому имя папки должно быть уникальным, иначе - ошибка.
Т.е. происходит что-то наподобие вызова библиотечной функции.
Еще один занятный пример
Код:
var vbCode = 'Function MyFunc(a,b,c,d,e)\r';
vbCode += 'Set objCom = GetObject(a)\r';
vbCode += 'MyFunc = objCom.typechar(b,CDbl(c),d)\r';
vbCode += 'End Function\r';
var Return = mdm.System.VBScript.execute(vbCode, "MyFunc", "script:http://mdm-zinc.narod.ru/Com/fcom.wsc", "Hello!~It's me.", "0,3", "winword");
mdm.Dialogs.prompt(Return);
Скрипт запускает word, и с интервалом 0.3 с.(из-за особенностей vbs десятичный разделитель должен быть запятая ",") печатает в нем строки "Hello....", если использовать аргумент "notepad" - то запустится блокнот, если строку "12*3~" и аргумент "calc" то ..


Последний раз редактировалось alexcon314; 13.09.2007 в 23:53.
Создать новую тему Ответ Часовой пояс GMT +4, время: 15:43.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 15:43.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.