Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Замена части текста в txt файлах (http://forum.oszone.net/showthread.php?t=231473)

Traveller124 28-03-2012 11:58 1888405

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

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

Iska 28-03-2012 12:19 1888417

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

Traveller124 28-03-2012 12:43 1888436

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

Iska 28-03-2012 13:42 1888495

WSH устроит?

Traveller124 28-03-2012 14:28 1888526

Ранее писал, что сам не силен(.
Почитал и понимаю, что WSH устроит

Iska 01-04-2012 19:43 1891447

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 1892022

Огромное спасибо Iska

Iska 02-04-2012 19:16 1892103

Из письма в PM:
Цитата:

Цитата Traveller124

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

Добавил неучтённый глобальный поиск в код.


Время: 02:07.

Время: 02:07.
© OSzone.net 2001-