|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] рэндом |
|
|
VBS/WSH/JS - [решено] рэндом
|
Пользователь Сообщения: 56 |
Подскажите, нужно написать скрипт, который бы рэндомно вставлял в текстовый файл одну из 3 заданых строк
|
|
Отправлено: 20:32, 17-10-2016 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Что именно вызывает затруднения — «рэндомно … одну из 3 заданых строк» или «вставлял в текстовый файл»? Первое решается примерно так:
Второе же не решаемо в принципе, поскольку WSH не умеет «вставлять в файл», а только писать в файл с нуля, либо дополнять файл. Обходится это чтением всего содержимого файла (целиком или по частям), обработкой и последующей записью. В любом случае требуется знать имя и путь к файлу, его кодировку и принцип, по которому будет определяться место «вставки». |
Отправлено: 21:04, 17-10-2016 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 56
|
Профиль | Отправить PM | Цитировать тогда немного уточню, нужно дописать в уже существующий файл одну из 3 строк, но в определённое место
пример : нужно найти в тексте слово "мама" и рэндомно заменить на одно из трех "мама", "мыла" или "раму" |
Отправлено: 21:17, 17-10-2016 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Перечитайте выделенное:
Цитата Iska:
|
|
Отправлено: 22:26, 17-10-2016 | #4 |
Пользователь Сообщения: 56
|
Профиль | Отправить PM | Цитировать имя, кодировка и путь к файлу известно, нужно найти в .txt слово "мама" и рэндомно заменить на одно из трех "мама", "мыла" или "раму"
|
|
Последний раз редактировалось null999, 17-10-2016 в 22:51. Отправлено: 22:42, 17-10-2016 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата null999:
Мне-то что, я сделаю по наиболее простому варианту, а если у Вас из-за кодировки не отработает (или концы строк окажутся не CrLf (DOS/Windows), а, скажем, Cr (Mac), або Lf (Unix)) — это же не проблема, я ведь добрая фея, и здесь только для того, чтобы выполнять Ваши желания, переделаю раз, другой, третий — по первому Вашему требованию. Пробуйте: Скрытый текст
Option Explicit Dim strSourceFile Dim strContent Dim objRegExp If WScript.Arguments.Count = 1 Then strSourceFile = WScript.Arguments.Item(0) With WScript.CreateObject("Scripting.FileSystemObject") If .FileExists(strSourceFile) Then With .OpenTextFile(strSourceFile) strContent = .ReadAll() .Close End With Set objRegExp = WScript.CreateObject("VBScript.RegExp") With objRegExp .IgnoreCase = True .Global = True .Pattern = "мама" End With If objRegExp.Test(strContent) Then .CopyFile strSourceFile, .GetBaseName(strSourceFile) & ".bak" ,True Randomize Timer With .CreateTextFile(strSourceFile, True) .Write objRegExp.Replace(strContent, Array("Мама", "мыла", "раму")(Int(Rnd * 3))) .Close End With Else WScript.Echo "Pattern [" & objRegExp.Pattern & "] not found in content of source file [" & strSourceFile & "]." WScript.Quit 3 End If Set objRegExp = Nothing Else WScript.Echo "Can't find source file [" & strSourceFile & "]." WScript.Quit 2 End If End With Else WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source file>" WScript.Quit 1 End If WScript.Quit 0 Сохраните код в файл с расширением .vbs. Путь к исходному файлу задаётся параметром скрипта (также можно просто перетащить исходный файл на скрипт в Проводнике). Копия исходного файла будет сохранена с расширением .bak (при этом существующий файл .bak, если он есть, будет молча перезаписан). |
|
Отправлено: 09:56, 18-10-2016 | #6 |
Пользователь Сообщения: 56
|
Профиль | Отправить PM | Цитировать сори, имел ввиду, что в скрипте можете любой путь вставить, я потом поменяю на нужный, кодировка юникод
|
Последний раз редактировалось null999, 18-10-2016 в 10:51. Отправлено: 10:36, 18-10-2016 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата null999:
Пробуйте так: Скрытый текст
Option Explicit Const ForReading = 1 Const TristateTrue = -1 Dim strSourceFile Dim strContent Dim objRegExp If WScript.Arguments.Count = 1 Then strSourceFile = WScript.Arguments.Item(0) With WScript.CreateObject("Scripting.FileSystemObject") If .FileExists(strSourceFile) Then With .OpenTextFile(strSourceFile, ForReading, False, TristateTrue) strContent = .ReadAll() .Close End With Set objRegExp = WScript.CreateObject("VBScript.RegExp") With objRegExp .IgnoreCase = True .Global = True .Pattern = "мама" End With If objRegExp.Test(strContent) Then .CopyFile strSourceFile, .GetBaseName(strSourceFile) & ".bak" ,True Randomize Timer With .CreateTextFile(strSourceFile, True, True) .Write objRegExp.Replace(strContent, Array("Мама", "мыла", "раму")(Int(Rnd * 3))) .Close End With Else WScript.Echo "Pattern [" & objRegExp.Pattern & "] not found in content of source file [" & strSourceFile & "]." WScript.Quit 3 End If Set objRegExp = Nothing Else WScript.Echo "Can't find source file [" & strSourceFile & "]." WScript.Quit 2 End If End With Else WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source file>" WScript.Quit 1 End If WScript.Quit 0 |
|
Отправлено: 11:12, 18-10-2016 | #8 |
Пользователь Сообщения: 56
|
Профиль | Отправить PM | Цитировать если воспользоваться перетаскиванием файла, то ошибка "Pattern [мама] not found in content of source file [E:\1.txt].
|
Отправлено: 11:39, 18-10-2016 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Тогда упаковывайте Ваш файл E:\1.txt в архив и прикладывайте к сообщению (если архив не помещается — тогда на RGhost или Яндекс.Диск). Будем смотреть. Подозреваю, что там не просто юникод, а какой-нибудь UTF-8 для полного счастья.
|
Отправлено: 11:55, 18-10-2016 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
|