Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Нужно быстро (!) удалить пустые строки во всех txt-файлах из одной директории (http://forum.oszone.net/showthread.php?t=177484)

andreton 06-06-2010 02:50 1428348

Нужно быстро (!) удалить пустые строки во всех txt-файлах из одной директории
 
Нужно быстро (!) удалить пустые строки во всех тхт-файлах в папке

Если есть этому решение, помогите, плиз!

amel27 06-06-2010 09:06 1428381

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 1428492

amel27. здесь поиска в подкаталогах не требуется. есть папка и в ней только тхт-файлы в кодировке ANSI, вот и все... при выделении всех файлов в TC, нужно нажать на подходящий баттон, к которому подключен нужный скрипт. Ваш вариант для этого не работает... или я чего-то не изменил в нем?...

О каких утилитах идет речь? может ними действительно поинтересней...

amel27 06-06-2010 15:16 1428620

Цитата:

Цитата andreton
О каких утилитах идет речь? может ними действительно поинтересней... »

SED, AWK и подобные, но в этом случае для TC придется создавать батник

Цитата:

Цитата andreton
при выделении всех файлов в 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 1429156

amel27, при подключении кода в кнопку, выделения файлов и нажатия на эту кнопку ничего не происходит :(

Попробовал убрать первую строку If WScript.Arguments.Count < 2 Then WScript.Quit, выдает "Файлов обработано:0 Файлов пропущено:1 ".... вне зависимости от выделения файлов в папке. Что идет не так? :help:

NiOl 07-06-2010 11:27 1429213

Шутки ради - существует ограниченный (даже можно сказать убогий) скриптовой язык, на котором пишут "батники"...

в одну строчку пойдет? :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 1429322

может и пойдет... только не знаю куда вставить и как проверить :( не сталкивался с такого рода вещами, как "батники".

Знаю о них только вот это http://forum.ru-board.com/topic.cgi?...8&start=640#15

в моем случае также?

подскажите неграмотному, плиз! :cool:

amel27 07-06-2010 16:27 1429425

Цитата:

Цитата andreton
"Файлов обработано:0 Файлов пропущено:1 "... »

да нет, проверил - сколько выделил, столько и обработал... но в скрипте (для страховки) обрабатываются только файлы с расширением TXT, остальные пропускаются... вот мои настройки (пробел в между %P и %S обязателен):


amel27 07-06-2010 17:52 1429481

andreton, вариант с использованием SFK (swiss file knife):



P.S. но тут уже без всякой страховки, и вплоть до бинарников... :dont:

andreton 07-06-2010 17:53 1429482

Большое СПАСИБО, amel27! :up:

Поменял правильно настройки, все заработало! Но, что интересно: у меня в пробной папке был 71 файл, выделил все, нажал на "батон" - и, вуаля, "Файлов обработано:71 Файлов пропущено:1".

Где этот неведомый файл? Все файлы - тхт. :unsure:

Но не будем заморачиваться - спасибо, работает и так! Очень помогли! :up: Можем тему закрывать.

amel27 08-06-2010 03:39 1429744

Цитата:

Цитата andreton
Где этот неведомый файл? »

ошибка подсчета, лишняя единица - это сам каталог... исправил :)


Время: 01:46.

Время: 01:46.
© OSzone.net 2001-