Показать полную графическую версию : [решено] VBS - переменные файла
Ragnazar
10-10-2012, 07:42
Как заставить VBS скрипт читать переменные из файла?
Есть файл var.cfg в нем примерно такой текст
anyVar=VARHERE
another.var1=Var1
another.var2=Var2
и тд. Тоесть
название.переменной=значение переменной
В java такое точно есть но нужно через VBS
Ragnazar, в VBScript переменные не могут содержать точку:
Naming Restrictions
Variable names follow the standard rules for naming anything in VBScript. A variable name:
* Must begin with an alphabetic character.
* Cannot contain an embedded period.
* Must not exceed 255 characters.
* Must be unique in the scope in which it is declared.
В остальном — пожалуйста:
Option Explicit
Dim strContent
Dim strLine
With WScript.CreateObject("Scripting.FileSystemObject")
With .OpenTextFile("E:\Песочница\0182\var.cfg")
For Each strLine In Split(.ReadAll(), vbCrLf)
WScript.Echo "Var name:", Split(strLine, "=")(0), vbTab, "Var value:", Split(strLine, "=")(1)
Execute strLine
'…or ExecuteGlobal strLine
Next
.Close
End With
End With
WScript.Quit 0
Ragnazar
10-10-2012, 08:30
Работает. Но есть два недочета
1) Пишет значение только первой строчки.
var.cfg
var1=AnyVar
var2=VarHere
Выход
Var name: var1 Var value: AnyVar
var2
2) После нажатия ОК выдает ошибку
Строка: 11
Символ: 4
Ошибка: Недопустимый знак
Самому разобрать и понять скрипт пока не получилось и я просто скопировал
Работает. Но есть два недочета
1) Пишет значение только первой строчки.
var.cfg
var1=AnyVar
var2=VarHere
Выход
Var name: var1 Var value: AnyVar
var2 »
У меня на приведённом примере:
Var name: var1 Var value: AnyVar
Var name: var2 Var value: VarHere
2) После нажатия ОК выдает ошибку
Строка: 11
Символ: 4
Ошибка: Недопустимый знак »
Ragnazar, полагаю, дело по-прежнему в именовании переменных. Выложите файл «var.cfg», упаковав его в архив.
P.S. Я предпочитаю исполнять скрипты под cscript.exe.
Ragnazar
10-10-2012, 14:49
Странно но вторая проблема прошла сама. Но вторая сточка все так-же выдает только var2
А и можно - ли сделать что-бы эти переменные можно-было использовать далее?? Не только в пределах
WScript.Echo "Var name:", Split(strLine, "=")(0), vbTab, "Var value:", Split(strLine, "=")(1)
Ragnazar
10-10-2012, 14:51
http://s018.radikal.ru/i507/1210/88/07ecd4d6039a.png
var.cfg (http://forum.oszone.net/attachment.php?attachmentid=88488&stc=1&d=1349866296)
Но вторая сточка все так-же выдает только var2 »
Как я и предполагал — Ваш файл «var.cfg» в качестве разделителя строк использует не стандартные для Windows «CrLf», а только «Lf», использование которых характерно для Unix [оттого-то я и просил не просто выложить содержимое файла на форум, а хотел увидеть именно сам файл и именно в архиве, дабы сохранить его целостность для последующего анализа]. Потому Вы и видели в выводе:
Var name: var1 Var value: AnyVar
var2
одну лишь, единственную переменную — var1, со значением AnyVar ↵var2 (где «↵» — Lf, LineFeed).
Выход: использовать в функции Split() разделитель «vbLf» вместо «vbCrLf», либо перейти использование в файле «var.cfg» стандартных для Windows разделителей строк.
А и можно - ли сделать что-бы эти переменные можно-было использовать далее?? Не только в пределах
WScript.Echo "Var name:", Split(strLine, "=")(0), vbTab, "Var value:", Split(strLine, "=")(1) »
А как Вы будете заранее знать, какие в файле переменные?
Опишите, что именно Вы хотите получить. Хранение значений некоторых, заранее известных, переменных между запусками скрипта?
Ragnazar
13-10-2012, 15:28
Будет лишь один скрипт а вот var.cfg будет гулять и меняться
Скрипт будет дописан с учетом всех переменных.
Лишние переменные не будут использоваться а те что отсутствуют будут с ошибками либо скрипт не продолжит работу
Ragnazar, понятней не стало.
Ragnazar
13-10-2012, 19:14
Скрипт будет основан на выведении данных в виде
Товар:%var1% Статус:%var1s%
И при добавлении новых строк в конфиг будет больше строк выводиться
Если в конфиге 4 товара
Товар:Некийтовар Статус:ОК
Товар:Другойтовар Статус:ОК
Товар:Ещетовар Статус:Нет
Товар:Товар Статус:
cfg
var1=Некийтовар
var1s=ОК
var2=Другойтовар
var2s=ОК
var3=Ещетовар
var3s=Нет
var4=Товар
var4s=
Ragnazar, тогда переменные Вам ни к чему. Это обычные данные. Используйте простой двумерный (а лучше — ассоциативный) массив.
Ragnazar, если не совсем понятно, вот пример:
Option Explicit
Dim objDictionary
Dim elem
Dim strLine
Set objDictionary = WScript.CreateObject("Scripting.Dictionary")
With WScript.CreateObject("Scripting.FileSystemObject")
With .OpenTextFile("E:\Песочница\0183\var.cfg")
For Each strLine In Split(.ReadAll(), vbCrLf)
objDictionary.Add Split(strLine, "=")(0), Split(strLine, "=")(1)
Next
.Close
End With
End With
For Each elem In objDictionary.Keys
WScript.Echo "Key:", elem, vbTab, "Value:", objDictionary.Item(elem)
Next
objDictionary.RemoveAll
Set objDictionary = Nothing
WScript.Quit 0
Если же понадобится заполнять некий шаблон — Вы можете проверять существование путём «objDictionary.Exists(<Key>)».
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC