Страница 11 из 20

Добавлено: Пт сен 01, 2017 17:28
ZZZAlexZZZ
Flasher
Цель - лучшее визуальное представление документов посредством разделения имени вида {ИМЯ Номер Договор dd.MM.YYYY Сумма ццццц-цц счет номер} на составляющие.
Документов много, требуется сортировка по работе по полям. Если в папке лежат другие документы - в поле попадает вывод ошибки
P.S Понятно что есть плагин Expander2, но он используется для другого - другой разделитель. Да и академический интерес - в дальнейшем м.б. потребуется поколдовать для представления или поиска через регулярки с именами (на перспективу) - здесь скрипт погибче чем плагин.

Добавлено: Пт сен 01, 2017 17:34
Flasher
ZZZAlexZZZ
Цель — это хорошо, но меня интересовала полноценная задача с примерами. Сейчас я вижу 8 составляющих, а в скрипте их 14.

Добавлено: Пт сен 01, 2017 17:46
ZZZAlexZZZ
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 ₽

Скрипт в текущем виде спотыкается на неизвестном ему формате - хотелось бы чтобы или ничего не выдавал, или знакомые ему числа, даты, суммы (сейчас сумма представляется как ЦИФРА(рубл) - ЦИФРА(коп))

Добавлено: Пт сен 01, 2017 18:14
Flasher
ZZZAlexZZZ
Увы, но на полноценную задачу это не тянет. Даны условно исходные данные без обозначений искомых составляющих в неясной последовательности. Понять по такой информации, как отличать друг от друга те или иные составляющие, весьма затруднительно.

Добавлено: Пт сен 01, 2017 18:20
ZZZAlexZZZ
Flasher
Хорошо, сузим задачу.
Как в этом куске кода

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

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)" не может не быть числом - первое и третье вхождение я так понимаю числа.

Добавлено: Пт сен 01, 2017 18:49
Flasher
ZZZAlexZZZ
Лучше не сужать. Я бы этот скрипт упростил. Нужен конкретный вывод, последовательность и вероятность наличия/отсутствия тех или иных символов/составляющих. Без этого и на последний вопрос ответить проблематично.
И вообще по регуляркам есть смысл сюда писать.

Добавлено: Пн сен 04, 2017 11:21
ZZZAlexZZZ
Flasher
Верно подмечено, дело было в регулярке - д.б. ^(\d+)(\D)(\d\d)$
Теперь дата выглядит как дата, число с разделением групп разрядов, денежный формат как денежный формат.
Ссылка
Спасибо за участие

Добавлено: Пт сен 08, 2017 19:07
yozhik
Flasher
Попробовал в Вашем скрипте MSOfficeProps.vbs заменить некоторые Properties массиве. Посыпались ошибки. Пытаясь выяснить в чём дело сократил скрипт до двух строчек:

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

Set File = CreateObject("Shell.Application").NameSpace(0).ParseName(FileName)
Execute "Content=File.ExtendedProperty(""System.ApplicationName"")"
Именно этот вариант отрабатывает исправно, WinScriptsAdv выводит информацию. Но если поменять System.ApplicationName на System.Author или System.Category, плагин крашится:

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

Crash in plugin WinScriptsAdv.wdx:
External exception EEDFADE
WDX Guide тоже выдаёт ошибку:

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

WDX Guide
Exception in ContentGetValue
Некоторые свойства принимает и отображает, некоторые – ошибка. В чём может быть причина?
Свойства беру отсюда. Опыты произвожу на Windows 8.1 x86.

Добавлено: Пт сен 08, 2017 19:25
Flasher
yozhik
1. Почему shelldetails не пользуетесь?
2. В указанный скрипт писать стоит в конец массива.
... in Array(..., "System.Language", "System.блабла", "System.блабла")
3. Если нужна частичная замена, то лучше сразу написать нужный список под спойлером.

Добавлено: Пт сен 08, 2017 19:42
yozhik
Flasher
1. Буду теперь. Раньше не знал где брать дополнительные Properties, но вчера узнал, пока разбирался со скриптом. А ещё в скрипт можно доп. функцию дописать, по примеру Вашей FTime() в MSOfficeProps.vbs, которая видоизменяет полученное значение – в ShellDetails нет такой возможности.
2. Вписал:

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

... in Array(..., "System.Language", "System.Author")
Получил ошибку. А если вместо System.Author вписать System.Company, то нет ошибки. Не могу понять почему из одной и той же группы (Windows Properties Core) одни свойства обрабатываются, другие нет...

Добавлено: Пт сен 08, 2017 19:56
Flasher
yozhik
Author - это список авторов (массив), он не может обрабатываться как строка. Company в System. не нуждается, да и есть в shelldetails (см. мой тамошний скрин).

Добавлено: Пт сен 08, 2017 20:22
yozhik
Flasher писал(а):Author - это авторы (массив), он не может обрабатываться как строка.
Вот, спасибо от души. Теперь понятно :) Интересно было бы разобраться, как в этом случае массив обрабатывать, но времени нет, к сожалению.

Добавлено: Пт сен 08, 2017 21:22
Flasher
yozhik
Я раньше пробовал работать как с массивами, не выходило. На VB ещё можно, на VBS-е вряд ли. Проще взять shelldetails.
Если нужно отсеивать, то проще смотреть по IsArray(). Также можно проверять тип по Vartype(). 8192(массив)+8(строковый)/17(байтовый) и т. д.

Добавлено: Сб сен 09, 2017 10:22
yozhik
Flasher
Спасибо большое.
Ещё скажите, пожалуйста, в начале скрипта у Вас:

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

Reg.Pattern = "^(do[ct][xm]?|xl[st][xm]?|p[op]t[xm]?|vsd)$"
Это, как я понял, Вы расширение проверяете у файла. Но у плагина в options.ini для этой, кажется, цели есть параметр extensions=. Что, плагин фильтрует некачественно? Или другая цель? Вопрос без подвоха, действительно интересно.

Добавлено: Сб сен 09, 2017 13:22
Flasher
yozhik
WACP фильтрует, SCP нет, а т. к. он в отличии от WACP не берёт данные из кэша, то есть смысл в нём использовать.