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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Проверка существования секции в файле ini

Ответить
Настройки темы
[решено] Проверка существования секции в файле ini

Старожил


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


Конфигурация

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


Привет! Логически вроде просто, но сообразить не могу. Итак, в текстовом поле составляется секция ini файла с параметрами. По нажатию кнопки содержание текстового поля должно записываться в этот ini файл. Как проверить имя секции на уникальность и предупредить пользователя, если имя совпадает?

Отправлено: 22:29, 08-09-2013

 

Аватара для Creat0R

Must AutoIt


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

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


Код: Выделить весь код
$sFileName = @ScriptDir & '\Test.ini'
$sSectName = 'Prefs'

$iExists = _IniSectionExists($sFileName, $sSectName)

If $iExists Then
    MsgBox(262144+64, 'OK!', 'Section [' & $sSectName & '] exists in file <' & $sFileName & '>')
ElseIf $iExists = -1 Then
    MsgBox(262144+48, 'Error!', 'File <' & $sFileName & '> was not found')
Else
    MsgBox(262144+48, 'Error!', 'There is no section [' & $sSectName & '] in file <' & $sFileName & '>')
EndIf

Func _IniSectionExists($sIniFile, $sSectionName)
    If Not FileExists($sIniFile) Then
        Return SetError(1, 0, -1)
    EndIf

    IniReadSection($sIniFile, $sSectionName)

    If @error = 1 Then
        Return 0
    EndIf

    Return 1
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 22:48, 08-09-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


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

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


Да, почитал и понял, что неверно немного поставил задачу - записываемая и проверяемая строка не должна существовать и должна быть уникальной по имени в файле. Хотя может я что торможу...Время то позднее

Отправлено: 22:56, 08-09-2013 | #3


Аватара для Creat0R

Must AutoIt


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

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


Цитата eus_deus:
почитал и понял, что неверно немного поставил задачу - записываемая и проверяемая строка не должна существовать и должна быть уникальной по имени в файле »
Так в чём проблема, выше я дал функцию которая проверяет в файле существование ini секции, если секция не существует, то и писать не нужно.

Если речь идёт о присвоении секции нового, уникального имени, то можно сделать так:

Код: Выделить весь код
$sFileName = @DesktopDir & '\Test.ini'
$sSectName = 'Prefs'

$sUniqueSectName = _IniSectGetUniqueName($sFileName, $sSectName)
MsgBox(64, 'Title', $sUniqueSectName) ;Это и будет новое (уникальное) имя несуществующей секции

Func _IniSectGetUniqueName($sIniFile, $sSectName, $sSep = '_')
    If Not FileExists($sIniFile) Then
        Return SetError(1, 0, $sSectName)
    EndIf

    Local $iC = 0
    Local $sOrigin_SectName = $sSectName
    Local $aSectNames = IniReadSectionNames($sIniFile)

    While 1
        For $i = 1 To UBound($aSectNames)-1
            If $aSectNames[$i] = $sSectName Then
                $iC += 1
                $sSectName = $sOrigin_SectName & $sSep & $iC
                ContinueLoop 2
            EndIf
        Next

        ExitLoop
    WEnd

    Return $sSectName
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

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

Отправлено: 00:04, 09-09-2013 | #4


Старожил


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

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


Ошибся, поставив решенной. Итак, код у меня вышел такой, потом пояснения
Код: Выделить весь код
Func _prov_unik()
$TFILE=@ScriptDir&'/Setting.ini')
$s_Sect=_GUICtrlEdit_GetLine($Edit2, 0)
If $s_Sect="[Default]" Then
MsgBox(4096, "Ошибка ", "Переименуйте секцию " & $s_Sect )
Return
EndIf
$iExists = _SectionExists($TFILE, $s_Sect)
If $iExists Then
MsgBox(262144+48, 'Ошибка!', 'Секция ' & $s_Sect & ' уже есть в файле ' & $TFILE )
ElseIf $iExists = -1 Then
MsgBox(262144+48, 'Ошибка!', 'Файл' & $TFILE & ' не найден')
Else
MsgBox(262144+64, 'Error!', 'There is no section ' & $s_Sect & ' in file <' & $TFILE & '>')
EndIf
EndFunc

Func _SectionExists($TFILE, $s_Sect)
$TFILE=@ScriptDir&'/Setting.ini')
$s_Sect=_GUICtrlEdit_GetLine($Edit2, 0)
If Not FileExists($TCMFILE) Then
        Return SetError(1, 0, -1)
    EndIf
    IniReadSection($TCMFILE, $s_Sect)
    If @error = 1 Then
        Return 0
    EndIf
    Return 1
