|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - VBS: Редактирование текстового файла |
|
VBS/WSH/JS - VBS: Редактирование текстового файла
|
Новый участник Сообщения: 3 |
Здравствуйте!
Подскажите плиз. Сам я в скриптах только начинающий ![]() Наваял (по примерам с форумов) скрипт. Он заменяет значения функций в инишнике. Значение можно вводить самому. Но дело в том, что старое значение остаётся - оно следует после нововведённого. То есть: Имеем в файле строку: 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 Тут в конце строки ";" это комментарий. Программа не воспринимает закомментированное старое значение. Иного выхода борьбы со следами старых значений не нашёл... Но хоть что-то ![]() Мысли: 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
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать DmitriiV,
Спасибо! Только я совсем запутался... Пробовал и так и эдак вставлять Ваш код в сценарий... Но в лучшем случае на выходе получаю файлы вида: И всё. Остальное содержимое файла - стирается. Если не затруднит - пожалуйста набросайте полностью код ( с комментами если можно) - я в тупике ![]() |
Отправлено: 13:27, 16-03-2012 | #3 |
Старожил Сообщения: 210
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать DmitriiV,
Огромное спасибо! Начинаю немного понимать... Вот регулярное выражение - думаю как написать... Любое кол-во - это от нуля. То есть и отсутствие тоже. Как написать... Спасибо ещё раз сразу!! Не подскажешь? PS Если VBS этот получится - многие мои друзья спасибо скажут! Я в комментах к нему тебя укажу. |
|
Последний раз редактировалось _D_V_S_, 17-03-2012 в 13:28. Отправлено: 13:03, 17-03-2012 | #5 |
Старожил Сообщения: 210
|
Профиль | Отправить PM | Цитировать _D_V_S_, смотрите здесь http://forum.script-coding.com/viewt...d=58092#p58092.
|
Отправлено: 08:02, 20-03-2012 | #6 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|