Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно
MKN MKN вне форума

Ветеран


Сообщения: 2358
Благодарности: 559

Профиль | Отправить PM | Цитировать


Цитата BuZzOFF:
Как отфильтровать так, чтоб добавлялась только последняя версия каждой программы. »
Предположим у нас есть файл list.txt со списком одноимённых приложений разных версий :
Код: Выделить весь код
Camera Raw CC 9.6 win32 
Camera Raw CC 9.6.1 win32 
Camera Raw CC 9.6.2 win32
Прочтём его и отфильтруем версии (как вариант) :

Код: Выделить весь код
OutFile NewVerFilter.exe
!include "LogicLib.nsh"
!include "TextFunc.nsh"
!include "WordFunc.nsh"

Var /global Str
Var /global Ver
Var /global SumVer
Var /global Ver1
Var /global Ver2
Var /global Ver3

Section
FileOpen $R4 "$EXEDIR\list.txt" r
IfErrors done 
ClearErrors
${LineSum} "$EXEDIR\list.txt" $8 ; количество строк в list.txt

StrCpy $3 0

${Do}
IntOp $3 $3 + 1 ; нумерация читаемых строк
${LineRead} "$EXEDIR\list.txt" "$3" $Str  ; читаем строку № $3
;MessageBox MB_OK|MB_ICONINFORMATION "$3 -$Str "
${If} $Str == ""
Goto Next
${EndIf}

; выбираем версию из названия приложения
${WordFind2X} "$Str" " " "" "-3}}" $Ver  
StrCpy $Ver $Ver -9 ; отсекаем n символов от конца (n-количество, в зависимости от того, как построен список приложений)
;MessageBox MB_OK|MB_ICONINFORMATION "$Ver"

StrCpy $SumVer "$SumVer$Ver-" ; собираем все версии в одну переменную, добавив разделитель -

Next:
${If} $3 > $8 ; если номер текущей строки > кол-ва строк - выход из цикла
${ExitDo}
${EndIf}
${Loop}
done:
FileClose $R4

MessageBox MB_OK|MB_ICONINFORMATION "Все версии: $SumVer"   ;  9.6-9.6.1-9.6.2-

; разделяем версии для дальнейшего сравнения
${WordFind} "$SumVer" "-" "+1" "$Ver1" ; 
${WordFind} "$SumVer" "-" "+2" "$Ver2" ; 
${WordFind} "$SumVer" "-" "+3" "$Ver3" ; 
MessageBox MB_OK|MB_ICONINFORMATION "$Ver1$\r$\n$Ver2$\r$\n$Ver3"

;далее последовательно сравниваем и оставляем только самую новую версию :

${VersionCompare} "$ver1" "$ver2" $R0
;если $R0=0   - Версии равны    
;если $R0=1   - $ver1 новее    
;если $R0=2   - $ver2 новее
MessageBox MB_OK|MB_ICONINFORMATION "$R0"

; и далее логика сравнения версий и оставление более новой....

SectionEnd
Если в списке разноимённые приложения, сначала последовательно выбираем версии в каждом из одноимённых приложений. Вариантов много.

Последний раз редактировалось MKN, 13-12-2016 в 12:55.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:44, 13-12-2016 | #2069