View previous topic :: View next topic |
Author |
Message |
qwerty
Joined: 26 May 2009 Posts: 22
|
(Separately) Posted: Thu Nov 04, 2010 19:26 Post subject: Редактирование файлов (вырезать, вставить, массово) |
|
|
Всем привет.
У меня загвоздка, не знаю, как решить.
Есть более тысячи .txt файлов. В каждом 1 строка текста. В среднем один файл размером 2 кб.
Нужно в каждом файле в начале строки убрать определенные символы (например пробел, [, $) и вставить другие определенные мной символы.
А так же в конце строки проверить кончается ли строка точкой и если нет, то убрать все символы до точки.
Такие вот функции нужно сделать.
Помогите, пожалуйста, решить задачу. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Nov 04, 2010 19:32 Post subject: |
|
|
Да что вас всех в Общие вопросы тянет, если это прямым образом к автоматизации относится.. Есть такой скрипт. И совсем недавно по моей просьбе был изготовлен инструмент, решающий задачи с кусками текста. |
|
Back to top |
|
|
qwerty
Joined: 26 May 2009 Posts: 22
|
(Separately) Posted: Thu Nov 04, 2010 20:03 Post subject: |
|
|
Про раздел форума понял.
Сейчас читаю топик, но как я скажу скрипту про начало строки?
Да и с концом строки не ясно. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Nov 04, 2010 20:08 Post subject: |
|
|
А эта первая строка имеет какие-то отличия от других строк? |
|
Back to top |
|
|
qwerty
Joined: 26 May 2009 Posts: 22
|
(Separately) Posted: Thu Nov 04, 2010 20:18 Post subject: |
|
|
Flasher wrote: | А эта первая строка имеет какие-то отличия от других строк? |
Там в файле всего одна строка. Отличий нет. Просто пробел или еще какой-нибудь символ и дальше текст.
Нет ли какого-нибудь символа, который означает начало строки? Например, как есть символ перенос строки. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Nov 04, 2010 20:20 Post subject: |
|
|
Нет понял, то есть в каждом файле по одной строке? |
|
Back to top |
|
|
qwerty
Joined: 26 May 2009 Posts: 22
|
(Separately) Posted: Thu Nov 04, 2010 20:23 Post subject: |
|
|
Flasher wrote: | Нет понял, то есть в каждом файле по одной строке? |
Да. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Nov 04, 2010 20:25 Post subject: |
|
|
Тогда вообще проблем не вижу. Можно взглянуть на 3 примера строк из каждого файла?
qwerty wrote: | А так же в конце строки проверить кончается ли строка точкой и если нет, то убрать все символы до точки. | Хотя нет, для этого придётся писать что-то ещё. Если сам не успею на VBS, то Tol'k по быстрому батник напишет.
Но вот вопрос: точка там оставаться для каких нужд должна? Не проще найти файлы, оканчивающиеся на точку и удалять их? Или они должны пустовать с одной точкой вместо текста? |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Thu Nov 04, 2010 21:25 Post subject: |
|
|
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 |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10264 Location: Россия, Саратов
|
(Separately) Posted: Thu Nov 04, 2010 21:27 Post subject: |
|
|
qwerty
Тема перенесена в "Автоматизацию". И впредь внимательнее смотрим, какой подфорум для чего нужен. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
qwerty
Joined: 26 May 2009 Posts: 22
|
(Separately) Posted: Fri Nov 05, 2010 10:30 Post subject: |
|
|
Flasher wrote: | Тогда вообще проблем не вижу. Можно взглянуть на 3 примера строк из каждого файла? |
Code: | Текст, текст, текст. Опять текст, далее текст и так еще пару раз.23652364 |
Code: | //Снова текст, текст текст, опять текст, еще пару раз тест. ???'.'.' |
В первом примере в начале пробел.
Flasher wrote: | qwerty wrote: | А так же в конце строки проверить кончается ли строка точкой и если нет, то убрать все символы до точки. | Хотя нет, для этого придётся писать что-то ещё. Если сам не успею на VBS, то Tol'k по быстрому батник напишет.
Но вот вопрос: точка там оставаться для каких нужд должна? Не проще найти файлы, оканчивающиеся на точку и удалять их? Или они должны пустовать с одной точкой вместо текста? |
Зачем? Текст должен оставаться после точки, если читать справа налево.
В файлах текст оканчивается точкой, но в некоторых после точки еще идут лишние символы, они точкой не оканчиваются. Вот их нужно убрать. Ну вот пример:
Есть
Code: | Текст текст текст. Опять текст! И снова текст текст текст.<>////we |
Нужно
Code: | Текст текст текст. Опять текст! И снова текст текст текст. |
|
|
Back to top |
|
|
qwerty
Joined: 26 May 2009 Posts: 22
|
(Separately) Posted: Fri Nov 05, 2010 10:34 Post subject: |
|
|
Tol!k wrote: | Code: | ssed.exe -i.bak -n -r "s/^[ \[\$](.*\.)[^\.]*$/YOURPREFIX\1/p" *.txt | как-то так |
Как это включить? Я пока не знаю.
У меня не получилось запустить инструмент сделанный по просьбе Flasher'а, о котором он писал во втором посте. А вот скрипт запустил, но там не то, что нужно.
Avada, вас понял. |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Fri Nov 05, 2010 15:55 Post subject: |
|
|
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 |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Nov 05, 2010 19:35 Post subject: |
|
|
qwerty wrote: | А так же в конце строки проверить кончается ли строка точкой и если нет, то убрать все символы до точки. |
qwerty wrote: | Зачем? Текст должен оставаться после точки, если читать справа налево. | А зачем читать справа налево? Мы вроде как в русском сообществе обитаем. У нас иначе принято. По сути техзадание неправильно сформировано. qwerty wrote: | Code: | Текст, текст, текст. Опять текст, далее текст и так еще пару раз.23652364 |
|
qwerty wrote: | Code: | //Снова текст, текст текст, опять текст, еще пару раз тест. ???'.'.' |
| Я просил 3 конкретных примера. А в этих даже нет загадочных символов: [, $). Судя по заданию из этих двух примеров должно удаляться только <23652364> из первого и <'> из второго, так? |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) 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
|
Здесь цветом:
- Синий - путь к скрипту (укажи свой).
- Красный - в квадратных скобках указаны символы, которые могут быть в начале строки. Для указания некоторых специальных символов (например, символов квадратных или фигурных скобок) перед символом необходимо указать "\".
- Голубой - Новый текст в начало строки.
- Зелёный - параметры кнопки, задаваемые по желанию. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
|
|
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
|