Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

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



PostPosted: Mon Nov 08, 2010 11:21    Post subject: Reply with quote

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

Здесь цветом:
- Синий - путь к скрипту (укажи свой).
- Красный - в квадратных скобках указаны символы, которые могут быть в начале строки. Для указания некоторых специальных символов (например, символов квадратных или фигурных скобок) перед символом необходимо указать "\".
- Голубой - Новый текст в начало строки.
- Зелёный - параметры кнопки, задаваемые по желанию.
_________________
Нет, я не сплю. Я просто медленно моргаю.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group