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

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

hancogruss 24-09-2016 04:49 2671603

Bat-файл отбора из текста
 
Здравствуйте есть текст, в нем есть одинаковые строчки типа Save my money: $0.00
Нужно что бы бат файл находил все такие строчки с значениями выше 0.00 и записывал в новый текстовой документ.

Iska 24-09-2016 07:11 2671609

hancogruss, крайне желателен образец документа. Упакуйте его в архив и приложите к сообщению.

hancogruss 24-09-2016 14:09 2671700

Вложений: 1
Цитата:

Цитата Iska
hancogruss, крайне желателен образец документа. Упакуйте его в архив и приложите к сообщению. »


y-- 24-09-2016 15:04 2671719

hancogruss,
Код:

TYPE text.txt|findstr /B /C:"Save My Money:"
а перенаправишь куда тебе надо

hancogruss 24-09-2016 17:02 2671757

Цитата:

Цитата y--
а перенаправишь куда тебе надо »

Мне нужно что бы выводились только значения больше нуля
Вместе со строкой Name, если можно

y-- 24-09-2016 18:43 2671787

hancogruss,
Код:

TYPE text.txt|findstr /B /C:"Save My Money:"|findstr /v /C:"$0.00"
а со строкой Name это медленный разбор будет - только полный парсинг через for.

И наверное правильнее так даже делать:
Код:

findstr /B /C:"Save My Money:" text.txt|findstr /v /C:"$0.00"
это быстрее отработает

Iska 25-09-2016 04:47 2671933

hancogruss, попробуйте так (на WSH):
Скрытый текст
Код:

Option Explicit

Dim strSourceFile

Dim strContent

Dim objRegExp
Dim objMatch


If WScript.Arguments.Count = 1 Then
        strSourceFile = WScript.Arguments.Item(0)
       
        With WScript.CreateObject("Scripting.FileSystemObject")
                If .FileExists(strSourceFile) Then
                        With .OpenTextFile(strSourceFile)
                                strContent = .ReadAll()
                                .Close
                        End With
                       
                        Set objRegExp = WScript.CreateObject("VBScript.RegExp")
                       
                        With objRegExp
                                .IgnoreCase = True
                                .Global = True
                                .Pattern = "=+\r\nSave My Money: \$(\d+\.\d{2})\r\nName: (.+)\r\n(?==+)"
                        End With
                       
                        If objRegExp.Test(strContent) Then
                                With .CreateTextFile(.GetBaseName(strSourceFile) & "_filtered" & .GetExtensionName(strSourceFile), True)
                                        For Each objMatch In objRegExp.Execute(strContent)
                                                If CSng(objMatch.Submatches.Item(0)) > 0 Then
                                                        .WriteLine objMatch.Submatches.Item(1) & vbTab & objMatch.Submatches.Item(0)
                                                End If
                                        Next
                                       
                                        .Close
                                End With
                        Else
                                WScript.Echo "Pattern [" & objRegExp.Pattern & "] not found in content of source file [" & strSourceFile & "]."
                                WScript.Quit 3
                        End If
                       
                        Set objRegExp = Nothing
                Else
                        WScript.Echo "Can't find source file [" & strSourceFile & "]."
                        WScript.Quit 2
                End If
        End With
Else
        WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source file>"
        WScript.Quit 1
End If

WScript.Quit 0


Сохраните код в файл с расширением .vbs. Путь к исходному файлу задаётся параметром скрипта (также можно просто перетащить исходный файл на скрипт в Проводнике). Результирующий файл будет создан в текущем каталоге на основе имени и расширения исходного файла с добавлением «_filtered» к имени (если файл с таким именем уже существует — он будет молча перезаписан). Шаблон регулярного выражения рассчитан только на формат денежных сумм вида «$0.00», но не «$#,##0.00» или «($0.00)»


Время: 01:17.

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