PDA

Показать полную графическую версию : [решено] Проблема с IniRead


Centrinar
15-06-2010, 22:11
Имееться ини файл следующего содержания:

[proga]
proga="test1.exe=test1|test2.exe=test2" ;и т.д.

Нужно что бы скрипт выдал GUI окно с названиеями т.е. test1, test2
Мой скрипт:

......
$sName1=IniRead (@ScriptDir & "\config.ini", "proga", "proga", "")
$sProgName = StringRegExpReplace($sName1, '^.*=', '')
$sProgExe = StringRegExpReplace($sName1, '=.*$', '')
......

Но он читает только одно название

beve
15-06-2010, 22:47
#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

Centrinar
16-06-2010, 01:23
А может сразу подскажете, как сделать что бы скрипт находил в ини файле нужное нам $sProgName и $sProgExe и удолял их вместе со знаком "=". Например из proga="test1.exe=test1|test2.exe=test2" удалить только test1.exe=test1, а остальное оставить. Причем надо именно сделать поиск т.к. параметр proga в ини файле может меняться. СПАСИБО

madmasles
16-06-2010, 08:17
Centrinar,
Попробуйте так:$IniFile = @ScriptDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@scriptdir) & '\My.ini' ; Ваш ини-файл.
$sSection = 'proga' ;секция, в которой будем удалять.
$sKey = 'proga' ;ключ, в котром будем удалять.
$sProgExeDel = 'test1.exe' ;программа для удаления.
$sProgNameDel = 'test1' ; имя для удаления

$aControl = IniReadSectionNames (http://www.autoitscript.com/autoit3/docs/functions/IniReadSectionNames.htm)($IniFile)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(0, 'Ошибка', 'Проблема с ини-файлом.')
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aControl[0]
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $aControl[$i] = $sSection Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) ExitLoop (http://www.autoitscript.com/autoit3/docs/keywords.htm#ExitLoop)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $i = $aControl[0] + 1 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(0, 'Ошибка', 'В ини-файле отсутствует указанная секция.')
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

$sKeyValue = IniRead (http://www.autoitscript.com/autoit3/docs/functions/IniRead.htm)($IniFile, $sSection, $sKey, 'NoKey')
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $sKeyValue = 'NoKey' Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(0, 'Ошибка', "В ини-файле отсутствует указанный ключ.")
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

$sKeyNewValue = StringReplace (http://www.autoitscript.com/autoit3/docs/functions/StringReplace.htm)(StringReplace (http://www.autoitscript.com/autoit3/docs/functions/StringReplace.htm)($sKeyValue, $sProgExeDel & '=' & $sProgNameDel, ''), '||', '|')
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) StringLeft (http://www.autoitscript.com/autoit3/docs/functions/StringLeft.htm)($sKeyNewValue, 1) = '|' Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) $sKeyNewValue = StringTrimLeft (http://www.autoitscript.com/autoit3/docs/functions/StringTrimLeft.htm)($sKeyNewValue, 1)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) StringRight (http://www.autoitscript.com/autoit3/docs/functions/StringRight.htm)($sKeyNewValue, 1) = '|' Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) $sKeyNewValue = StringTrimRight (http://www.autoitscript.com/autoit3/docs/functions/StringTrimRight.htm)($sKeyNewValue, 1)
;MsgBox(0, '', $sKeyValue & @CRLF & $sKeyNewValue)
IniWrite (http://www.autoitscript.com/autoit3/docs/functions/IniWrite.htm)($IniFile, $sSection, $sKey, '"' & $sKeyNewValue & '"')Структура ини-файла:[proga]
proga="test1.exe=test1|test2.exe=test2|test3.exe=test3|test4.exe=test4"

beve
16-06-2010, 13:35
Или так:
$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

beve
16-06-2010, 14:03
Или, если не нужно отделять название программы и название 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




© OSzone.net 2001-2012