Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - VBS: Редактирование текстового файла

Ответить
Настройки темы
VBS/WSH/JS - VBS: Редактирование текстового файла

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

То есть:

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

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

Отправлено: 11:18, 16-03-2012

 

Старожил


Сообщения: 210
Благодарности: 76

Профиль | Отправить PM | Цитировать


Цитата _D_V_S_:
Использовать для поиска регулярные выражения. Убейте - не понимаю »
Пример:
Код: Выделить весь код
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
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:39, 16-03-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


DmitriiV,

Спасибо!

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

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

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

Отправлено: 13:27, 16-03-2012 | #3


Старожил


Сообщения: 210
Благодарности: 76

Профиль | Отправить PM | Цитировать


Цитата _D_V_S_:
... Остальное содержимое файла - стирается »
Это же был лишь пример на использование регулярных выражений.
Цитата _D_V_S_:
... набросайте полностью код »
Как-то так (проверку не делал):
Код: Выделить весь код
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
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:31, 16-03-2012 | #4


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

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

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

Последний раз редактировалось _D_V_S_, 17-03-2012 в 13:28.


Отправлено: 13:03, 17-03-2012 | #5


Старожил


Сообщения: 210
Благодарности: 76

Профиль | Отправить PM | Цитировать


_D_V_S_, смотрите здесь http://forum.script-coding.com/viewt...d=58092#p58092.

Отправлено: 08:02, 20-03-2012 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - VBS: Редактирование текстового файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Разбивка текстового файла файла Seryoga204 Скриптовые языки администрирования Windows 1 04-10-2010 21:19
CMD/BAT - [решено] Переменная из текстового файла taravasya Скриптовые языки администрирования Windows 1 20-02-2010 10:20
Скрипт по обработке текстового файла Space-06 AutoIt 4 26-06-2009 10:36
CMD/BAT - [решено] Как скопировать имя файла из текстового файла в код батника и т.д. Nun-Nun Скриптовые языки администрирования Windows 6 13-05-2009 13:28
C/C++ - Открытие текстового файла .::.DIMA.::. Программирование и базы данных 4 05-05-2009 12:17




 
Переход