<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Обсуждение Ini file object]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=14890&amp;type=atom" />
	<updated>2019-08-03T12:49:28Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=14890</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обсуждение Ini file object]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=135216#p135216" />
			<content type="html"><![CDATA[<p>Думаю, что на несетевом в 99.99% это всё не будет иметь смысла - например, у меня txt файл 500mb открывается через fileread за 0.7 секунд.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2019-08-03T12:49:28Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=135216#p135216</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обсуждение Ini file object]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=135215#p135215" />
			<content type="html"><![CDATA[<p>Почему именно на сетевом?</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2019-08-03T12:42:41Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=135215#p135215</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обсуждение Ini file object]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=135214#p135214" />
			<content type="html"><![CDATA[<p>То есть я имею в виду - замерить скорость работы с базой данных на сетевом файле:<br />1) используя страничный кеш (как сейчас)<br />2) через filemapping<br />3) через filemapping + используя кеш хинты (FILE_FLAG_RANDOM_ACCESS, FILE_FLAG_SEQUENTIAL_SCAN, FILE_FLAG_WRITE_THROUGH, FILE_ATTRIBUTE_TEMPORARY)<br />4) через filemapping + FILE_FLAG_NO_BUFFERING</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2019-08-03T11:37:27Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=135214#p135214</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обсуждение Ini file object]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=135213#p135213" />
			<content type="html"><![CDATA[<p>Не знаю, надо проверять.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2019-08-03T10:45:28Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=135213#p135213</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обсуждение Ini file object]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=135212#p135212" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Malcev пишет:</cite><blockquote><p>Для прочтения каждой секции нужно каждый раз обращаться к файлу - а ты ж как-раз этого хотел избежать.</p></blockquote></div><p>А, ну да. Значит GetPrivateProfile больше рассматриваем.<br /></p><div class="quotebox"><cite>Malcev пишет:</cite><blockquote><p>У тебя и так всё кешируется, так как не указан флаг FILE_FLAG_NO_BUFFERING</p></blockquote></div><p>О как, то есть FileOpen сначала копирует весь файл в кеш? И есть смысл этого избегать?</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2019-08-03T10:07:28Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=135212#p135212</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обсуждение Ini file object]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=135211#p135211" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>тогда причём тут одна секция?</p></blockquote></div><p>Для прочтения каждой секции нужно каждый раз обращаться к файлу - а ты ж как-раз этого хотел избежать.<br /></p><div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>что даёт страничный кеш в данной задаче</p></blockquote></div><p>Не совсем тебя понял. У тебя и так всё кешируется, так как не указан флаг FILE_FLAG_NO_BUFFERING.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2019-08-03T09:51:54Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=135211#p135211</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обсуждение Ini file object]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=135210#p135210" />
			<content type="html"><![CDATA[<p>Вот, если перекодировать.<br />Но GetPrivateProfileSection режет пробелы, и это уже нельзя реализовать.<br /></p><div class="codebox"><pre><code>Ini := new IniFile(A_ScriptDir &quot;\Settings.Ini&quot;)
Ini.Write(&quot;MySection&quot;, &quot;MyKey1&quot;, &quot; a &quot;)
MsgBox % &quot;&quot;&quot;&quot; Ini.Read(&quot;MySection&quot;, &quot;MyKey1&quot;) &quot;&quot;&quot;&quot;
Ini.Save()

Ini := new IniFile(A_ScriptDir &quot;\Settings.Ini&quot;)
MsgBox % &quot;&quot;&quot;&quot; Ini.Read(&quot;MySection&quot;, &quot;MyKey1&quot;) &quot;&quot;&quot;&quot;</code></pre></div><p>Также в планах было оставлять комментарии, а их GetPrivateProfile не прочитает.<br /></p><div class="codebox"><pre><code>
Class IniFile {
	__New(File, FileBackUp = &quot;&quot;) {
		this.Path := File
		this.FileBackUp := FileBackUp
		
		IniRead, SectionNames, % File
		Loop, Parse, SectionNames, `n, `r
		{
			this.Data[SectionName := this._StrUtf8BytesToText(A_LoopField)] := {} 
			IniRead, Section, % File, % A_LoopField  
			Loop, Parse, % this._StrUtf8BytesToText(Section), `n, `r
			{
				i := InStr(A_LoopField, &quot;=&quot;) 
				this.Data[SectionName, SubStr(A_LoopField, 1, i - 1)] := SubStr(A_LoopField, i + 1)
			} 
		}
	}
	Read(Section, Key, Default = &quot;&quot;) {
		If (Default != &quot;&quot; &amp;&amp; !this.Data[Section].HasKey(Key))
			Return Default
		Return this.Data[Section][Key]
	}
	Write(Section, Key, Value = &quot;&quot;) {
		If !IsObject(this.Data[Section])
			this.Data[Section] := {}
		this._CheckChanged()
		Return this.Data[Section][Key] := Value
	}
	Delete(Section, Key) {
		this._CheckChanged()
		Return this.Data[Section].Delete(Key)
	}
	DeleteSection(Section) {
		this._CheckChanged()
		Return this.Data.Delete(Section)
	}
	_CheckChanged() {
		If !this.changed
			this.changed := 1 
	}
	Save() {
		If !this.changed
			Return
		For Section, Keys in this.Data
		{ 
			Str .= &quot;[&quot; Section &quot;]`n&quot;
			For Key, Value in Keys
				Str .= Key &quot;=&quot; Value &quot;`n&quot;
		}
		If this.FileBackUp
			FileCopy, % this.Path, % this.FileBackUp, 1
		
		oFile := FileOpen(this.Path, &quot;w&quot;, &quot;UTF-8&quot;)
		oFile.Length := 0
		oFile.Write(Str)
		oFile.Close()
	}
	_StrUtf8BytesToText(vUtf8)  ;	https://www.autohotkey.com/boards/viewtopic.php?f=6&amp;t=38511
	{
		if A_IsUnicode
		{
			VarSetCapacity(vUtf8X, StrPut(vUtf8, &quot;CP0&quot;))
			StrPut(vUtf8, &amp;vUtf8X, &quot;CP0&quot;)
			return StrGet(&amp;vUtf8X, &quot;UTF-8&quot;)
		}
		else
			return StrGet(&amp;vUtf8, &quot;UTF-8&quot;)
	}
}
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2019-08-03T09:47:24Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=135210#p135210</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обсуждение Ini file object]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=135209#p135209" />
			<content type="html"><![CDATA[<p><a href="https://www.autohotkey.com/boards/viewtopic.php?f=6&amp;t=38511">https://www.autohotkey.com/boards/viewt … mp;t=38511</a></p><p>Получается или преобразовать файл в UTF-16, сделав его размер раза в полтора - два больше, или перекодировать все данные. Не поймёшь что правильнее и надёжнее.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2019-08-03T08:50:54Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=135209#p135209</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обсуждение Ini file object]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=135208#p135208" />
			<content type="html"><![CDATA[<p>Я про Unicode только не понял в справке по IniRead.<br /></p><div class="quotebox"><blockquote><p>Unicode: IniRead and IniWrite rely on the external functions GetPrivateProfileString¬ and WritePrivateProfileString¬ to read and write values. These functions support Unicode only in UTF-16 files; all other files are assumed to use the system&#039;s default ANSI code page.</p></blockquote></div><div class="codebox"><pre><code>
Filename := A_ScriptDir &quot;\Settings.Ini&quot;

IniRead, OutputVarSectionNames, % Filename
MsgBox % OutputVarSectionNames
Loop, Parse, OutputVarSectionNames, `n, `r
{
	IniRead, OutputVarSection, % Filename, % A_LoopField
	MsgBox, , % A_LoopField, % OutputVarSection
}
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2019-08-03T08:13:07Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=135208#p135208</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обсуждение Ini file object]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=135207#p135207" />
			<content type="html"><![CDATA[<p>А, кажется понял тебя&nbsp; - GetPrivateProfileSectionNames и GetPrivateProfileSection, тогда причём тут одна секция?</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2019-08-03T07:40:26Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=135207#p135207</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обсуждение Ini file object]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=135206#p135206" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Malcev пишет:</cite><blockquote><p>Тогда можно для ini с одной секцией избавиться от парсинга регулярными выражениями.</p></blockquote></div><p>А как создать массив без regex?</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2019-08-03T07:34:54Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=135206#p135206</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обсуждение Ini file object]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=135205#p135205" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Malcev пишет:</cite><blockquote><p>Баг:</p></blockquote></div><p>Поправил.</p><p>Почитал ещё раз, так и не пойму что даёт страничный кеш в данной задаче.<br />Файл всё равно надо загрузить весь в ОП.<br />Плюс только в том что при закрытии программы файл вероятнее всего останется в кеше, и его не надо будет загружать снова?<br />Но если оперативки 8 гигов, а как тут говорилось файл будет в 9 гигов, то его всё равно весь не загрузишь, придётся периодически ждать жёсткий диск.<br />У меня в примере такой файл конечно мы и прочитать то не сможем, но можно сделать чтение порциями. И хоть так, хоть по другому, всё равно не хватит памяти создать массив секций с ключами.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2019-08-03T07:21:52Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=135205#p135205</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обсуждение Ini file object]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=135203#p135203" />
			<content type="html"><![CDATA[<p>Тогда можно для ini с одной секцией избавиться от парсинга регулярными выражениями.</p><p>Баг:<br /></p><div class="codebox"><pre><code>Ini := new IniFile(A_ScriptDir &quot;\Settings.Ini&quot;)
Ini.Write(&quot;MySection&quot;, &quot;MyKey1&quot;, &quot; a &quot;)
MsgBox % &quot;&quot;&quot;&quot; Ini.Read(&quot;MySection&quot;, &quot;MyKey1&quot;) &quot;&quot;&quot;&quot;
Ini.Save()

Ini := new IniFile(A_ScriptDir &quot;\Settings.Ini&quot;)
MsgBox % &quot;&quot;&quot;&quot; Ini.Read(&quot;MySection&quot;, &quot;MyKey1&quot;) &quot;&quot;&quot;&quot;</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2019-08-03T01:10:08Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=135203#p135203</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обсуждение Ini file object]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=135202#p135202" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Malcev пишет:</cite><blockquote><p>за один раз это можно сделать с помощью iniwrite</p></blockquote></div><p>Не всегда известно, что текущее изменение будет последним.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2019-08-03T00:55:48Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=135202#p135202</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обсуждение Ini file object]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=135201#p135201" />
			<content type="html"><![CDATA[<p>Так если у нас только одна секция, то за один раз это можно сделать с помощью iniwrite.<br />Кстати, понял почему я не знал про пары - в русской справке про них ни слова. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2019-08-03T00:52:43Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=135201#p135201</id>
		</entry>
</feed>
