-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
Проблема с IniRead
Имееться ини файл следующего содержания:
Код:
[proga]
proga="test1.exe=test1|test2.exe=test2" ;и т.д.
Нужно что бы скрипт выдал GUI окно с названиеями т.е. test1, test2
Мой скрипт:
Код:
......
$sName1=IniRead (@ScriptDir & "\config.ini", "proga", "proga", "")
$sProgName = StringRegExpReplace($sName1, '^.*=', '')
$sProgExe = StringRegExpReplace($sName1, '=.*$', '')
......
Но он читает только одно название
|
Код:
#include <array.au3>
$sName=IniRead (@ScriptDir & "\config.ini", "proga", "proga", "")
$aNames=StringSplit($sName,"|")
if IsArray($aNames) then
for $i=1 to $aNames[0]
$sProgName = StringRegExpReplace($aNames[$i], '^.*=', '')
$sProgExe = StringRegExpReplace($aNames[$i], '=.*$', '')
MsgBox(64,"Сообщение", "Название программы: "&$sProgName&@crlf&"Название exe: "&$sProgExe)
next
endif
|
А может сразу подскажете, как сделать что бы скрипт находил в ини файле нужное нам $sProgName и $sProgExe и удолял их вместе со знаком "=". Например из proga="test1.exe=test1|test2.exe=test2" удалить только test1.exe=test1, а остальное оставить. Причем надо именно сделать поиск т.к. параметр proga в ини файле может меняться. СПАСИБО
|
Centrinar,
Попробуйте так:
Код:
$IniFile = @ScriptDir & '\My.ini' ; Ваш ини-файл.
$sSection = 'proga' ;секция, в которой будем удалять.
$sKey = 'proga' ;ключ, в котром будем удалять.
$sProgExeDel = 'test1.exe' ;программа для удаления.
$sProgNameDel = 'test1' ; имя для удаления
$aControl = IniReadSectionNames($IniFile)
If @error Then
MsgBox(0, 'Ошибка', 'Проблема с ини-файлом.')
Exit
Else
For $i = 1 To $aControl[0]
If $aControl[$i] = $sSection Then ExitLoop
Next
EndIf
If $i = $aControl[0] + 1 Then
MsgBox(0, 'Ошибка', 'В ини-файле отсутствует указанная секция.')
Exit
EndIf
$sKeyValue = IniRead($IniFile, $sSection, $sKey, 'NoKey')
If $sKeyValue = 'NoKey' Then
MsgBox(0, 'Ошибка', "В ини-файле отсутствует указанный ключ.")
Exit
EndIf
$sKeyNewValue = StringReplace(StringReplace($sKeyValue, $sProgExeDel & '=' & $sProgNameDel, ''), '||', '|')
If StringLeft($sKeyNewValue, 1) = '|' Then $sKeyNewValue = StringTrimLeft($sKeyNewValue, 1)
If StringRight($sKeyNewValue, 1) = '|' Then $sKeyNewValue = StringTrimRight($sKeyNewValue, 1)
;MsgBox(0, '', $sKeyValue & @CRLF & $sKeyNewValue)
IniWrite($IniFile, $sSection, $sKey, '"' & $sKeyNewValue & '"')
Структура ини-файла:
Код:
[proga]
proga="test1.exe=test1|test2.exe=test2|test3.exe=test3|test4.exe=test4"
|
Или так:
Код:
$sProgtoDel = 'test1.exe' ;прога для удаления.
$sProgNametoDel = 'test1' ; имя exe для удаления
$sName=IniRead (@ScriptDir & "\config.ini", "proga", "proga", "")
$aNames=StringSplit($sName,"|")
$sName=""
if IsArray($aNames) then
for $i=1 to $aNames[0]
$sProgName = StringRegExpReplace($aNames[$i], '^.*=', '')
$sProgExe = StringRegExpReplace($aNames[$i], '=.*$', '')
if $sProgName <>$sProgNametoDel and $sProgExe<>$sProgtoDel then $sName &=$aNames[$i]&"|"
next
IniWrite (@ScriptDir & "\config.ini", "proga", "proga", '"'&StringTrimRight($sName, 1)&'"')
endif
|
Или, если не нужно отделять название программы и название exe, то еще попроще:
Код:
$sProgtoDel = 'test1.exe' ;прога для удаления.
$sProgNametoDel = 'test1' ; имя exe для удаления
$sName=IniRead (@ScriptDir & "\config.ini", "proga", "proga", "")
$aNames=StringSplit($sName,"|")
$sName=""
if IsArray($aNames) then
for $i=1 to $aNames[0]
if $aNames[$i]<>$sProgtoDel&"="&$sProgNametoDel then $sName &=$aNames[$i]&"|"
next
IniWrite (@ScriptDir & "\config.ini", "proga", "proga", '"'&StringTrimRight($sName, 1)&'"')
endif
|
Время: 20:04.
© OSzone.net 2001-