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 

Редактирование файлов (вырезать, вставить, массово)
Goto page 1, 2, 3, 4, 5  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
qwerty



Joined: 26 May 2009
Posts: 22

Post (Separately) Posted: Thu Nov 04, 2010 19:26    Post subject: Редактирование файлов (вырезать, вставить, массово) Reply with quote

Всем привет.
У меня загвоздка, не знаю, как решить.
Есть более тысячи .txt файлов. В каждом 1 строка текста. В среднем один файл размером 2 кб.
Нужно в каждом файле в начале строки убрать определенные символы (например пробел, [, $) и вставить другие определенные мной символы.
А так же в конце строки проверить кончается ли строка точкой и если нет, то убрать все символы до точки.
Такие вот функции нужно сделать.
Помогите, пожалуйста, решить задачу.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Nov 04, 2010 19:32    Post subject: Reply with quote

Да что вас всех в Общие вопросы тянет, если это прямым образом к автоматизации относится.. Есть такой скрипт. И совсем недавно по моей просьбе был изготовлен инструмент, решающий задачи с кусками текста.
Back to top
View user's profile Send private message
qwerty



Joined: 26 May 2009
Posts: 22

Post (Separately) Posted: Thu Nov 04, 2010 20:03    Post subject: Reply with quote

Про раздел форума понял.
Сейчас читаю топик, но как я скажу скрипту про начало строки?
Да и с концом строки не ясно.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Nov 04, 2010 20:08    Post subject: Reply with quote

А эта первая строка имеет какие-то отличия от других строк?
Back to top
View user's profile Send private message
qwerty



Joined: 26 May 2009
Posts: 22

Post (Separately) Posted: Thu Nov 04, 2010 20:18    Post subject: Reply with quote

Flasher wrote:
А эта первая строка имеет какие-то отличия от других строк?

Там в файле всего одна строка. Отличий нет. Просто пробел или еще какой-нибудь символ и дальше текст.
Нет ли какого-нибудь символа, который означает начало строки? Например, как есть символ перенос строки.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Nov 04, 2010 20:20    Post subject: Reply with quote

Нет понял, то есть в каждом файле по одной строке?
Back to top
View user's profile Send private message
qwerty



Joined: 26 May 2009
Posts: 22

Post (Separately) Posted: Thu Nov 04, 2010 20:23    Post subject: Reply with quote

Flasher wrote:
Нет понял, то есть в каждом файле по одной строке?

Да.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Nov 04, 2010 20:25    Post subject: Reply with quote

Тогда вообще проблем не вижу. Можно взглянуть на 3 примера строк из каждого файла?
qwerty wrote:
А так же в конце строки проверить кончается ли строка точкой и если нет, то убрать все символы до точки.
Хотя нет, для этого придётся писать что-то ещё. Если сам не успею на VBS, то Tol'k по быстрому батник напишет.
Но вот вопрос: точка там оставаться для каких нужд должна? Не проще найти файлы, оканчивающиеся на точку и удалять их? Или они должны пустовать с одной точкой вместо текста?
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Thu Nov 04, 2010 21:25    Post subject: Reply with quote

Code:
ssed.exe -i.bak -r "s/^[ \[\$]*(.*\.)[^\.]*$/YOURPREFIX\1/" *.txt
как-то так

Last edited by Tol!k on Tue Nov 09, 2010 21:17; edited 2 times in total
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10264
Location: Россия, Саратов

Post (Separately) Posted: Thu Nov 04, 2010 21:27    Post subject: Reply with quote

qwerty
Тема перенесена в "Автоматизацию". И впредь внимательнее смотрим, какой подфорум для чего нужен.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
qwerty



Joined: 26 May 2009
Posts: 22

Post (Separately) Posted: Fri Nov 05, 2010 10:30    Post subject: Reply with quote

Flasher wrote:
Тогда вообще проблем не вижу. Можно взглянуть на 3 примера строк из каждого файла?

Code:
 Текст, текст, текст. Опять текст, далее текст и так еще пару раз.23652364

Code:
//Снова текст, текст текст, опять текст, еще пару раз тест.  ???'.'.'

В первом примере в начале пробел.

Flasher wrote:
qwerty wrote:
А так же в конце строки проверить кончается ли строка точкой и если нет, то убрать все символы до точки.
Хотя нет, для этого придётся писать что-то ещё. Если сам не успею на VBS, то Tol'k по быстрому батник напишет.
Но вот вопрос: точка там оставаться для каких нужд должна? Не проще найти файлы, оканчивающиеся на точку и удалять их? Или они должны пустовать с одной точкой вместо текста?

Зачем? Текст должен оставаться после точки, если читать справа налево.
В файлах текст оканчивается точкой, но в некоторых после точки еще идут лишние символы, они точкой не оканчиваются. Вот их нужно убрать. Ну вот пример:
Есть
Code:
  Текст текст текст. Опять текст! И снова текст текст текст.<>////we

Нужно
Code:
Текст текст текст. Опять текст! И снова текст текст текст.
Back to top
View user's profile Send private message
qwerty



Joined: 26 May 2009
Posts: 22

Post (Separately) Posted: Fri Nov 05, 2010 10:34    Post subject: Reply with quote

Tol!k wrote:
Code:
ssed.exe -i.bak -n -r "s/^[ \[\$](.*\.)[^\.]*$/YOURPREFIX\1/p" *.txt
как-то так

Как это включить? Я пока не знаю.
У меня не получилось запустить инструмент сделанный по просьбе Flasher'а, о котором он писал во втором посте. А вот скрипт запустил, но там не то, что нужно.

Avada, вас понял.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Fri Nov 05, 2010 15:55    Post subject: Reply with quote

qwerty wrote:
Как это включить?
Скачать http://sed.sourceforge.net/grabbag/ssed/sed-3.62.zip и распаковать в папку, прописанную в %path%, или в папку с файлами.
Скопировать код в командную строку (или сделать кнопку). Заменить YOURPREFIX на то, что нужно (убрать, если не нужно ничего). Нажать Enter (или кнопку).
Посмотреть результаты. Если что-то не так, переименовать *.txt.bak в *.txt
Чтобы не гемороицца, для тестирования можно запускать без -i.bak и нажимать Shift+Enter, тогда результаты будут показаны в окне, а файлы не будут меняться (Вместо кириллицы будут показаны козябры, но не пугайтесь, при обработке файлов всё будет правильно)


ЗЫ
Правильней будет
Code:
ssed.exe -i.bak -r "s/^[ \[\$]*(.*\.)[^\.]*$/YOURPREFIX\1/" *.txt
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Nov 05, 2010 19:35    Post subject: Reply with quote

qwerty wrote:
А так же в конце строки проверить кончается ли строка точкой и если нет, то убрать все символы до точки.
qwerty wrote:
Зачем? Текст должен оставаться после точки, если читать справа налево.
А зачем читать справа налево? Мы вроде как в русском сообществе обитаем. У нас иначе принято. По сути техзадание неправильно сформировано.
qwerty wrote:
Code:
 Текст, текст, текст. Опять текст, далее текст и так еще пару раз.23652364
qwerty wrote:
Code:
//Снова текст, текст текст, опять текст, еще пару раз тест.  ???'.'.'   
Я просил 3 конкретных примера. А в этих даже нет загадочных символов: [, $). Судя по заданию из этих двух примеров должно удаляться только <23652364> из первого и <'> из второго, так?
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: 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

Здесь цветом:
- Синий - путь к скрипту (укажи свой).
- Красный - в квадратных скобках указаны символы, которые могут быть в начале строки. Для указания некоторых специальных символов (например, символов квадратных или фигурных скобок) перед символом необходимо указать "\".
- Голубой - Новый текст в начало строки.
- Зелёный - параметры кнопки, задаваемые по желанию.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page 1, 2, 3, 4, 5  Next
Page 1 of 5

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group