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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать???

Ответить
Настройки темы
CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать???

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


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

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


Лежит папка а в ней все отчёты в текстовом виде, так вот надо удалить со всех текстовых документах строки где есть слова "mozila" как это сделать? Нашёл вот это
HTML код: Выделить весь код
type your_file.txt | findstr /v firefox.exe > temp.txt del your_file.txt rename temp.txt your_file.txt

но он не удаляет ((((

Отправлено: 19:39, 19-09-2009

 

Ветеран


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

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


Цитата v79italya:
в файлах CSV »
…образцы нескольких из которых Вы упаковали в архив, каковой и приложили к сообщению?

Цитата v79italya:
строки, содержащие null(в строке дата и только null-и) »
Любые строки с null? Или строго: первая часть — дата, и все остальные части — все null?

Цитата v79italya:
Есть множество файлов тхт такого вида »
…образцы нескольких из которых Вы также упаковали в архив, каковой и приложили к сообщению?

Отправлено: 21:18, 23-03-2020 | #21



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

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


Старожил


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

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


Вложения
Тип файла: zip Новая папка.zip
(18.2 Kb, 5 просмотров)

Цитата Iska:
Или строго: первая часть — дата, и все остальные части — все null? »
Лучше строго. Удалить строки, в которых идет сначала дата, а потом null-и

Последний раз редактировалось v79italya, 16-07-2020 в 18:31.


Отправлено: 21:31, 23-03-2020 | #22


Ветеран


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

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


Цитата v79italya:
каким vbs-скриптом можно удалить в файлах CSV строки, содержащие null(в строке дата и только null-и) »
Попробуйте так:
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim strSourceFolder

Dim objFSO
Dim objFile
Dim strContent


If WScript.Arguments.Count = 1 Then
	strSourceFolder = WScript.Arguments.Item(0)
	
	Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
	
	If objFSO.FolderExists(strSourceFolder) Then
		For Each objFile In objFSO.GetFolder(strSourceFolder).Files
			If StrComp(objFSO.GetExtensionName(objFile.Name), "csv", 0) = 0 Then
				Dim objTS
				
				With objFSO.OpenTextFile(objFile.Path)
					strContent = .ReadAll()
					.Close
				End With
				
				With WScript.CreateObject("VBScript.RegExp")
					.Pattern = "\n\d{4}-\d{2}-\d{2},null,null,null,null,null,null"
					.Global = True
					
					If .Test(strContent) Then
						strContent = .Replace(strContent, "")
						
						With objFSO.CreateTextFile(objFile.Path, True)
							.Write strContent
							.Close
						End With
					End If
				End With
			Else
				' Nothing to do
			End If
		Next
	Else
		WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
		WScript.Quit 2
	End If
	
	Set objFSO = Nothing
Else
	WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source folder>"
	WScript.Quit 1
End If

WScript.Quit 0

Путь к целевому каталогу задаётся параметром скрипта (также можно просто перетащить папку на скрипт в Проводнике). Из каталога выбираются все .csv-файлы.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:10, 23-03-2020 | #23


Старожил


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

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


Iska, спасибо за скрипт. А можно путь к папке задать?
Еще я сразу написал что нужно скрипт VBS. Это же скрипт VBS? Почему VBS? Я хотел превратить его в макрос (обернуть содержимое в Sub ... End Sub) и использовать в Excel

Отправлено: 22:26, 23-03-2020 | #24


Ветеран


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

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


Цитата v79italya:
Как удалить все после первого двоеточия вместе с двоеточием? »
Попробуйте так:
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim strSourceFolder

Dim objFSO
Dim objFile
Dim strContent


If WScript.Arguments.Count = 1 Then
	strSourceFolder = WScript.Arguments.Item(0)
	
	Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
	
	If objFSO.FolderExists(strSourceFolder) Then
		For Each objFile In objFSO.GetFolder(strSourceFolder).Files
			If StrComp(objFSO.GetExtensionName(objFile.Name), "txt", 0) = 0 Then
				Dim objTS
				
				With objFSO.OpenTextFile(objFile.Path)
					strContent = .ReadAll()
					.Close
				End With
				
				With WScript.CreateObject("VBScript.RegExp")
					.Pattern   = "^(\d+):.*$"
					.Global    = True
					.Multiline = True
					
					If .Test(strContent) Then
						strContent = .Replace(strContent, "$1")
						
						With objFSO.CreateTextFile(objFile.Path, True)
							.Write Replace(Replace(strContent, vbCr, ""), vbLf, vbCrLf)
							.Close
						End With
					End If
				End With
			Else
				' Nothing to do
			End If
		Next
	Else
		WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
		WScript.Quit 2
	End If
	
	Set objFSO = Nothing
Else
	WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source folder>"
	WScript.Quit 1
End If

WScript.Quit 0

Путь к целевому каталогу задаётся параметром скрипта (также можно просто перетащить папку на скрипт в Проводнике). Из каталога выбираются все .txt-файлы.

Цитата v79italya:
А можно путь к папке задать? »
Цитата Iska:
Путь к целевому каталогу задаётся параметром скрипта (также можно просто перетащить папку на скрипт в Проводнике). »
Цитата v79italya:
Еще я сразу написал что нужно скрипт VBS. Это же скрипт VBS? »
Это скрипт WSH, написанный на языке VBScript.

Цитата v79italya:
Я хотел превратить его в макрос (обернуть содержимое в Sub ... End Sub) и использовать в Excel »
Просто «обернуть и использовать» не получится. VBScript WSH и VBA — близкие, но разные языки. Что мешало Вам зараз сказать про VBA и Excel?
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:30, 23-03-2020 | #25


Старожил


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

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


Сохранил с расширением .vbs, закинул в папку с файлами CSV и запустил. Вышло окно с текстом : Usage: cscript.exe//nologo "vvbbss.vbs" <Source folder>

Цитата Iska:
Путь к целевому каталогу задаётся параметром скрипта (также можно просто перетащить папку на скрипт в Проводнике) »
Как это делается?
Цитата Iska:
Просто «обернуть и использовать» не получится. VBScript WSH и VBA — близкие, но разные языки. Что мешало Вам зараз сказать про VBA и Excel? »
Скрипт так скрипт. Буду отдельно от других макросов запускать.
Что мешало? Я думал любой скрипт можно обернуть в sub и превратить в макрос. Получается, ошибался

Отправлено: 22:36, 23-03-2020 | #26


Ветеран


Contributor


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

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


Цитата v79italya:
Я хотел превратить его в макрос (обернуть содержимое в Sub ... End Sub) и использовать в Excel »
Каким образом? Загрузить csv на лист Excel?

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 22:46, 23-03-2020 | #27


Ветеран


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

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


Цитата v79italya:
Как это делается? »
Просто перетащите искомую папку из Проводника на скрипт. Ухватите её мышкой, перетащите на скрипт и отпустите.

Отправлено: 22:48, 23-03-2020 | #28


Старожил


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

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


Цитата megaloman:
Каким образом? Загрузить csv на лист Excel? »
Вот этот макрос, сделанный из скрипта, работает не загружая в Excel. Вот, наподобие этого и хотел.
Этот макрос заменяет null на 0. Мне это не подходит.Хотел другим макросом предварительно удалить строки с null
HTML код: Выделить весь код
Sub Content_for_etfs_conver() 'Kill "D:\IN\*.*" Kill "D:\OUT\*.*" Dim fso Set fso = CreateObject("scripting.filesystemobject"): ' fso.CopyFolder "E:\downloads1", "D:\IN" cPath = fso.GetParentFolderName(ThisWorkbook.FullName) cPathIn = cPath & "\In\" cPathOut = cPath & "\Out\" Set Folder = fso.GetFolder(cPathIn) For Each File In Folder.Files If fso.GetExtensionName(File.Name) = "csv" Then With fso.OpenTextFile(cPathIn & File.Name, 1, True) cIn = .ReadAll .Close End With cOut = vbCrLf & "DATE" 'cOut = "DATE" arrL = Split(cIn, vbLf) For i = 1 To UBound(arrL) If Len(arrL(i)) > 0 Then arrD = Split(arrL(i), ",") arrD(0) = Format(CDate(arrD(0)), "dd.MM.yyyy") For j = 1 To 4 arrD(j) = CStr(Round(Val(arrD(j)), 2)) Next arrD(6) = CStr(Round(Val(arrD(6)), 0)) cOut = cOut & vbCrLf & Join(Array(arrD(0), arrD(1), arrD(2), arrD(3), arrD(4), arrD(6)), vbTab) End If Next With fso.OpenTextFile(cPathOut & File.Name, 2, True) .Write cOut .Close End With End If Next MsgBox "Ok" End Sub

Цитата Iska:
Ухватите её мышкой, перетащите на скрипт и отпустите »
Понял я теперь Получилось) Спасибо большое
Второй скрипт тоже отлично работает. Спасибо большое

Последний раз редактировалось v79italya, 23-03-2020 в 23:11.


Отправлено: 22:54, 23-03-2020 | #29


Ветеран


Contributor


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

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


Цитата v79italya:
Вот этот макрос, сделанный из скрипта, работает не загружая в Excel. Вот, наподобие этого и хотел. »
Там, похоже, обрабатываются все файлы .csv в указанной папке.
Вот мой вариант vbs-скрипта чтобы удалить во всех файлах CSV в указанной папке строки, содержащие null
Код: Выделить весь код
BoxIn0 = "Z:\Box_In"
BoxIn0 = ""

FileIn = "^.*\.csv$"
Repl = "\n.*,null.*"

BoxIn = ""
With WScript.Arguments
    If .Count > 0 Then
        BoxIn = Trim(.Item(0))
        If Right(BoxIn, 1) = "\" Then BoxIn = Mid(BoxIn, 1, Len(BoxIn) - 1)
    Else
        Set objShell = CreateObject("Shell.Application")
        Set objBoxIn = objShell.BrowseForFolder(0, "Выбирайте папку для обработки CSV-файлов", 1, BoxIn0)

        If objBoxIn Is Nothing Then
            MsgBox "Папка не выбрана, скрипт завершаем"
            WScript.Quit 2
        End If

        BoxIn = objBoxIn.Self.Path
    End If
End With

With CreateObject("Scripting.FileSystemObject")
    On Error Resume Next
        Set Folds = .GetFolder(BoxIn)
        If Err.Number <> 0 Then
            MsgBox "Ошибка при открытии папки" + vbCrLf + BoxIn + vbCrLf + vbCrLf + Err.Description
            WScript.Quit 2
        End If
    On Error GoTo 0
    
    Set RegMaska = CreateObject("VBScript.RegExp")
    RegMaska.Pattern = FileIn
    RegMaska.IgnoreCase = True
    
    Set RegRepl = CreateObject("VBScript.RegExp")
    RegRepl.Pattern = Repl
    RegRepl.IgnoreCase = True
    RegRepl.Global = True
    
    Set Files = Folds.Files
    
    For Each jf In Files
        If RegMaska.Test(jf) Then
'            MsgBox jf
            On Error Resume Next
            Err.Number = 0
            Set fIn = .OpenTextFile(jf, 1, False)
            
            If Err.Number <> 0 Then
                MsgBox "Ошибка при открытии файла" + vbCrLf + .GetAbsolutePathName(jf) + vbCrLf + vbCrLf + Err.Description
                On Error GoTo 0
'                WScript.Quit 2
            Else
                Alls = ""
                Alls = fIn.ReadAll
                fIn.Close
                On Error GoTo 0
                If RegRepl.Test(Alls) Then
                    jfNew = jf.Path
                    If .FileExists(jf + ".bak") Then .DeleteFile jf + ".bak", True
                    .MoveFile jf, jf + ".bak"       ' ==== Создание страх копии
                    
                    With .CreateTextFile(jfNew, True)
                        .Write (RegRepl.Replace(Alls, ""))
                        .Close
                    End With
                End If
            End If
        End If
    Next

End With
Можете просто перетащить обрабатываемую папку из Проводника на скрипт или на иконку, созданную для скрипта на рабочем столе. Ухватите её мышкой, перетащите на скрипт и отпустите.
Можете вызвать скрипт из командной строки, указав в аргументе скрипта в кавычках путь к папке.
Можете простр вызвать скрипт, откроется интерфейс для открытия нужной папки.
Я предусмотрел для изменяемых файлов создание страховой копии с расширением .bak

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 26-03-2020 в 08:01.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:03, 25-03-2020 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать???

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Найти и заменить в текстовом файле. Как? Pozia AutoIt 15 11-03-2010 19:12
подсчёт слов в текстовом файле bakatum Хочу все знать 4 22-01-2010 21:10
CMD/BAT - [решено] Отделить последние цифры из строчки в текстовом файле ZeroCrash Скриптовые языки администрирования Windows 4 29-06-2009 16:03
[решено] Как удалить строки в текстовом файле при отсутсвии файла в опрелеленном месте? Pozia AutoIt 23 14-05-2009 21:41
Как оставить в файле Х первых строк? Dan Вебмастеру 10 19-10-2002 00:41




 
Переход