Что нового

Данные, строки Копировать версию из имени файла

SealAlbinos

Продвинутый
Сообщения
154
Репутация
57
Код:
$text = "112.0.5615.50_installer.exe.{8A69D345-D564-463c-AFF1-A69D9E530F96}"

;первый вариант
$option = StringSplit($text,"_")
if IsArray($option) then MsgBox(0,"",$option[1])
;if IsArray($option2) then ClipPut($option[1]) ;скопировать в буфер обмена

;второй вариант
$option2 = StringRegExp($text, '(.*)_installer', 3)
if IsArray($option2) then MsgBox(0,"",$option2[0])
;if IsArray($option2) then ClipPut($option2[0]);скопировать в буфер обмена
 

Andrey_A

Продвинутый
Сообщения
325
Репутация
68
$option2 = StringRegExp($text, '(.*)_installer', 3)
В ряде UDF функций и функциях на сайтах тоже присутствует этот недочёт... А именно: Зачем ставить 3 и искать всё, когда 1 поиск первого совпадения... здесь это не принципиально и может показаться придиркой, но при больших текстах влияет на скорость
$option2 = StringRegExp($text,'(.*)_installer',1)
 

Alecsis

Осваивающий
Сообщения
101
Репутация
41
А если имя файла, например, такое: installer.exe.112.0.5615.50.{8A69D345-D564-463c-AFF1-A69D9E530F96} ?
Т.е. в общем случае версия не обязана находиться в самом начале имени. К.м.к., так надёжнее будет — хоть эта версия в середине, хоть в хвосте:
Код:
$sREx   = '(\d+(?:\.\d+)+)'
$option2 = StringRegExp($text, $sREx, 1)
 

lettterssino

Знающий
Сообщения
109
Репутация
10
Доброе время суток. Имеется файл с именем

Нужно получить (скопировать) версию

из имени файла.
Может показаться странным, но может у самого .exe версия совпадает с версией в названии и будет достаточно:
Код:
FileGetVersion("")

Либо если у вас указан гуид и приложение установлено, найти его версию в реестре.
 

Oki

Продвинутый
Сообщения
452
Репутация
62
В текущей постановке задачи быстрее всего просто достать всё до первого подчёркивания и не анализировать остальное.
Код:
$sFileName = "First part_Second part_..._Last part"
MsgBox(4096, "", StringLeft($sFileName, StringInStr($sFileName, "_") - 1))
 

lettterssino

Знающий
Сообщения
109
Репутация
10
В текущей постановке задачи быстрее всего просто достать всё до первого подчёркивания и не анализировать остальное.
Код:
$sFileName = "First part_Second part_..._Last part"
MsgBox(4096, "", StringLeft($sFileName, StringInStr($sFileName, "_") - 1))
Тут дело в том, что может быть случай как описал Alecsis.
И потом переделывать всё по многу раз?
 

Oki

Продвинутый
Сообщения
452
Репутация
62
Тут дело в том, что может быть случай как описал Alecsis.
И потом переделывать всё по многу раз?
Оценивать, может ли быть такой случай, и как разумно это учесть, дело не наше, мы дали различные варианты и описали их плюсы и минусы, как для текущей постановки, так и для планирования на будущее.
 

RaZum

Знающий
Сообщения
78
Репутация
14
просто удалите из строки instaler.exe _ и .{....}, и тогда останется одна версия при любых вариантах расположения
 

Oki

Продвинутый
Сообщения
452
Репутация
62
просто удалите из строки instaler.exe _ и .{....}, и тогда останется одна версия при любых вариантах расположения
Лол, здесь же не форум по вышиванию крестиком. Очевидно, что запрошены идеи для скрипта на AutoIt, а не инструкции для уборщицы из одноклассников, которую сегодня упоминали в другой теме. :smile:
 

RaZum

Знающий
Сообщения
78
Репутация
14
Оставим уборщицу в покое, она поддерживает чистоту. Что очень важно!
А в аналогию, далёкий от мира компьютеров человек то же может поинтиресоваться - о каких таких открывающихся окошках говорят пользователи компьютеров всего мира, глядя в прямоугольные светящиеся пластиковые штуковины.

Вернёмся к теме... (вышиванию крестиком..)
Формат x.x.x.x видимо постоянный, к нему и шаблон можно фиксированный (\d+\.\d+\.\d+\.\d+) применить, чтоб без лишних вариаций
 

Oki

Продвинутый
Сообщения
452
Репутация
62
В текущей постановке задачи быстрее всего просто достать всё до первого подчёркивания и не анализировать остальное.
Код:
$sFileName = "First part_Second part_..._Last part"
MsgBox(4096, "", StringLeft($sFileName, StringInStr($sFileName, "_") - 1))
Формат x.x.x.x видимо постоянный, к нему и шаблон можно фиксированный (\d+\.\d+\.\d+\.\d+) применить, чтоб без лишних вариаций
Именно потому, что формат <что-то нужное>_<что-то ненужное>, по-видимому, постоянный, быстрее всего (что может оказаться важным при множественной обработке многих имён файлов) без всяческих регулярных выражений искать до первого символа подчёркивания, как в этом скрипте. А вот если появится потребность работать с другими форматами, то в топике накидали немалое количество решений и на такие случаи.
 
Верх