|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Замена текста с помощью VBScript. |
|
VBS/WSH/JS - Замена текста с помощью VBScript.
|
Новый участник Сообщения: 8 |
Здравствуйте.
Нужна ваше помощь. В файле text.txt есть строчка с текстом строчка, нужно найти её и добавить в начале, ну например цифру 1, чтобы получилось 1строчка (либо просто заменить строчка на 1строчка). Но если в этом файле уже есть 1строчка, то наоборот убрать 1, чтобы получилось строчка. |
|
Отправлено: 20:14, 09-12-2011 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать fName = "D:\Delete\111.txt" ' Где текстовый файл tStrok = "домино" ' Что ищем в строке текста bStrok = "1" ' Что вставляем/удаляем в начале найденной строки eStrok = "другое" ' С этим словом строки не меняем Set FSO = CreateObject("Scripting.FileSystemObject") Set F = FSO.OpenTextFile(fName, 1, False) ' Открываем исходный текст файл для чтения Mas = Split(F.ReadAll(), vbCrLf) ' Cчитываем весь файл в строковую переменную Разбиваем полученную строку в массив. Резделитель - конец строки и перевод строки vbCrLf F.Close ' Закрываем файл N = UBound(Mas) LtStrok = LCase(tStrok) ' Преобразуем иском подстроку к ниж регистру LbStrok = LCase(bStrok) ' Преобразуем вставляем/удаляем подстроку к ниж регистру LeStrok = LCase(eStrok) ' Преобразуем исключение подстроку к ниж регистру ii = Len(bStrok) For i = 0 To N LMas = LCase(Mas(i)) ' Преобразуем строку к ниж регистру If InStr(1, LMas, LtStrok, 1) <> 0 And InStr(1, LMas, LeStrok, 1) = 0 Then ' Если подстрока найдена а исключения нет If InStr(1, LMas, LbStrok, 1) = 1 Then ' Если в начале строки есть удаляемая подстрока Mas(i) = LTrim(Mid(Mas(i), ii + 1)) Else Mas(i) = bStrok + " " + Mas(i) End If End If Next Set F = FSO.OpenTextFile(fName, 2, False) ' Открываем исходный файл для записи F.Write Join(Mas, vbCrLf) ' Консолидируем массив в строку для записи Записываем полученное на место исходного файла F.Close ' Закрываем файл |
------- Отправлено: 10:04, 16-12-2011 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать Большое спасибо что помогаете мне.
Но к сожалею возникла острая потребность еще в одном скрипте. В файле file.txt, есть строчка кино, шахматы, вино нужно найти эту строчку по слову кино и заменить в ней шахматы на домино. Но если в этой строчке домино, то наоборот, заменить на шахматы. Без исключений. |
Отправлено: 21:56, 18-12-2011 | #12 |
Новый участник Сообщения: 19
|
Профиль | Отправить PM | Цитировать Ситуация следующая - есть файл (html), в нём много всего и есть строка с параметрами, в которой нужно менять номер. Строка выглядит примерно так -
...xxxxxxxxxx=336480(xxxxx... Из постоянных ориентиров: - имя файла (index.html) - знак равно "=" перед номером - левая кавычка "(" после номера - постоянное расположение первой цифры номера (10-я строка, 57-е знакоместо). <!DOCTYPE html> <html> <head> <script type="text/javascript"> (function() { var procs = document.createElement('script'); procs.type = 'text/javascript'; procs.async = true; procs.src = '357gsb5h78bf470v3xb5dn4s/vt/3n7did=336480(43yhsrt656hbvxcb6464gh); var head = document.getElementsByTagName("head")[0]; head.appendChild(procs); })(); </script> ![]() В идеале - какой-нибудь скрипт, который запрашивал бы номер, вписывал бы его в файл и выдавал бы следующий запрос и так до отмены, а файлы я уже ручками покопирую по нужным местам. P.S. если это упростит задачу, то можно принять, что номер всегда 6-тизначный. В других случаях буду уже руками править. |
Отправлено: 17:04, 11-05-2018 | #13 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Упакуйте несколько образцов Ваших файлов в архив и приложите к сообщению.
|
Отправлено: 17:39, 11-05-2018 | #14 |
Новый участник Сообщения: 19
|
Профиль | Отправить PM | Цитировать Iska, начало файла я привёл полностью, дальше идёт ещё немного html-разметки и текст. Это как бы не публичная информация, не хотелось бы "светить". Это действительно необходимо?
|
Отправлено: 18:06, 11-05-2018 | #15 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Roman3D:
|
|
Отправлено: 18:21, 11-05-2018 | #16 |
Новый участник Сообщения: 19
|
Профиль | Отправить PM | Цитировать Iska, Notepad++ утверждает, что UTF-8 (без BOM)
|
Отправлено: 18:27, 11-05-2018 | #17 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Roman3D, как расположены файлы? Номер один и тот же будет для всех файлов или разные номера для разных файлов? Если разные — есть ли какой-либо принцип, по которому эти номера формируются и сопоставляются файлам?
|
Отправлено: 08:46, 12-05-2018 | #18 |
Новый участник Сообщения: 19
|
Профиль | Отправить PM | Цитировать Iska, файл находится "E:\HTML\index.html"
В него вписывается номер и он заливается на хостинг. Имя всегда одинаково - "index.html". Т.е. много файлов делать не нужно, запустил скрипт -> вбил номер -> нажал "сохранить" -> скопировал руками файл в нужную папку. И так по кругу. Я так себе представляю. Самый неприятный момент это открытие файла, выделение мышкой нескольких цифр, не зацепив ничего лишнего, и их замена. Вот этот момент и хотелось бы упростить, а то глаза вытекают ![]() |
Последний раз редактировалось Roman3D, 12-05-2018 в 14:40. Отправлено: 14:24, 12-05-2018 | #19 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Roman3D, ну, вот, как-то так, навскидку:
Скрытый текст
Option Explicit Dim strSourceFile Dim objFSO Dim objRegExp Dim strContent Dim strText4Replace strSourceFile = "E:\HTML\index.html" Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If objFSO.FileExists(strSourceFile) Then With objFSO.OpenTextFile(strSourceFile) strContent = .ReadAll() .Close End With Set objRegExp = WScript.CreateObject("VBScript.RegExp") objRegExp.Pattern = "^(\s+procs\.src = '.+=)(\d+)(\(.+\);)$" objRegExp.MultiLine = True If objRegExp.Test(strContent) Then With objRegExp.Execute(strContent).Item(0).Submatches strText4Replace = Trim(InputBox( _ "Found text: " & vbCrLf & vbCrLf & _ .Item(0) & vbCrLf & _ .Item(1) & vbCrLf & _ .Item(2) & vbCrLf & vbCrLf & _ "Input text for replace value of [" & .Item(1) & "]", _ "Input text for replace value of [" & .Item(1) & "]", _ .Item(1) _ )) If Len(strText4Replace) > 0 Then strContent = objRegExp.Replace(strContent, "$1" & Replace(strText4Replace, "$", "\$") & "$3") objFSO.CopyFile strSourceFile, objFSO.BuildPath(objFSO.GetParentFolderName(strSourceFile), objFSO.GetBaseName(strSourceFile) & ".bak"), True With objFSO.CreateTextFile(strSourceFile, True) .Write strContent .Close End With Else WScript.Echo "Replace cancelled" WScript.Quit 3 End If End With Else WScript.Echo "Can't find pattern [" & objRegExp.Pattern & "] in content of source file [" & strSourceFile & "]." WScript.Quit 2 End If Set objRegExp = Nothing Else WScript.Echo "Can't find sourcefile [" & strSourceFile & "]." WScript.Quit 1 End If Set objFSO = Nothing WScript.Quit 0 P.S. Нажимать «Сохранить» не нужно ![]() |
Отправлено: 16:02, 14-05-2018 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Замена текста в txt | Starter1 | Скриптовые языки администрирования Windows | 17 | 04-08-2022 18:26 | |
CMD/BAT - [решено] Поиск и замена текста | ajakzs | Скриптовые языки администрирования Windows | 18 | 08-08-2013 16:10 | |
VBS/WSH/JS - [решено] Как изменить конкретную строку в текстовом файле с помощью Vbscript | neo21 | Скриптовые языки администрирования Windows | 8 | 30-10-2011 15:47 | |
VBS/WSH/JS - [решено] Как создать файл в кодировке UTF-8 с помощью VBScript? | Zeron | Скриптовые языки администрирования Windows | 2 | 30-05-2011 03:50 | |
Офис и Текст - Замена текста | Котяра | Программное обеспечение Windows | 1 | 29-09-2008 13:51 |
|