EndFunc
Собственно - задача. имя секции, которая стоит в первой строке Edit2, считывается функцией _GUICtrlEdit_GetLine($Edit2, 0). При записи нужна проверка, что секция с таким именем не существует в файле $TFILE=@ScriptDir&'/Setting.ini') и что имя секции - не [Default] (условие этого в коде есть). Понимаю, что выношу всем мозг своим тупизмом, но научится то хочется...

Отправлено: 13:47, 09-09-2013 | #5


Аватара для Creat0R

Must AutoIt


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

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


Цитата eus_deus:
имя секции - не [Default] »
В IniReadSection нужно передавать имя секции без скобок.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 14:15, 09-09-2013 | #6


Старожил


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

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


Цитата eus_deus:
$s_Sect=_GUICtrlEdit_GetLine($Edit2, 0)
If $s_Sect="[Default]" Then
MsgBox(4096, "Ошибка ", "Переименуйте секцию " & $s_Sect )
Return
EndIf »
Default не доходит до inreadsection

Отправлено: 14:27, 09-09-2013 | #7


Аватара для Creat0R

Must AutoIt


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

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


Цитата eus_deus:
Default не доходит до inreadsection »
Значит $s_Sect равняется "[Default]", в условии указан Return, который завершает функцию.

Может лучше покажешь весь (рабочий) пример, чтобы было видно где ошибка и что требуется?

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

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

Отправлено: 16:38, 09-09-2013 | #8


Старожил


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

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


Creat0R, я ответил на ваш вопрос просто относительно квадратных скобок. С default все верно, так мне и надо. Не работает остальной код
Цитата eus_deus:
Func _prov_unik()
$TFILE=@ScriptDir&'/Setting.ini')
$s_Sect=_GUICtrlEdit_GetLine($Edit2, 0)
If $s_Sect="[Default]" Then
MsgBox(4096, "Ошибка ", "Переименуйте секцию " & $s_Sect )
Return
EndIf
$iExists = _SectionExists($TFILE, $s_Sect)
If $iExists Then
MsgBox(262144+48, 'Ошибка!', 'Секция ' & $s_Sect & ' уже есть в файле ' & $TFILE )
ElseIf $iExists = -1 Then
MsgBox(262144+48, 'Ошибка!', 'Файл' & $TFILE & ' не найден')
Else
MsgBox(262144+64, 'Error!', 'There is no section ' & $s_Sect & ' in file <' & $TFILE & '>')
EndIf
EndFunc
Func _SectionExists($TFILE, $s_Sect)
$TFILE=@ScriptDir&'/Setting.ini')
$s_Sect=_GUICtrlEdit_GetLine($Edit2, 0)
If Not FileExists($TCMFILE) Then
Return SetError(1, 0, -1)
EndIf
IniReadSection($TCMFILE, $s_Sect)
If @error = 1 Then
Return 0
EndIf
Return 1
EndFunc »
Ввожу заведомо существующую секцию в текстовое поле ( просто для проверки) и получаю сообщение, что такой секции нет, а должен получать, что она есть

Отправлено: 16:45, 09-09-2013 | #9


Аватара для Creat0R

Must AutoIt


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

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


Цитата eus_deus:
Ввожу заведомо существующую секцию в текстовое поле ( просто для проверки) и получаю сообщение, что такой секции нет, а должен получать, что она есть »
Сообщает что нету потому что её нету.
Нужно проверять без скобок:
Код: Выделить весь код
$iExists = _SectionExists($TFILE, StringRegExpReplace($s_Sect, '^\[|\]$', ''))
И вообще, не понятно что содержится в $Edit2, поэтому и написал...
Цитата Creat0R:
Может лучше покажешь весь (рабочий) пример »

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

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

Отправлено: 17:29, 09-09-2013 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Проверка существования секции в файле ini

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Проверка существования файла vilSK Скриптовые языки администрирования Windows 10 23-05-2013 12:40
Разное - в файле desktop.ini на флешке в этом файле написано... imrik Microsoft Windows 2000/XP 1 17-03-2012 00:58
VBS/WSH/JS - Проверка существования файла admin-nsk Скриптовые языки администрирования Windows 3 13-10-2010 12:25
WMI filter проверка существования файла farlow Microsoft Windows NT/2000/2003 1 30-08-2007 09:17
xsl проверка существования тега в xml FADE Вебмастеру 3 23-04-2007 11:29




 
Переход