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

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

Ответить
Настройки темы
VBS/WSH/JS - Замена текста с помощью VBScript.

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


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

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


Здравствуйте.
Нужна ваше помощь.

В файле text.txt есть строчка с текстом строчка, нужно найти её и добавить в начале, ну например цифру 1, чтобы получилось 1строчка (либо просто заменить строчка на 1строчка).
Но если в этом файле уже есть 1строчка, то наоборот убрать 1, чтобы получилось строчка.

Отправлено: 20:14, 09-12-2011

 

Ветеран


Contributor


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

Профиль | Отправить 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
Благодарности: 0

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


Большое спасибо что помогаете мне.
Но к сожалею возникла острая потребность еще в одном скрипте.

В файле file.txt, есть строчка

кино, шахматы, вино

нужно найти эту строчку по слову кино и заменить в ней шахматы на домино. Но если в этой строчке домино, то наоборот, заменить на шахматы. Без исключений.

Отправлено: 21:56, 18-12-2011 | #12


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


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

Профиль | Отправить 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
Благодарности: 8086

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


Упакуйте несколько образцов Ваших файлов в архив и приложите к сообщению.

Отправлено: 17:39, 11-05-2018 | #14


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


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

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


Iska, начало файла я привёл полностью, дальше идёт ещё немного html-разметки и текст. Это как бы не публичная информация, не хотелось бы "светить". Это действительно необходимо?

Отправлено: 18:06, 11-05-2018 | #15


Ветеран


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

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


Цитата Roman3D:
Это действительно необходимо? »
Ну, давайте без свечения. Кодировка файлов какая?

Отправлено: 18:21, 11-05-2018 | #16


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


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

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


Iska, Notepad++ утверждает, что UTF-8 (без BOM)

Отправлено: 18:27, 11-05-2018 | #17


Ветеран


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

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


Roman3D, как расположены файлы? Номер один и тот же будет для всех файлов или разные номера для разных файлов? Если разные — есть ли какой-либо принцип, по которому эти номера формируются и сопоставляются файлам?

Отправлено: 08:46, 12-05-2018 | #18


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


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

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


Iska, файл находится "E:\HTML\index.html"
В него вписывается номер и он заливается на хостинг. Имя всегда одинаково - "index.html".

Т.е. много файлов делать не нужно, запустил скрипт -> вбил номер -> нажал "сохранить" -> скопировал руками файл в нужную папку. И так по кругу. Я так себе представляю.

Самый неприятный момент это открытие файла, выделение мышкой нескольких цифр, не зацепив ничего лишнего, и их замена. Вот этот момент и хотелось бы упростить, а то глаза вытекают

Последний раз редактировалось Roman3D, 12-05-2018 в 14:40.


Отправлено: 14:24, 12-05-2018 | #19


Ветеран


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

Профиль | Отправить 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



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход