Войти

Показать полную графическую версию : [решено] Замена части текста в txt файлах


Traveller124
28-03-2012, 11:58
Имеется папку Folder с файлами расширения *.txt (наименование файлов регулярно меняется и не постоянно, кол-во файлов тоже не имеет постоянства)
Необходимо систематически, внутри файлов, производить замену текста, если он встречается в данных *.txt файлах, с "Золотая рыбка" на "Очень золотая рыбка"

Прошу помочь, сам не силен (.
Заранее спасибо

Iska
28-03-2012, 12:19
Traveller124, какова кодировка файлов, и каков ориентировочный размер файлов? Насколько жёстко требование оставаться в рамках категории CMD/BAT?

Traveller124
28-03-2012, 12:43
Кодировка на сколько я понял ANSI
Файлы ~2Мб
Требование оставаться в рамках категории CMD/BAT, т.к. применение стороннего ПО, которое существует и заточено уже под данные процессы не приемлемо.

Iska
28-03-2012, 13:42
WSH устроит?

Traveller124
28-03-2012, 14:28
Ранее писал, что сам не силен(.
Почитал и понимаю, что WSH устроит

Iska
01-04-2012, 19:43
Traveller124, примерно так:
Option Explicit

Const ForReading = 1
Const ForWriting = 2

Dim sFolder

Dim objRegExp
Dim objFile

Dim strContent


sFolder = "C:\Песочница\0005"

Set objRegExp = WScript.CreateObject("VBScript.RegExp")

With objRegExp
.Global = True
.Pattern = "Золотая рыбка"
End With

With WScript.CreateObject("Scripting.FileSystemObject")
If .FolderExists(sFolder) Then
For Each objFile In .GetFolder(sFolder).Files
If UCase(.GetExtensionName(objFile.Name)) = UCase("txt") Then
With objFile.OpenAsTextStream(ForReading)
strContent = .ReadAll()

.Close
End With

If objRegExp.Test(strContent) Then
With objFile.OpenAsTextStream(ForWriting)
.Write objRegExp.Replace(strContent, "Очень золотая рыбка")

.Close
End With
End If
End If
Next
Else
WScript.Echo "Folder [" & sFolder & "] not found"
End If
End With

Set objRegExp = Nothing

WScript.Quit 0

Traveller124
02-04-2012, 17:20
Огромное спасибо Iska

Iska
02-04-2012, 19:16
Из письма в PM:

Добавил " objRegExp.Global = True ", дабы замена происходила по всему тексту, а не только по первому найденному словосочетанию.

Добавил неучтённый глобальный поиск в код (http://forum.oszone.net/post-1891447.html#post1891447).




© OSzone.net 2001-2012