Показать полную графическую версию : [решено] Нужно быстро (!) удалить пустые строки во всех txt-файлах из одной директории
andreton
06-06-2010, 02:50
Нужно быстро (!) удалить пустые строки во всех тхт-файлах в папке
Если есть этому решение, помогите, плиз!
andreton, в задаче не оговорен поиск в подкаталогах, кодировка и размер файлов
VBS-вариант для поиска в подкаталогах и файлов размером много меньше RAM:
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Pattern = "(?:(^)[\n\r]+|(\r?\n)[\n\r]*)"
objRegEx.IgnoreCase = True
objRegEx.Global = True
'-----------------------------
FileProcByExt "C:\TEST", "TXT"
'-----------------------------
Sub FileProcByExt (strDir, strExt)
Dim oS, cS, oI, cF
Set oS = objFSO.GetFolder(strDir)
Set cS = oS.SubFolders
On Error Resume Next
For Each oI In cS
FileProcByExt oI.Path, strExt
Next
Set cF = oS.Files
For Each oI In cF
If StrComp(objFSO.GetExtensionName(oI.Path),strExt,1)=0 Then FileProc oI.Path
Next
End Sub
Sub FileProc (strFile)
Dim oF, sF
Set oF = objFSO.OpenTextFile(strFile, 1)
If oF.AtEndOfStream Then Exit Sub
sF = oF.ReadAll
oF.Close
sF = objRegEx.Replace(sF, "$1$2")
Set oF = objFSO.OpenTextFile(strFile, 2)
oF.Write(sF)
oF.Close
End Sub
P.S. всё-таки специализированные консольные утилиты сделают это быстрее
andreton
06-06-2010, 12:46
amel27. здесь поиска в подкаталогах не требуется. есть папка и в ней только тхт-файлы в кодировке ANSI, вот и все... при выделении всех файлов в TC, нужно нажать на подходящий баттон, к которому подключен нужный скрипт. Ваш вариант для этого не работает... или я чего-то не изменил в нем?...
О каких утилитах идет речь? может ними действительно поинтересней...
О каких утилитах идет речь? может ними действительно поинтересней... »SED, AWK и подобные, но в этом случае для TC придется создавать батник
при выделении всех файлов в TC, нужно нажать на подходящий баттон, к которому подключен нужный скрипт »с этого и следовало начинать... тогда так:If WScript.Arguments.Count < 2 Then WScript.Quit
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oRegEx = CreateObject("VBScript.RegExp")
oRegEx.Pattern = "(?:(^)[\n\r]+|(\r?\n)[\n\r]*)"
oRegEx.IgnoreCase = True
oRegEx.Global = True
iProc = 0
For iFile=1 To Wscript.Arguments.Count-1
sFile = Wscript.Arguments.Item(0) & Wscript.Arguments.Item(iFile)
If StrComp(oFSO.GetExtensionName(sFile),"TXT",1)=0 Then
FileProc sFile
iProc=iProc+1
End If
Next
WScript.Echo "Файлов обработано:"& vbTab & iProc & vbCrLf & _
"Файлов пропущено :"& vbTab & WScript.Arguments.Count-iProc-1
Sub FileProc (strFile)
Dim oF, sF
Set oF = oFSO.OpenTextFile(strFile, 1)
If oF.AtEndOfStream Then Exit Sub
sF = oF.ReadAll
oF.Close
sF = oRegEx.Replace(sF, "$1$2")
Set oF = oFSO.OpenTextFile(strFile, 2)
oF.Write(sF)
oF.Close
End Sub
P.S. в "Параметрах" батона должно стоять "%P %S"
andreton
07-06-2010, 09:45
amel27, при подключении кода в кнопку, выделения файлов и нажатия на эту кнопку ничего не происходит :(
Попробовал убрать первую строку If WScript.Arguments.Count < 2 Then WScript.Quit, выдает "Файлов обработано:0 Файлов пропущено:1 ".... вне зависимости от выделения файлов в папке. Что идет не так? :help:
Шутки ради - существует ограниченный (даже можно сказать убогий) скриптовой язык, на котором пишут "батники"...
в одну строчку пойдет? :biggrin:
@for /f "tokens=* delims=" %%F in ('dir /b /a-d *.txt') do @findstr /r "." %%F>%%F_ & del /f %%F & ren %%F_ %%F
andreton
07-06-2010, 13:38
может и пойдет... только не знаю куда вставить и как проверить :( не сталкивался с такого рода вещами, как "батники".
Знаю о них только вот это http://forum.ru-board.com/topic.cgi?forum=5&topic=1168&start=640#15
в моем случае также?
подскажите неграмотному, плиз! :cool:
"Файлов обработано:0 Файлов пропущено:1 "... »да нет, проверил - сколько выделил, столько и обработал... но в скрипте (для страховки) обрабатываются только файлы с расширением TXT, остальные пропускаются... вот мои настройки (пробел в между %P и %S обязателен):
http://s15.radikal.ru/i189/1006/8b/625d84fdfbd6.jpg (http://www.radikal.ru)
andreton, вариант с использованием SFK (http://swissfileknife.sourceforge.net/) (swiss file knife):
http://s55.radikal.ru/i150/1006/ff/de233eb7823b.jpg (http://www.radikal.ru)
P.S. но тут уже без всякой страховки, и вплоть до бинарников... :dont:
andreton
07-06-2010, 17:53
Большое СПАСИБО, amel27! :up:
Поменял правильно настройки, все заработало! Но, что интересно: у меня в пробной папке был 71 файл, выделил все, нажал на "батон" - и, вуаля, "Файлов обработано:71 Файлов пропущено:1".
Где этот неведомый файл? Все файлы - тхт. :unsure:
Но не будем заморачиваться - спасибо, работает и так! Очень помогли! :up: Можем тему закрывать.
Где этот неведомый файл? »ошибка подсчета, лишняя единица - это сам каталог... исправил :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.