<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Переменная секции]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=15321</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=15321&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Переменная секции».]]></description>
		<lastBuildDate>Sat, 25 Apr 2020 12:58:05 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Переменная секции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=139169#p139169</link>
			<description><![CDATA[<p>Global INIFILE := &quot;путь к файлу в кавычках&quot;</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sat, 25 Apr 2020 12:58:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=139169#p139169</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Переменная секции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=139168#p139168</link>
			<description><![CDATA[<p><strong>serzh82saratov</strong>, как его в инифайлу привязать <img src="//forum.script-coding.com/img/smilies/big_smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (Garaxe)]]></author>
			<pubDate>Sat, 25 Apr 2020 12:55:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=139168#p139168</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Переменная секции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=139167#p139167</link>
			<description><![CDATA[<p><strong>serzh82saratov</strong>, вот да, абсолютно то что нужно было! Спасибо)</p>]]></description>
			<author><![CDATA[null@example.com (Garaxe)]]></author>
			<pubDate>Sat, 25 Apr 2020 12:36:15 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=139167#p139167</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Переменная секции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=139165#p139165</link>
			<description><![CDATA[<div class="quotebox"><cite>Garaxe пишет:</cite><blockquote><p>podname&#039;ы должны быть статичны их должно быть 4 штуки и все не больше, не меньше</p></blockquote></div><p>Тогда так проще.<br /></p><div class="codebox"><pre><code>
/* 
[Acc1]
Login=1
Password=2
Email=4
PassEmail=8
[Acc2]
Login=3
Password=4
Email=1
PassEmail=5
[Acc3]
Login=44
Password=33
Email=1
PassEmail=23
[] 
*/

Global INIFILE := A_ScriptFullPath

IniRead, sectNames, %INIFILE% 

Gui, Show, w479 h379, Untitled GUI
Gui, Add, DropDownList, x142 y49 w170 h50 r10 Choose1 vvSection ggSelectSect, % StrReplace(sectNames, &quot;`n&quot;, &quot;|&quot;)
Gui, Add, Edit, x142 y119 w170 h20 vvEdit , % IniRead(&quot;Acc1&quot;, &quot;Login&quot;)
Gui, Add, Edit, x142 y159 w170 h20 vvEdit1 , % IniRead(&quot;Acc1&quot;, &quot;Password&quot;)
Gui, Add, Edit, x142 y199 w170 h20 vvEdit2, % IniRead(&quot;Acc1&quot;, &quot;Email&quot;)
Gui, Add, Edit, x142 y239 w170 h20 vvEdit3, % IniRead(&quot;Acc1&quot;, &quot;passemail&quot;)
Gui, Add, Button, x182 y299 w90 h30 , Button
return
 
GuiClose:
	ExitApp
 
gSelectSect:
	GuiControlGet, vSection
	GuiControl, ,vEdit, % IniRead(vSection, &quot;Login&quot;)
	GuiControl, ,vEdit1, % IniRead(vSection, &quot;Password&quot;)
	GuiControl, ,vEdit2, % IniRead(vSection, &quot;Email&quot;)
	GuiControl, ,vEdit3, % IniRead(vSection, &quot;passemail&quot;)
	return

IniRead(Section, Key, Error := &quot; &quot;) {
	IniRead, Value, %IniFile%, %Section%, %Key%, %Error%
	If (Value = &quot;&quot; &amp;&amp; Error != &quot; &quot;)
		Value := Error
	Return Value
}
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sat, 25 Apr 2020 12:24:18 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=139165#p139165</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Переменная секции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=139164#p139164</link>
			<description><![CDATA[<div class="codebox"><pre><code>
/*
iniContent =
(
[Acc1]
Login=1
Password=2
Email=4
PassEmail=8
[Acc2]
Login=3
Password=4
Email=1
PassEmail=5
[Acc3]
Login=44
Password=33
Email=1
PassEmail=23
[]
)
FileDelete,logpass.ini
FileAppend,% iniContent,logpass.ini
*/

INIFILE := A_ScriptFullPath

IniRead, sectNames, %INIFILE% 
 
Gui, Show, w479 h379, Untitled GUI
Gui, Add, DropDownList, x142 y49 w170 h50 r10 Choose1 vvSection ggSelectSect, % &quot;|&quot; StrReplace(sectNames, &quot;`n&quot;, &quot;|&quot;)
Gui, Add, Edit, x142 y119 w170 h20 vvEdit , Edit
Gui, Add, Edit, x142 y159 w170 h20 vvEdit1 , Edit
Gui, Add, Edit, x142 y199 w170 h20 vvEdit2, Edit
Gui, Add, Edit, x142 y239 w170 h20 vvEdit3, Edit
Gui, Add, Button, x182 y299 w90 h30 , Button
return
 
GuiClose:
	ExitApp
 
gSelectSect:
	Gui Submit, NoHide 
	IniRead, login, %INIFILE%,% vSection , Login
	IniRead, pass, %INIFILE%,% vSection, Password
	IniRead, email, %INIFILE%,% vSection, Email
	IniRead, passemail, %INIFILE%,% vSection, PassEmail
	GuiControl,,vEdit, %login%
	GuiControl,,vEdit1, %pass%
	GuiControl,,vEdit2,%email%
	GuiControl,,vEdit3,%passemail%
	return
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sat, 25 Apr 2020 12:18:32 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=139164#p139164</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Переменная секции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=139163#p139163</link>
			<description><![CDATA[<p><strong>KusochekDobra</strong>, это слишком сложно, я слишком дно в программировании, так чуть чуть могу) А насчет скрипта выше, podname&#039;ы должны быть статичны их должно быть 4 штуки и все не больше, не меньше, а так в принципе работает как надо ) Еще раз спасибо за помощь</p>]]></description>
			<author><![CDATA[null@example.com (Garaxe)]]></author>
			<pubDate>Sat, 25 Apr 2020 12:10:48 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=139163#p139163</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Переменная секции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=139158#p139158</link>
			<description><![CDATA[<p>В таком варианте будет читать сколько угодно секций и с любыми названиями, а так же с любыми именами полей в секциях:<br /></p><div class="codebox"><pre><code>#NoEnv
#SingleInstance, Force
OnExit, BeforeExit

INI := &quot;Config.ini&quot;
if (!FileExist(INI)) {
	GoSub, DefaultINI
	FileAppend,% iniContent,% INI,UTF-16
}

oINI           := {}
ini_is_changed := false
field_width    := 300
drop_down_list := &quot;&quot;

iniContent := DumpINI(INI)

For i, block in MatchAll(iniContent, &quot;\[[\p{L}\d]+\]&quot;) {
	block_name := RegExReplace(block, &quot;s)\[([\p{L}\d]+)\].*&quot;, &quot;$1&quot;)
	drop_down_list .= block_name . (i != 1 ? &quot;|&quot; : &quot;||&quot;)
	first_name := !first_name ? block_name : first_name
	oINI[ block_name ] := {}
	For index, line in MatchOnly(block, &quot;([\p{L}\d]+=.*)&quot;) {
		RegExMatch(line, &quot;([\p{L}\d]+)=(.*)&quot;, m)
		oINI[ block_name ][ m1 ] := m2
	}
}

Gui, 1: Add, DropDownList, w%field_width% v_ddl_selected gDDL_Selected,% drop_down_list
For i, data in oINI[ first_name ]
	Gui, 1: Add, Edit,% Format(&quot;v_edit{} w{}&quot;, A_Index, field_width),% data
Gui, 1: Add, Button, w%field_width% gSaveMe, Save me
Gui, 1: Show
	
Return

MatchAll(str, reg_ex) {
	arr := [], p1 := p2 := 1, match := &quot;&quot;
	While (p2 := RegExMatch(str, reg_ex, match, p2 + StrLen(match))) {
		(A_Index &gt; 1 &amp;&amp; arr.Push( SubStr(str, p1, p2 - p1) ))
		p1 := p2
	} arr.Push( SubStr(str, p1, StrLen(str)) )
	return arr
}
MatchOnly(str, reg_ex) {
	p := 1, m := &quot;&quot;, s := []
	While p := RegexMatch(str, reg_ex, m, p + StrLen(m))
		s.Push( m1 )
	return s
}
DumpINI(INI_path, data := &quot;&quot;) {
	if (!data) {
		oFile := FileOpen(INI_path, &quot;r&quot;, &quot;utf-8&quot;)
		iniContent := oFile.Read()
		oFile.Close()
		return iniContent
	}
	oFile := FileOpen(INI_path, &quot;w&quot;, &quot;utf-16&quot;)
	oFile.Write(DataToINI(data))
	oFile.Close()
}
DataToINI(data) {
	str := &quot;&quot;
	For block_name, block_data in data {
		str .= Format(&quot;[{}]`r`n&quot;, block_name)
		For line_name, line_data in block_data
			str .= Format(&quot;{}={}`r`n&quot;, line_name, line_data)
	} return str
}

DDL_Selected:
	Gui, 1: Submit, NoHide
	For k, data in oINI[ _ddl_selected ]
		GuiControl, Text, _edit%A_Index%,% data
Return
SaveMe:
	Gui, 1: Submit, NoHide
	For k in oINI[ _ddl_selected ]
		oINI[ _ddl_selected ][ k ] := _edit%A_Index%
	ini_is_changed := true
Return

DefaultINI:
iniContent =
(
[name1]
podname1=Норма1
podname2=Гол1
podname3=привет1
podname4=как дела1
[name2]
podname1=Норма2
podname2=Гол2
podname3=привет2
podname4=как дела2
[name3]
podname1=Норма3
podname2=Гол3
podname3=привет3
podname4=как дела3
[name4]
podname1=Норма4
podname2=Гол4
podname3=привет4
podname4=как дела4
)
Return
BeforeExit:
	if (ini_is_changed)
		DumpINI(INI, oINI)
	
	if (A_ExitReason) {
		ExitApp
	}
return
GuiClose:
	ExitApp</code></pre></div><p>Но я сильно сомневаюсь, что для хранения тут нужен &quot;*.ini&quot;, раз стандартные способы обращения к нему тут вообще не используются. Гораздо проще было бы хранить данные в формате <a href="https://www.json.org/json-en.html">JSON</a> и обращаться к нему используя удобства, например, вот <a href="http://forum.script-coding.com/viewtopic.php?id=14437">этого класса</a>.</p><p>На старте сценария, данные из INI читаются как строка и преобразуются из формата данных INI в &quot;объект&quot;, а при сохранении, обратно в формат данных INI и затем записываются в файл. JSON — изначально хранит данные в формате &quot;объекта&quot;, так, что их преобразование подразумевает лишь интерпретацию для AHK. Да, за этим преобразованием тоже стоит парсер, но он уже описан и Вам не нужно сочинять новый велосипед. Просто берёте и пользуетесь.</p><p>Стильно, модно, современно. Поэкспериментируйте.</p>]]></description>
			<author><![CDATA[null@example.com (KusochekDobra)]]></author>
			<pubDate>Sat, 25 Apr 2020 08:12:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=139158#p139158</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Переменная секции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=139151#p139151</link>
			<description><![CDATA[<p><strong>KusochekDobra</strong>, в том скрипте который я прикрепил, можно сколько угодно дописать в ини файл секций они они все отоброзяться в дроплисте, но при переключении дроплиста , едит берет только параметры последней секции вот в этом что то не так)</p>]]></description>
			<author><![CDATA[null@example.com (Garaxe)]]></author>
			<pubDate>Sat, 25 Apr 2020 01:25:19 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=139151#p139151</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Переменная секции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=139139#p139139</link>
			<description><![CDATA[<p><strong>KusochekDobra</strong>, не совсем, он должен считывать секции из ини файла отоброжать их в Dropdownlist, то есть так что б можно было создавать неограниченное количество секций с разными названиями , он их считывал и на их основе делал&nbsp; Dropdownlist, и когда уже в интерфейсе выбираешь определенную секцию из&nbsp; Dropdownlist, он менял значение Edit на параметры выбранной секции, но все равно спасибо )</p>]]></description>
			<author><![CDATA[null@example.com (Garaxe)]]></author>
			<pubDate>Fri, 24 Apr 2020 21:35:45 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=139139#p139139</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Переменная секции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=139134#p139134</link>
			<description><![CDATA[<p>Как-то всё сложно и не совсем понятно. Название темы говорит об одном, а постановка задачи о другом. Ожидается такое поведение?<br /></p><div class="codebox"><pre><code>#NoEnv
#SingleInstance, Force

INI := &quot;Config.ini&quot;
if (!FileExist(INI)) {
	GoSub, DefaultINI
	FileAppend,% iniContent,% INI,UTF-16
}

oINI           := {}
name_count     := 4
podname_count  := 4
field_width    := 300
drop_down_list := &quot;&quot;

Loop,% name_count {
	name := &quot;name&quot; . A_Index
	drop_down_list .= name . (A_Index != 1 ? &quot;|&quot; : &quot;||&quot;)
	oINI[name] := {}
	
	Loop,% podname_count {
		podname := &quot;podname&quot; . A_Index
		IniRead, podname_var,% INI,% name,% podname
		oINI[name][podname] := podname_var
	}
}
Gui, 1: Add, DropDownList, w%field_width% v_ddl_selected gDDL_Selected,% drop_down_list
Loop,% podname_count
	Gui, 1: Add, Edit,% Format(&quot;v_edit{} w{}&quot;, A_Index, field_width),% oINI[ &quot;name1&quot; ][ &quot;podname&quot; . A_Index ]
Gui, 1: Show
	
Return

DDL_Selected:
	Gui, 1: Submit, NoHide
	Loop,% podname_count
		GuiControl, Text, _edit%A_Index%,% oINI[ _ddl_selected ][ &quot;podname&quot; . A_Index ]
Return


DefaultINI:
iniContent =
(
[name1]
podname1=Норма1
podname2=Гол1
podname3=привет1
podname4=как дела1
[name2]
podname1=Норма2
podname2=Гол2
podname3=привет2
podname4=как дела2
[name3]
podname1=Норма3
podname2=Гол3
podname3=привет3
podname4=как дела3
[name4]
podname1=Норма4
podname2=Гол4
podname3=привет4
podname4=как дела4
)
Return

GuiClose:
	ExitApp</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (KusochekDobra)]]></author>
			<pubDate>Fri, 24 Apr 2020 20:45:54 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=139134#p139134</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Переменная секции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=139130#p139130</link>
			<description><![CDATA[<p>Как правильно задать переменную секции в 44-47 строке? помогите пожалуйста.<br /></p><div class="codebox"><pre><code>/*
iniContent:=
(
&quot;[Acc1]
Login=1
Password=2
Email=4
PassEmail=8
[Acc2]
Login=3
Password=4
Email=1
PassEmail=5
[Acc3]
Login=44
Password=33
Email=1
PassEmail=23&quot;
)
FileDelete,logpass.ini
FileAppend,% iniContent,logpass.ini
*/
IniRead,sectNames,logpass.ini
for a,b in oSectNames:=StrSplit(sectNames,&quot;`n&quot;,&quot;`r&quot;)
{
    IniRead,Section,logpass.ini,% b
    ddl.=b &quot;|&quot;
}
 
Gui, Show, w479 h379, Untitled GUI
Gui, Add, DropDownList, x142 y49 w170 h50 r10 Choose1 vvSection ggSelectSect, % SubStr(ddl,1,-1)
Gui, Add, Edit, x142 y119 w170 h20 vvEdit , Edit
Gui, Add, Edit, x142 y159 w170 h20 vvEdit1 , Edit
Gui, Add, Edit, x142 y199 w170 h20 vvEdit2, Edit
Gui, Add, Edit, x142 y239 w170 h20 vvEdit3, Edit
Gui, Add, Button, x182 y299 w90 h30 , Button
return
 
GuiClose:
ExitApp
 
gSelectSect:
Gui Submit, NoHide
IniRead, login, logpass.ini,% b , Login
IniRead, pass, logpass.ini,% b, Password
IniRead, email, logpass.ini,% b, Email
IniRead, passemail, logpass.ini,% b, PassEmail
GuiControl,,vEdit, %login%
GuiControl,,vEdit1, %pass%
GuiControl,,vEdit2,%email%
GuiControl,,vEdit3,%passemail%
return</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Garaxe)]]></author>
			<pubDate>Fri, 24 Apr 2020 11:51:06 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=139130#p139130</guid>
		</item>
	</channel>
</rss>
