Single Post |
Topic: Редактирование файлов (вырезать, вставить, массово) |
Author |
Message |
Batya

|
Posted: Mon Nov 08, 2010 11:21 Post subject: |
|
|
qwerty wrote: | Есть более тысячи .txt файлов. В каждом 1 строка текста. В среднем один файл размером 2 кб.
Нужно в каждом файле в начале строки убрать определенные символы (например пробел, [, $) и вставить другие определенные мной символы.
А так же в конце строки проверить кончается ли строка точкой и если нет, то убрать все символы до точки. |
Используем vbs-скрипт:
Code: | '====================================================
' Замена текста в файлах с помощью рег. выражений
'
' Параметры:
' {текст для поиска} {текст для замены} {файл-список}
'====================================================
Option Explicit
Dim FSO, WSH, F, FF, List, Str1, Str2, Errors
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = CreateObject("WScript.Shell")
Set Errors = CreateObject("Scripting.Dictionary")
With WScript
Str1 = .Arguments(0)
Str2 = .Arguments(1)
FF = .Arguments(2)
End With
List = Split(FSO.OpenTextFile(FF).ReadAll, vbNewLine)
On Error Resume Next
For Each F In List
Main F, Str1, Str2
If Err.Number > 0 Then
Errors.Add F, Err.Description
Err.Clear
End If
Next
On Error GoTo 0
If Errors.Count > 0 Then MsgBox JoinErr(Errors), 0, "Замена текста в файлах с помощью рег. выражений"
Set Errors = Nothing
Set WSH = Nothing
Set FSO = Nothing
WScript.Quit 0
Sub Main(pPath, pStr1, pStr2)
Dim lText, lPath
If pPath <> "" Then
lPath = FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings(pPath))
If FSO.FileExists(lPath) Then
If FSO.GetFile(lPath).Size > 0 Then
lText = FSO.OpenTextFile(lPath, 1, False, 0).ReadAll
' MsgBox lText
lText = RegExpReplace(lText, pStr1, pStr2)
FSO.OpenTextFile(lPath, 2).Write lText
End If
End If
End If
End Sub
Function JoinErr(pDic)
Dim lKey
For Each lKey In pDic
JoinErr = JoinErr & vbNewLine & _
"Файл """ & lKey & """ - " & pDic(lKey)
Next
JoinErr = "Для следующих файлов операция завершена с ошибками:" & vbNewLine & JoinErr
End Function
'Функция замены с помощью регулярных выражений
Function RegExpReplace(pText, pFindStr, pNewStr)
With New RegExp
.Pattern = pFindStr
.IgnoreCase = True
.Global = True
RegExpReplace = .Replace(pText, pNewStr)
End With
End Function
|
Скрипт обрабатывает выделенные файлы или файл под курсором.
Кнопка для твоего случая:
Quote: | TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\WHS\RegExpReplace.vbs
"^([ \[$]*)(.+\.)[^\.]*$" "YOURPREFIX$2" %L
shell32.dll,68
Хитрая замена текста
-1
|
Здесь цветом:
- Синий - путь к скрипту (укажи свой).
- Красный - в квадратных скобках указаны символы, которые могут быть в начале строки. Для указания некоторых специальных символов (например, символов квадратных или фигурных скобок) перед символом необходимо указать "\".
- Голубой - Новый текст в начало строки.
- Зелёный - параметры кнопки, задаваемые по желанию. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
|
|
 |
|
Powered by phpBB © 2001, 2005 phpBB Group
|