Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Нужно быстро (!) удалить пустые строки во всех txt-файлах из одной директории

Ответить
Настройки темы
VBS/WSH/JS - [решено] Нужно быстро (!) удалить пустые строки во всех txt-файлах из одной директории

Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 02:50, 06-06-2010

 

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


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. всё-таки специализированные консольные утилиты сделают это быстрее

Отправлено: 09:06, 06-06-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 12:46, 06-06-2010 | #3


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата 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"

Последний раз редактировалось amel27, 08-06-2010 в 03:37. Причина: ошибка подсчета пропущенных


Отправлено: 15:16, 06-06-2010 | #4


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 09:45, 07-06-2010 | #5


Старожил


Сообщения: 426
Благодарности: 108

Профиль | Отправить PM | Цитировать


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

в одну строчку пойдет?

Код: Выделить весь код
@for /f "tokens=* delims=" %%F in ('dir /b /a-d *.txt') do @findstr /r "." %%F>%%F_ & del /f %%F & ren %%F_ %%F

-------
Как сказало Дерево Дровосеку: "я - пень".


Отправлено: 11:27, 07-06-2010 | #6


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

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

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

Отправлено: 13:38, 07-06-2010 | #7


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


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


Отправлено: 16:27, 07-06-2010 | #8


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


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



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

Отправлено: 17:52, 07-06-2010 | #9


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

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

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

Отправлено: 17:53, 07-06-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Нужно быстро (!) удалить пустые строки во всех txt-файлах из одной директории

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - Нужно быстро (!) добавить/удалить строку во все файлы указанной директории Possessed Скриптовые языки администрирования Windows 6 04-10-2011 22:29
CMD/BAT - Сравнение и замена в файлах .txt Deep2007 Скриптовые языки администрирования Windows 4 19-11-2010 19:08
Win32 API - Копирование всех файлов из директории DaRiYs Программирование и базы данных 4 03-09-2009 23:36
Интерфейс - [решено] Нужно отобразить все пустые папки в директории Третий Microsoft Windows 7 1 24-08-2009 22:17
Установка одной временной директории для всех пользователей red_dog Microsoft Windows NT/2000/2003 2 15-12-2006 10:39




 
Переход