Войти

Показать полную графическую версию : VBS: Редактирование текстового файла


_D_V_S_
16-03-2012, 11:18
Здравствуйте!

Подскажите плиз. Сам я в скриптах только начинающий :)
Наваял (по примерам с форумов) скрипт. Он заменяет значения функций в инишнике. Значение можно вводить самому. Но дело в том, что старое значение остаётся - оно следует после нововведённого.

То есть:

Имеем в файле строку:
max = 200
Нам надо чтобы строка приняла вид:
max = 100
(100 - произвольное значение, вводимое нами с помощью UserName=InputBox("Макс [max]","File.ext","ВВОДИТЕ"))

Вот операция замены:
strOldText = "max = "
strNewText = "max = "&UserName&""
strNewText = Replace(strText, strOldText, strNewText)
Строка принимает вид:
max = 100 200

Где max - функция, 100 - нововведённое значение, 200 - старое значение.

Далее к примеру нам надо поменять значение max на 50.
Строка принимает вид:
max = 50 100 200

И строка пухнет... Я нашел выход только с комментарием ";"
strNewText = "max = "&UserName&" ;"

Строка принимает вид:
max = 50 ;100 ;200

Хоть и - работает программа с таким инишником... Но это совсем не дело :(

Я совсем новичок в VBS. Прошу помощи.

Сам скрипт:
Dim fso
Const ForReading = 1
Const ForWriting = 2

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("File.ext", ForReading)
UserName=InputBox("Макс [max]","File.ext","ВВОДИТЕ") '
strText = objFile.ReadAll
objFile.Close

strOldText = "max = "
strNewText = "max = "&UserName&" ;"
strNewText = Replace(strText, strOldText, strNewText)

Set objFile = objFSO.OpenTextFile("File.ext", ForWriting)
objFile.WriteLine strNewText
objFile.Close

'Dim fso
'Const ForReading = 1
'Const ForWriting = 2

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("File.ext", ForReading)
UserName=InputBox("Макс1 [max1]","File.ext","ВВОДИТЕ") '
strText = objFile.ReadAll
objFile.Close

strOldText = "max1 = "
strNewText = "max1 = "&UserName&" ;"
strNewText = Replace(strText, strOldText, strNewText)

Set objFile = objFSO.OpenTextFile("File.ext", ForWriting)
objFile.WriteLine strNewText

objFile.Close
Тут в конце строки
strNewText = "max1 = "&UserName&" ;"
";" это комментарий.
Программа не воспринимает закомментированное старое значение. Иного выхода борьбы со следами старых значений не нашёл...
Но хоть что-то :) Только вот плодятся эти комментарии после каждого введённого значения. Строка распухает.

Мысли:
1) Использовать для поиска регулярные выражения. Убейте - не понимаю, как сделать реплейс на инпутбокс в них...
2) Сначала удалить найденную строку, а потом на её место записать "max1 = "&UserName&". Не нашёл как удалять строчки...
3) Закомментировать найденную строку, а потом на следующую строку записать "max1 = "&UserName&". Файл распухнет теперь построчно...
4) Мысль работать с копией файла. То есть с самого начала создаётся копия файла в каком-нмбуль каталоге, и при каждом изменении - удаляется текущий файл а на его место копируется мастер-копия и все операции проводятся с ней.
//То есть:
4-0) создаём папку "BackUp"
4-1) копируем туда File.Ext
4-2) удаляем исходный File.Ext
4-3) копируем из BackUp File.ext обратно
4-4) конец операции

Вопрос: как можно сие провернуть?

DmitriiV
16-03-2012, 12:39
Использовать для поиска регулярные выражения. Убейте - не понимаю »Пример:

myString = "max = 101" & vbNewLine & "max = 102" & vbNewLine & "max = 103"
strTemp = Trim(InputBox("Число:"))
If Len(strTemp) > 0 Then
If IsNumeric(strTemp) Then
Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Global = True
objRegExp.IgnoreCase = True
objRegExp.Pattern = "max = \d+"
MsgBox objRegExp.Replace(myString, "max = " & strTemp)
Set objRegExp = Nothing
Else
MsgBox "Неверное значение."
End If
End If

_D_V_S_
16-03-2012, 13:27
DmitriiV,

Спасибо!

Только я совсем запутался...
Пробовал и так и эдак вставлять Ваш код в сценарий...

Но в лучшем случае на выходе получаю файлы вида:
max_item_mass = 101
max_item_mass = 102
max_item_mass = 103
И всё. Остальное содержимое файла - стирается.

Если не затруднит - пожалуйста набросайте полностью код ( с комментами если можно) - я в тупике :(

DmitriiV
16-03-2012, 14:31
... Остальное содержимое файла - стирается »Это же был лишь пример на использование регулярных выражений.
... набросайте полностью код »Как-то так (проверку не делал):

Dim objRegExp, objFSO, objFile
Dim strText, UserName, strNewText
Const ForReading = 1
Const ForWriting = 2

Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Global = True
objRegExp.IgnoreCase = True
Set objFSO = CreateObject("Scripting.FileSystemObject")
UserName = Trim(InputBox("Макс [max]", "File.ext", "ВВОДИТЕ"))
If Len(UserName) > 0 Then
While Not IsNumeric(UserName)
MsgBox "Задано не числовое значение. Повторите ввод.", vbExclamation
UserName = Trim(InputBox("Макс [max]", "File.ext", "ВВОДИТЕ"))
Wend
Set objFile = objFSO.OpenTextFile("File.ext", ForReading)
strText = objFile.ReadAll
objFile.Close
objRegExp.Pattern = "max = \d+"
strNewText = objRegExp.Replace(strText, "max = " & UserName)
Set objFile = objFSO.OpenTextFile("File.ext", ForWriting)
objFile.WriteLine strNewText
objFile.Close
End If
UserName = Trim(InputBox("Макс1 [max1]", "File.ext", "ВВОДИТЕ"))
If Len(UserName) > 0 Then
While Not IsNumeric(UserName)
MsgBox "Задано не числовое значение. Повторите ввод.", vbExclamation
UserName = Trim(InputBox("Макс1 [max1]", "File.ext", "ВВОДИТЕ"))
Wend
Set objFile = objFSO.OpenTextFile("File.ext", ForReading)
strText = objFile.ReadAll
objFile.Close
objRegExp.Pattern = "max1 = \d+"
strNewText = objRegExp.Replace(strText, "max1 = " & UserName)
Set objFile = objFSO.OpenTextFile("File.ext", ForWriting)
objFile.WriteLine strNewText
objFile.Close
End If
Set objFile = Nothing
Set objFSO = Nothing
Set objRegExp = Nothing
WScript.Quit 0

_D_V_S_
17-03-2012, 13:03
DmitriiV,
Огромное спасибо!

Начинаю немного понимать...

Вот регулярное выражение - думаю как написать...
max(тут любое кол-во пробелов или ТАБ-ов)=(тут любое кол-во пробелов или ТАБ-ов)\d+
Любое кол-во - это от нуля. То есть и отсутствие тоже. Как написать... Спасибо ещё раз сразу!!
Не подскажешь?

PS Если VBS этот получится - многие мои друзья спасибо скажут! Я в комментах к нему тебя укажу.

DmitriiV
20-03-2012, 08:02
_D_V_S_, смотрите здесь http://forum.script-coding.com/viewtopic.php?pid=58092#p58092.




© OSzone.net 2001-2012