1 (изменено: _D_V_S_, 2012-03-16 11:03:41)

Тема: VBS: Редактирование текстового файла (Upd.)

Здравствуйте!

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

То есть:

Имеем в файле строку:
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) конец операции
Вопрос: как можно сие провернуть?

2 (изменено: Lucky, 2012-03-16 15:57:03)

Re: VBS: Редактирование текстового файла (Upd.)

Добрый день! Одним из вариантов решения при условии, что соблюдается шаблон строки "max = x" и встречается она только один раз в обрабатываемом файле, вижу нахождение оной строки и её подмена:
Т.е. в вашем коде замените

strNewText = Replace(strText, strOldText, strNewText)

на

strText1=Split(strText,vbCrLf)
For each strTextPart in strText1
  If Instr(1,strTextPart,"max = ",1)>0 then strTextPart = "max = "&UserName
  strNewText=strNewText & strTextPart & vbCrLf
Next
Стремление - залог успеха

3

Re: VBS: Редактирование текстового файла (Upd.)

Не подскажешь, как правильно написать регулярное выражение:

max(тут любое кол-во пробелов или ТАБ-ов)=(тут любое кол-во пробелов или ТАБ-ов)\d+

Если не затруднит!

4

Re: VBS: Редактирование текстового файла (Upd.)

_D_V_S_ пишет:

... как правильно написать регулярное выражение:

max(тут любое кол-во пробелов или ТАБ-ов)=(тут любое кол-во пробелов или ТАБ-ов)\d+

Например, так:

objRegExp.Pattern = "max\s*=\s*\d+"

P.S.
Изучайте регулярные выражения, тогда не придётся "бегать" по форумам и ждать, пока кто-нибудь захочет ответить на вопрос.
Ссылка на справку на этом форуме: Объект RegExp

5 (изменено: _D_V_S_, 2012-03-20 12:49:24)

Re: VBS: Редактирование текстового файла (Upd.)

Огромное спасибо!!

Всё работает.
Спасибо ещё раз!!

PS C регулярными выражениями немного прояснилось
Но вот с переходами и условиями - "IF ... End If" беда просто.
Трёхэтажные конструкции выстраиваются - сам чёрт ногу сломит...

Методом научного тыка подбирал варианты, но вроде-б заработал сценарий. Как и было задумано :-)