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

Ответить
Аватара пользователя
vovanwildbees

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

Сообщение vovanwildbees »

Цитата v79italya:



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




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




Цитата v79italya:



строки, содержащие null(в строке дата и только null-и)
CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать???




Любые строки с null? Или строго: первая часть — дата, и все остальные части — все null?




Цитата v79italya:



Есть множество файлов тхт такого вида
CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать???




…образцы нескольких из которых Вы также упаковали в архив, каковой и приложили к сообщению?
Аватара пользователя
Foreigner

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

Сообщение Foreigner »

Цитата Iska:



Или строго: первая часть — дата, и все остальные части — все null?
CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать???




Лучше строго. Удалить строки, в которых идет сначала дата, а потом null-и
Аватара пользователя
daradan

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

Сообщение daradan »

Цитата v79italya:



каким vbs-скриптом можно удалить в файлах CSV строки, содержащие null(в строке дата и только null-и)
CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать???




Попробуйте так:



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

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 & """ "
	WScript.Quit 1
End If
WScript.Quit 0







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

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

Сообщение SharkyEXE »

Iska, спасибо за скрипт. А можно путь к папке задать?

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

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

Сообщение Iska »

Цитата v79italya:



Как удалить все после первого двоеточия вместе с двоеточием?
CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать???




Попробуйте так:



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

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 & """ "
	WScript.Quit 1
End If
WScript.Quit 0







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




Цитата v79italya:



А можно путь к папке задать?
CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать???





Цитата Iska:



Путь к целевому каталогу задаётся параметром скрипта (также можно просто перетащить папку на скрипт в Проводнике).
CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать???





Цитата v79italya:



Еще я сразу написал что нужно скрипт VBS. Это же скрипт VBS?
CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать???




Это скрипт WSH, написанный на языке VBScript.




Цитата v79italya:



Я хотел превратить его в макрос (обернуть содержимое в Sub ... End Sub) и использовать в Excel
CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать???




Просто «обернуть и использовать» не получится. VBScript WSH и VBA — близкие, но разные языки. Что мешало Вам зараз сказать про VBA и Excel?
Аватара пользователя
v79italya

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

Сообщение v79italya »

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




Цитата Iska:



Путь к целевому каталогу задаётся параметром скрипта (также можно просто перетащить папку на скрипт в Проводнике)
CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать???




Как это делается?
Цитата Iska:



Просто «обернуть и использовать» не получится. VBScript WSH и VBA — близкие, но разные языки. Что мешало Вам зараз сказать про VBA и Excel?
CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать???




Скрипт так скрипт. Буду отдельно от других макросов запускать.

Что мешало? Я думал любой скрипт можно обернуть в sub и превратить в макрос. Получается, ошибался
Аватара пользователя
v79italya

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

Сообщение v79italya »

Цитата v79italya:



Я хотел превратить его в макрос (обернуть содержимое в Sub ... End Sub) и использовать в Excel
CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать???




Каким образом? Загрузить csv на лист Excel?
Вложения
Новая папка.zip
(18.15 КБ) 0 скачиваний
Новая папка.zip
(18.15 КБ) 0 скачиваний
Аватара пользователя
Iska

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

Сообщение Iska »

Цитата v79italya:



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




Просто перетащите искомую папку из Проводника на скрипт. Ухватите её мышкой, перетащите на скрипт и отпустите.
Аватара пользователя
v79italya

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

Сообщение v79italya »

Цитата megaloman:



Каким образом? Загрузить csv на лист Excel?
CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать???




Вот этот макрос, сделанный из скрипта, работает не загружая в 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:



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




Понял я теперь Изображение Изображение Получилось) Спасибо большое

Второй скрипт тоже отлично работает. Спасибо большое
Аватара пользователя
v79italya

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

Сообщение v79italya »

Цитата v79italya:



Вот этот макрос, сделанный из скрипта, работает не загружая в Excel. Вот, наподобие этого и хотел.
CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать???




Там, похоже, обрабатываются все файлы .csv в указанной папке.


Вот мой вариант vbs-скрипта чтобы удалить во всех файлах CSV в указанной папке строки, содержащие null

[spoiler]Код:
[/spoiler]

Код: Выделить всё

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
Ответить

Вернуться в «Скриптовые языки администрирования Windows»