<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Сохранение Массива в файл]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=12474&amp;type=atom" />
	<updated>2018-08-01T21:12:19Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=12474</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сохранение Массива в файл]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=127657#p127657" />
			<content type="html"><![CDATA[<p>Хотел было глупость написать, что, если JSON пользуют для передачи данных, то он должен по идее так себя и вести, но, действительно в &quot;тру-js&quot; - сохраняются все табы и пробелы:<br /></p><div class="codebox"><pre><code>console.log(JSON.stringify({empty5Space: &#039;   5  &#039;, empty5Tab: &#039;			5		&#039;}))</code></pre></div><p>И я ещё донышко-постигающее, так что сильно палками не бейте, коллеги! Какие-то моменты мне пока не ведомы. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />Спасибо за ваше компетентное участие!</p>]]></content>
			<author>
				<name><![CDATA[KusochekDobra]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=33846</uri>
			</author>
			<updated>2018-08-01T21:12:19Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=127657#p127657</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сохранение Массива в файл]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=127642#p127642" />
			<content type="html"><![CDATA[<p>Пробелы тоже думаю, надо сохранять, пусть пользователь решает, нужны они, или нет.<br /></p><div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>А если ноль?</p></blockquote></div><p>Да, нужно на пустоту проверять, уже исправил у себя.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2018-08-01T17:08:53Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=127642#p127642</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сохранение Массива в файл]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=127641#p127641" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>KusochekDobra пишет:</cite><blockquote><p>если в ней нет хотя-бы одного словесного символа, или символа окончания, или новой строки</p></blockquote></div><p>С ними вроде математика и так пусто вернёт. Только пробелы и табы не влияет на математику. Но думаю obj ~= &quot;\s&quot; самое то.<br /></p><div class="quotebox"><cite>KusochekDobra пишет:</cite><blockquote><p>ПЕРЕД и ЗА которыми ничего не следует - просто обрезаются в любых количествах, так как их присутствие не нагружает запись смыслом.</p></blockquote></div><p>А это зачем? Если они туда зачем то попали, значит это надо было, и это строка, а строки надо бы сохранять в оригинале.<br /></p><div class="quotebox"><blockquote><p>obj*1</p></blockquote></div><p>А если ноль?</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2018-08-01T17:05:14Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=127641#p127641</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сохранение Массива в файл]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=127629#p127629" />
			<content type="html"><![CDATA[<p>Да, как-то так можно. Попозже могу выложить.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2018-08-01T11:53:21Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=127629#p127629</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сохранение Массива в файл]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=127627#p127627" />
			<content type="html"><![CDATA[<p>Тогда нужно учитывать, что любая запись шестнадцатеричного вида будет восприниматься как число, приводимое к десятичному виду, если в ней нет хотя-бы одного словесного символа, или символа окончания, или новой строки, а пробелы и табы ПЕРЕД и ЗА которыми ничего не следует - просто обрезаются в любых количествах, так как их присутствие не нагружает запись смыслом.</p>]]></content>
			<author>
				<name><![CDATA[KusochekDobra]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=33846</uri>
			</author>
			<updated>2018-08-01T11:46:22Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=127627#p127627</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сохранение Массива в файл]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=127625#p127625" />
			<content type="html"><![CDATA[<p>Можно, но не все проблемы решает:<br /></p><div class="codebox"><pre><code>obj := [&quot;0xFF	&quot;]
MsgBox, % str := JSON.Stringify(obj)
obj2 := JSON.Parse(str)

for k, v in obj2
   MsgBox, % &quot;|&quot; . v . &quot;|&quot;

obj := [&quot;0xFF&quot;]
MsgBox, % str := JSON.Stringify(obj)
obj2 := JSON.Parse(str)

for k, v in obj2
   MsgBox, % &quot;|&quot; . v . &quot;|&quot;

class JSON
{
   static JS := JSON._GetJScripObject()
   
   Parse(JsonString)  {
      try oJSON := this.JS.(&quot;(&quot; JsonString &quot;)&quot;)
      catch  {
         MsgBox, Wrong JsonString!
         Return
      }
      Return this._CreateObject(oJSON)
   }
   
   Stringify(obj)  {
      if IsObject( obj )  {
         isArray := true
         for key in obj
            if !( key = A_Index || isArray := false )
               break
            
         for k, v in obj
            str .= ( A_Index = 1 ? &quot;&quot; : &quot;,&quot; ) . ( isArray ? &quot;&quot; : this.Stringify(k) . &quot;:&quot; ) . this.Stringify(v)

         return isArray ? &quot;[&quot; str &quot;]&quot; : &quot;{&quot; str &quot;}&quot;
      }
      else if (obj*1 &amp;&amp; !RegExMatch(obj, &quot;\s&quot;))
         return obj
      
      for k, v in [[&quot;\&quot;, &quot;\\&quot;], [A_Tab, &quot;\t&quot;], [&quot;&quot;&quot;&quot;, &quot;\&quot;&quot;&quot;], [&quot;/&quot;, &quot;\/&quot;], [&quot;`n&quot;, &quot;\n&quot;], [&quot;`r&quot;, &quot;\r&quot;], [Chr(12), &quot;\f&quot;], [Chr(08), &quot;\b&quot;]]
         obj := StrReplace( obj, v[1], v[2] )
      
      while RegexMatch( obj, &quot;[^\x20-\x7e]&quot;, key )  {
         str := Asc( key )
         val := &quot;\u&quot; . Chr( ( ( str &gt;&gt; 12 ) &amp; 15 ) + ( ( ( str &gt;&gt; 12 ) &amp; 15 ) &lt; 10 ? 48 : 55 ) )
               . Chr( ( ( str &gt;&gt; 8 ) &amp; 15 ) + ( ( ( str &gt;&gt; 8 ) &amp; 15 ) &lt; 10 ? 48 : 55 ) )
               . Chr( ( ( str &gt;&gt; 4 ) &amp; 15 ) + ( ( ( str &gt;&gt; 4 ) &amp; 15 ) &lt; 10 ? 48 : 55 ) )
               . Chr( ( str &amp; 15 ) + ( ( str &amp; 15 ) &lt; 10 ? 48 : 55 ) )
         obj := StrReplace(obj, key, val)
      }
      Return &quot;&quot;&quot;&quot; obj &quot;&quot;&quot;&quot;
   }
   
   GetFromUrl(url, body := &quot;&quot;, contentType := &quot;&quot;, userAgent := &quot;&quot;)  {
      ; в случае удачи будет возвращена строка, в случае ошибки — массив с одним элементом-строкой с описанием ошибки
      try  {
         XmlHttp := ComObjCreate(&quot;Microsoft.XmlHttp&quot;)
         XmlHttp.Open(&quot;GET&quot;, url, false)
         ( contentType &amp;&amp; XmlHttp.SetRequestHeader(&quot;Content-Type&quot;, contentType) )
         ( userAgent &amp;&amp; XmlHttp.SetRequestHeader(&quot;User-Agent&quot;, userAgent) )
         XmlHttp.Send(body)
      }
      catch e
         Return [&quot;Error!`n&quot; . e.Message]
      status := XmlHttp.Status
      Return status = 200 ? XmlHttp.ResponseText : [&quot;Error! Status: &quot; . status . &quot;, ResponseText: &quot; . XmlHttp.ResponseText]
   }

   _GetJScripObject()  {
      VarSetCapacity(tmpFile, ((MAX_PATH := 260) - 14) &lt;&lt; !!A_IsUnicode, 0)
      DllCall(&quot;GetTempFileName&quot;, Str, A_Temp, Str, &quot;AHK&quot;, UInt, 0, Str, tmpFile)
      
      FileAppend,
      (
      &lt;component&gt;
      &lt;public&gt;&lt;method name=&#039;eval&#039;/&gt;&lt;/public&gt;
      &lt;script language=&#039;JScript&#039;&gt;&lt;/script&gt;
      &lt;/component&gt;
      ), % tmpFile
      
      JS := ObjBindMethod( ComObjGet(&quot;script:&quot; . tmpFile), &quot;eval&quot; )
      FileDelete, % tmpFile
      JSON._AddMethods(JS)
      Return JS
   }

   _AddMethods(ByRef JS)  {
      JScript =
      (
         Object.prototype.GetKeys = function () {
            var keys = []
            for (var k in this)
               if (this.hasOwnProperty(k))
                  keys.push(k)
            return keys
         }
         Object.prototype.IsArray = function () {
            var toStandardString = {}.toString
            return toStandardString.call(this) == &#039;[object Array]&#039;
         }
      )
      JS.(&quot;delete ActiveXObject; delete GetObject;&quot;)
      JS.(JScript)
   }

   _CreateObject(ObjJS)  {
      res := ObjJS.IsArray()
      if (res = &quot;&quot;)
         Return ObjJS
      
      else if (res = -1)  {
         obj := []
         Loop % ObjJS.length
            obj[A_Index] := this._CreateObject(ObjJS[A_Index - 1])
      }
      else if (res = 0)  {
         obj := {}
         keys := ObjJS.GetKeys()
         Loop % keys.length
            k := keys[A_Index - 1], obj[k] := this._CreateObject(ObjJS[k])
      }
      Return obj
   }
}</code></pre></div><p>AutoHotkey не может наверняка отличить строку от числа. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2018-08-01T10:34:40Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=127625#p127625</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сохранение Массива в файл]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=127624#p127624" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>пропуски ключей не поддерживаются.</p></blockquote></div><p>Да, я думал что просто 1 и 2 равно пусто, но нет.<br /></p><div class="codebox"><pre><code>obj := [,,&quot;value&quot;]
MsgBox % obj.haskey(1)</code></pre></div><div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>особенность восприятия AHK числовых и строчных значений.</p></blockquote></div><p>Так это вроде легко починить, после арифметики надо проверить пробел и табуляцию.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2018-08-01T10:22:18Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=127624#p127624</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сохранение Массива в файл]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=127623#p127623" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>А это нельзя учесть в коде?</p></blockquote></div><p>И что должно быть в результате? В массивах array в JScript пропуски ключей не поддерживаются.<br /></p><div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>А почему не всегда?</p></blockquote></div><p>По той же причине, что и<br /></p><div class="codebox"><pre><code>obj := [&quot;0xFF   &quot;]
MsgBox, % obj[1]*1</code></pre></div><p>Скажем так, особенность восприятия AHK числовых и строчных значений.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2018-08-01T10:06:09Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=127623#p127623</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сохранение Массива в файл]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=127622#p127622" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Заполни все ключи</p></blockquote></div><p>А это нельзя учесть в коде?<br /></p><div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Ну да, в JScript они так обозначаются</p></blockquote></div><p>А почему не всегда?<br /></p><div class="codebox"><pre><code>
obj := [&quot;0xFF	&quot;]
MsgBox, % JSON.Stringify(obj)
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2018-08-01T09:53:53Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=127622#p127622</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сохранение Массива в файл]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=127621#p127621" />
			<content type="html"><![CDATA[<p>Почему нет? Заполни все ключи, и будет &quot;простой&quot; массив.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2018-08-01T09:44:10Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=127621#p127621</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сохранение Массива в файл]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=127620#p127620" />
			<content type="html"><![CDATA[<p>А в JSON нет простых массивов?<br /></p><div class="codebox"><pre><code>
obj := [,,&quot;value&quot;]
MsgBox, % obj := JSON.Stringify(obj)
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2018-08-01T09:38:44Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=127620#p127620</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сохранение Массива в файл]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=127619#p127619" />
			<content type="html"><![CDATA[<p>Ну да, в JScript они так обозначаются. Кроме того, это и из исходного кода метода Stringify видно:<br /></p><div class="codebox"><pre><code>      for k, v in [[&quot;\&quot;, &quot;\\&quot;], [A_Tab, &quot;\t&quot;], [&quot;&quot;&quot;&quot;, &quot;\&quot;&quot;&quot;], [&quot;/&quot;, &quot;\/&quot;], [&quot;`n&quot;, &quot;\n&quot;], [&quot;`r&quot;, &quot;\r&quot;], [Chr(12), &quot;\f&quot;], [Chr(08), &quot;\b&quot;]]
         obj := StrReplace( obj, v[1], v[2] )</code></pre></div>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2018-08-01T09:29:38Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=127619#p127619</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сохранение Массива в файл]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=127615#p127615" />
			<content type="html"><![CDATA[<p>А эти символы должны возвращаться с наклонной чертой?<br /></p><div class="codebox"><pre><code>obj := [&quot;`n`r	&quot;]
MsgBox, % JSON.Stringify(obj)</code></pre></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2018-08-01T02:46:24Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=127615#p127615</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сохранение Массива в файл]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=127614#p127614" />
			<content type="html"><![CDATA[<p>Да просто поместите это в комментарий в первых строках кода и делов то!<br />Предупреждён - значит вооружён! <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[KusochekDobra]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=33846</uri>
			</author>
			<updated>2018-07-31T23:55:43Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=127614#p127614</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сохранение Массива в файл]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=127613#p127613" />
			<content type="html"><![CDATA[<p>Json можно использовать, но с некоторыми оговорками:<br /></p><div class="codebox"><pre><code>obj := [0xFF, 0xFFFF]
MsgBox, % JSON.Stringify(obj)

obj := [&quot;0xFF&quot;, &quot;0xFFFF&quot;]
MsgBox, % JSON.Stringify(obj)</code></pre></div><p>И ещё что-то подобное вроде было, сейчас уже не помню.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2018-07-31T23:46:20Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=127613#p127613</id>
		</entry>
</feed>
