View previous topic :: View next topic |
Author |
Message |
ZZZAlexZZZ
Joined: 08 Mar 2014 Posts: 68
|
(Separately) Posted: Fri Sep 01, 2017 18:28 Post subject: |
|
|
Flasher
Цель - лучшее визуальное представление документов посредством разделения имени вида {ИМЯ Номер Договор dd.MM.YYYY Сумма ццццц-цц счет номер} на составляющие.
Документов много, требуется сортировка по работе по полям. Если в папке лежат другие документы - в поле попадает вывод ошибки
P.S Понятно что есть плагин Expander2, но он используется для другого - другой разделитель. Да и академический интерес - в дальнейшем м.б. потребуется поколдовать для представления или поиска через регулярки с именами (на перспективу) - здесь скрипт погибче чем плагин. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Sep 01, 2017 18:34 Post subject: |
|
|
ZZZAlexZZZ
Цель — это хорошо, но меня интересовала полноценная задача с примерами. Сейчас я вижу 8 составляющих, а в скрипте их 14. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
ZZZAlexZZZ
Joined: 08 Mar 2014 Posts: 68
|
(Separately) Posted: Fri Sep 01, 2017 18:46 Post subject: |
|
|
Flasher
8 - это сейчас, 14 - на перспективу
например (в реальности их сотни) 3 файла с именами:
17_08_15_План Освоения Ext
ПП 25 04.05.2017 КРК 52!ПП Спецификация 25 4578-23 СЧ 234
ПП 256 28.04.2017 ПРИ 35!МИ Спецификация 545 223200-25 СЧ 4878
Выводится в колонки 1-8 (соответственно слова разделенные по пробелу)
Несоответствие типа: 'FormatCurrency'
ПП 25 4 мая 2017 г. КРК 52!ПП Спецификация 25 4 578,23 ₽
ПП 256 28 апреля 2017 г. ПРИ 35!МИ Спецификация 545 223 200,25 ₽
Скрипт в текущем виде спотыкается на неизвестном ему формате - хотелось бы чтобы или ничего не выдавал, или знакомые ему числа, даты, суммы (сейчас сумма представляется как ЦИФРА(рубл) - ЦИФРА(коп)) |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Sep 01, 2017 19:14 Post subject: |
|
|
ZZZAlexZZZ
Увы, но на полноценную задачу это не тянет. Даны условно исходные данные без обозначений искомых составляющих в неясной последовательности. Понять по такой информации, как отличать друг от друга те или иные составляющие, весьма затруднительно. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
ZZZAlexZZZ
Joined: 08 Mar 2014 Posts: 68
|
(Separately) Posted: Fri Sep 01, 2017 19:20 Post subject: |
|
|
Flasher
Хорошо, сузим задачу.
Как в этом куске кода
Code: |
If Matches.Count > 0 Then
ArrPN(i) = FormatCurrency(objRegExp.Replace(ArrPN(i), "$1") & ","& objRegExp.Replace(ArrPN(i), "$3"), -1, -1)
End If
|
исключить данные, которые не принимает функция FormatCurrency?
Паттерн "(\d+)(\D)(\d\d)" не может не быть числом - первое и третье вхождение я так понимаю числа. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Sep 01, 2017 19:49 Post subject: |
|
|
ZZZAlexZZZ
Лучше не сужать. Я бы этот скрипт упростил. Нужен конкретный вывод, последовательность и вероятность наличия/отсутствия тех или иных символов/составляющих. Без этого и на последний вопрос ответить проблематично.
И вообще по регуляркам есть смысл сюда писать. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
ZZZAlexZZZ
Joined: 08 Mar 2014 Posts: 68
|
(Separately) Posted: Mon Sep 04, 2017 12:21 Post subject: |
|
|
Flasher
Верно подмечено, дело было в регулярке - д.б. ^(\d+)(\D)(\d\d)$
Теперь дата выглядит как дата, число с разделением групп разрядов, денежный формат как денежный формат.
Ссылка
Спасибо за участие |
|
Back to top |
|
|
yozhik
Joined: 04 May 2014 Posts: 219 Location: Электросталь
|
(Separately) Posted: Fri Sep 08, 2017 20:07 Post subject: |
|
|
Flasher
Попробовал в Вашем скрипте MSOfficeProps.vbs заменить некоторые Properties массиве. Посыпались ошибки. Пытаясь выяснить в чём дело сократил скрипт до двух строчек:
Code: | Set File = CreateObject("Shell.Application").NameSpace(0).ParseName(FileName)
Execute "Content=File.ExtendedProperty(""System.ApplicationName"")" |
Именно этот вариант отрабатывает исправно, WinScriptsAdv выводит информацию. Но если поменять System.ApplicationName на System.Author или System.Category, плагин крашится:
Code: | Crash in plugin WinScriptsAdv.wdx:
External exception EEDFADE |
WDX Guide тоже выдаёт ошибку:
Code: | WDX Guide
Exception in ContentGetValue |
Некоторые свойства принимает и отображает, некоторые – ошибка. В чём может быть причина?
Свойства беру отсюда. Опыты произвожу на Windows 8.1 x86. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Sep 08, 2017 20:25 Post subject: |
|
|
yozhik
1. Почему shelldetails не пользуетесь?
2. В указанный скрипт писать стоит в конец массива.
Quote: | ... in Array(..., "System.Language", "System.блабла", "System.блабла") |
3. Если нужна частичная замена, то лучше сразу написать нужный список под спойлером. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
yozhik
Joined: 04 May 2014 Posts: 219 Location: Электросталь
|
(Separately) Posted: Fri Sep 08, 2017 20:42 Post subject: |
|
|
Flasher
1. Буду теперь. Раньше не знал где брать дополнительные Properties, но вчера узнал, пока разбирался со скриптом. А ещё в скрипт можно доп. функцию дописать, по примеру Вашей FTime() в MSOfficeProps.vbs, которая видоизменяет полученное значение – в ShellDetails нет такой возможности.
2. Вписал:
Code: | ... in Array(..., "System.Language", "System.Author") |
Получил ошибку. А если вместо System.Author вписать System.Company, то нет ошибки. Не могу понять почему из одной и той же группы (Windows Properties Core) одни свойства обрабатываются, другие нет... |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Sep 08, 2017 20:56 Post subject: |
|
|
yozhik
Author - это список авторов (массив), он не может обрабатываться как строка. Company в System. не нуждается, да и есть в shelldetails (см. мой тамошний скрин). _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
yozhik
Joined: 04 May 2014 Posts: 219 Location: Электросталь
|
(Separately) Posted: Fri Sep 08, 2017 21:22 Post subject: |
|
|
Flasher wrote: | Author - это авторы (массив), он не может обрабатываться как строка. |
Вот, спасибо от души. Теперь понятно Интересно было бы разобраться, как в этом случае массив обрабатывать, но времени нет, к сожалению. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Sep 08, 2017 22:22 Post subject: |
|
|
yozhik
Я раньше пробовал работать как с массивами, не выходило. На VB ещё можно, на VBS-е вряд ли. Проще взять shelldetails.
Если нужно отсеивать, то проще смотреть по IsArray(). Также можно проверять тип по Vartype(). 8192(массив)+8(строковый)/17(байтовый) и т. д. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
yozhik
Joined: 04 May 2014 Posts: 219 Location: Электросталь
|
(Separately) Posted: Sat Sep 09, 2017 11:22 Post subject: |
|
|
Flasher
Спасибо большое.
Ещё скажите, пожалуйста, в начале скрипта у Вас:
Code: | Reg.Pattern = "^(do[ct][xm]?|xl[st][xm]?|p[op]t[xm]?|vsd)$" |
Это, как я понял, Вы расширение проверяете у файла. Но у плагина в options.ini для этой, кажется, цели есть параметр extensions=. Что, плагин фильтрует некачественно? Или другая цель? Вопрос без подвоха, действительно интересно. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Sep 09, 2017 14:22 Post subject: |
|
|
yozhik
WACP фильтрует, SCP нет, а т. к. он в отличии от WACP не берёт данные из кэша, то есть смысл в нём использовать. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
|