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

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

neprotiv 31-10-2012 18:33 2015956

regexp. не закрытые скобки
 
помогите пожалуйста
нужен regexp для поиска в тотал командере файлов которые имеют такой вид
пример
слово1_-_слово2-(50505050)-слово4-слово5)-слово6
слово1_-_слово2-(50505050)-слово4-(слово5-слово6
но не
слово1_-_слово2-(50505050)-слово4-(слово5)-слово6

тоесть может содержать

пробЫвал так но оно находит все три примера вышие
(\)(.){1,}[^\(](.){1,}[^\(]\))

Iska 31-10-2012 21:06 2016040

Цитата:

Цитата neprotiv
(\)(.){1,}[^\(](.){1,}[^\(]\)) »

Точнее укажите, что именно Вам нужно получить. Ибо, судя по лишним скобкам, вам нужно не только найти, но и извлечь части имени (для дальнейшей работы?).

neprotiv 01-11-2012 22:30 2016862

мне нужно найти неправильные имена файлов, тоесть если файл содержит лишнюю скобу - либо ( либо )
нашел примерный выход таким образом
(\)+[^\(]+[^\(]\)|\(+[^\)]+[^\)]\()
но оно ненаходит если файл выглядит так (лишняя скобка стоит очень близко с другой)
слово1_-_слово2-(50505050)-(слово4-слово5-слово6

Iska 02-11-2012 04:19 2016995

neprotiv, если нужно просто найти файлы с потерянной скобкой — regexp не обязателен, достаточно просто посчитать количество открывающих и закрывающих скобок, затем сравнить эти количества.

Пример на WSH:
Код:

Option Explicit

Dim strFolder
Dim objFile


'strFolder = WScript.Arguments.Item(0)
strFolder = "E:\Песочница\0197"

With WScript.CreateObject("Scripting.FileSystemObject")
        If .FolderExists(strFolder) Then
                For Each objFile In .GetFolder(strFolder).Files
                        If UBound(Split(objFile.Name, "(")) <> UBound(Split(objFile.Name, ")")) Then
                                WScript.Echo objFile.Name
                        End If
                Next
        Else
                WScript.Echo "Folder [" & strFolder & "] not found"
        End If
End With

WScript.Quit 0

↧ Возможный результат ↧
Код:

слово1_-_слово2-(50505050)-слово4-(слово5-слово6.txt
слово1_-_слово2-(50505050)-слово4-слово5)-слово6.txt


Цитата:

Цитата neprotiv
если файл содержит лишнюю скобу - либо ( либо ( »

«либо ( либо (» — оригинально ;). Очевидно, имелось в виду «Либо «(», либо «)»»?

neprotiv 02-11-2012 13:51 2017254

большое спасибо

Цитата:

Цитата Iska
«либо ( либо (» — оригинально . Очевидно, имелось в виду «Либо «(», либо «)»»? »

да))...опечатка

Iska 02-11-2012 15:34 2017374

neprotiv, это именно то, что было потребно Вам?

neprotiv 05-11-2012 22:53 2019590

да то только вот никак не пойму как прикрутить к тотал командеру и вообще как он работает (скрипт)

Iska 05-11-2012 23:19 2019618

Цитата:

Цитата neprotiv
да то только вот никак не пойму как прикрутить к тотал командеру »

Это зависит от того, что Вы хотели бы получить в нём.

Цитата:

Цитата neprotiv
и вообще как он работает (скрипт) »

Для указанной папки:
Код:

strFolder = "E:\Песочница\0197"
скрипт перебирает все файлы. Имя каждого файла, представляющее собой строку символов, разбивается в массив, сначала по символу открывающей скобки, затем — закрывающей. Для каждого из двух полученных массивов получается значение верхней границы. Если полученные значения не равны — значит количество отрывающих и закрывающих скобок не одинаково.
Код:

If UBound(Split(objFile.Name, "(")) <> UBound(Split(objFile.Name, ")")) Then

neprotiv 05-11-2012 23:36 2019632

мне надо чтоб он создал список файлов с полным путем
можно ли использовать его как кнопку?

Iska 06-11-2012 00:21 2019666

1. В каком виде Вам нужен список файлов? В виде текстового файла? В виде сообщения?
2. Каких именно файлов? Из выделенных на панели?

neprotiv 06-11-2012 00:27 2019671

список неправильных файлов в текстовом документе

Iska 06-11-2012 05:20 2019770

Цитата:

Цитата neprotiv
список неправильных файлов в текстовом документе »

Куда, в какую папку, класть текстовый документ? Для чего вообще нужен текстовый документ — т.е., какова будет дальнейшая работа с найденными именами файлов с потерянными скобками?

Почему не ответили на второй вопрос — выделенных на панели файлов, всех файлов, або ещё каких?

P.S. Вот Вам пример — для выделенных на панели файлов:
читать дальше »
Код:

Option Explicit

Dim objArgument
Dim objFile

Dim strMessage


If WScript.Arguments.Count <> 0 Then
        strMessage = ""
       
        For Each objArgument In WScript.Arguments
                With WScript.CreateObject("Scripting.FileSystemObject")
                        If .FileExists(objArgument) Then
                                With .GetFile(objArgument)
                                        If UBound(Split(.Name, "(")) <> UBound(Split(.Name, ")")) Then
                                                strMessage = strMessage & .Path & vbCrLf
                                        End If
                                End With
                        End If
                End With
        Next
       
        If Len(strMessage) <> 0 Then
                WScript.Echo strMessage
        End If
End If

WScript.Quit 0


Настройки для кнопки:


Время: 16:02.

Время: 16:02.
© OSzone.net 2001-