Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Проблема с IniRead (http://forum.oszone.net/showthread.php?t=178273)

Centrinar 15-06-2010 22:11 1434860

Проблема с 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, '=.*$', '')
......

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

beve 15-06-2010 22:47 1434878

Код:

#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 1434960

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

madmasles 16-06-2010 08:17 1435024

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"


beve 16-06-2010 13:35 1435224

Или так:
Код:

$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 1435239

Или, если не нужно отделять название программы и название 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.

Время: 20:04.
© OSzone.net 2001-