<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[QUIK -> DDE &mdash; Lua: Как преобразовать строку с разделителями в таблицу?]]></title>
	<link rel="self" href="https://quik2dde.ru/extern.php?action=feed&amp;tid=105&amp;type=atom" />
	<updated>2014-09-05T07:44:52Z</updated>
	<generator>PunBB</generator>
	<id>https://quik2dde.ru/viewtopic.php?id=105</id>
		<entry>
			<title type="html"><![CDATA[Re: Lua: Как преобразовать строку с разделителями в таблицу?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=650#p650" />
			<content type="html"><![CDATA[<p>[url]http://www.lua.org/pil/20.2.html[/url]</p>]]></content>
			<author>
				<name><![CDATA[mbul]]></name>
				<uri>https://quik2dde.ru/profile.php?id=89</uri>
			</author>
			<updated>2014-09-05T07:44:52Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=650#p650</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Lua: Как преобразовать строку с разделителями в таблицу?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=649#p649" />
			<content type="html"><![CDATA[<p><strong>mbul</strong>,<br />очередное спасибище! ) Вчера вышел из положения вот таким кодом, отрабатывает вроде, значение распихиваю в другую таблицу позже<br /></p><div class="codebox"><pre><code>ravno = string.find(line,&quot;=&quot;) + 0
if ravno &gt;1 then
   k=string.sub(line,1,ravno-1) 
   v=string.sub(line,ravno+1)
   settings[k] = v
end</code></pre></div><p>Ваш вариант конечно правильнее и короче. )<br />И может быть подскажете где посмотреть подробное описание операторов %w*+ и прочих для работы в строках? В [url]http://www.lua.ru/doc/5.4.html[/url] только пара примеров, гугл нифига не рулит или не знаю как задать запрос...</p>]]></content>
			<author>
				<name><![CDATA[GREEN_X5]]></name>
				<uri>https://quik2dde.ru/profile.php?id=206</uri>
			</author>
			<updated>2014-09-05T07:39:50Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=649#p649</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Lua: Как преобразовать строку с разделителями в таблицу?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=648#p648" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>Line = &quot;codefs=RIU4,RIZ4,RNU4,&quot;
t={}
for k, v in string.gmatch(Line,&quot;(%w+)=(.*),&quot;) do
  t[k]={}
  for vv in string.gmatch(v,&quot;(%w+)&quot;) do
    t[k][#t[k]+1]=vv
  end
end</code></pre></div><p>t={ &quot;codefs&quot;={&quot;RIU4&quot;,&quot;RIZ4&quot;,&quot;RNU4&quot;}}</p>]]></content>
			<author>
				<name><![CDATA[mbul]]></name>
				<uri>https://quik2dde.ru/profile.php?id=89</uri>
			</author>
			<updated>2014-09-05T02:24:49Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=648#p648</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Lua: Как преобразовать строку с разделителями в таблицу?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=646#p646" />
			<content type="html"><![CDATA[<p>Ну да, чем проще, тем лучше и понятнее. ) Выбрал для себя вариант с запятой в конце.<br />Подскажите ещё пожалуйста, вот так строка разбивается на субстроки до и после знака равно, но вторая субстрока берется только до первой запятой. Как заставить взять ВСЁ после знака равно?</p><div class="codebox"><pre><code>Line = &quot;codefs=RIU4,RIZ4,RNU4,&quot;
for k, v in string.gmatch(Line,&quot;(%w+)=(%w+)&quot;)

--чтобы стало k=&quot;codefs&quot;, v=&quot;RIU4,RIZ4,RNU4,&quot;</code></pre></div>]]></content>
			<author>
				<name><![CDATA[GREEN_X5]]></name>
				<uri>https://quik2dde.ru/profile.php?id=206</uri>
			</author>
			<updated>2014-09-04T11:56:16Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=646#p646</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Lua: Как преобразовать строку с разделителями в таблицу?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=644#p644" />
			<content type="html"><![CDATA[<p>Способ хорош, но надо понимать его ограничения и не забывать про них.<br />Например то, что в конце строки обязательно должна стоять запятая )</p><div class="quotebox"><cite>GREEN_X5 пишет:</cite><blockquote><p>Короче те же штаны, только вид сбоку. ) Вобщем нет такого интерпретируемого цикла...</p></blockquote></div><p>Не, ну можно же иначе сделать синтаксически, хоть суть и та же самая будет, конечно:</p><div class="codebox"><pre><code>local myString = &quot;XXX,YYY,ZZZ&quot;

for i,v in ipairs(myString:split(&quot;,&quot;)) do
    -- обработка таблицы поэлементно
    --  .... элемент в  v  .....
    message (v, 0)
end</code></pre></div>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2014-09-03T09:54:47Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=644#p644</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Lua: Как преобразовать строку с разделителями в таблицу?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=643#p643" />
			<content type="html"><![CDATA[<p>mbul, реально круто, спасибо. ) <br />Блин, надо как-то найти нормальное описание строкового синтаксиса, всякие w и %...</p>]]></content>
			<author>
				<name><![CDATA[GREEN_X5]]></name>
				<uri>https://quik2dde.ru/profile.php?id=206</uri>
			</author>
			<updated>2014-09-03T09:46:31Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=643#p643</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Lua: Как преобразовать строку с разделителями в таблицу?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=642#p642" />
			<content type="html"><![CDATA[<p>local example = &quot;RSH3,VBZ2,O4Z2,O2Z2,SiM3,SiH3,SiF3,RIH3,RIM3,LKH3,LKZ2,GDZ2,GMZ2,GZH3,GZZ2,EuZ2,EDZ2,SiZ2,RIZ2,&quot;<br />for i in string.gmatch(example, &quot;(%w+)&quot;) do<br />&nbsp; print(i)<br />end</p>]]></content>
			<author>
				<name><![CDATA[mbul]]></name>
				<uri>https://quik2dde.ru/profile.php?id=89</uri>
			</author>
			<updated>2014-09-03T09:25:42Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=642#p642</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Lua: Как преобразовать строку с разделителями в таблицу?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=641#p641" />
			<content type="html"><![CDATA[<p>Короче те же штаны, только вид сбоку. ) Вобщем нет такого интерпретируемого цикла...<br />Спасибо за ответ!<br />Вот думаю, можно было бы подумать насчет for pair или for ipair. Но загвоздка в том, что блоки текста между запятыми не в кавычках, поэтому цикл не сможет прочитать их как индексы или значения таблицы, правильно я понимаю?</p>]]></content>
			<author>
				<name><![CDATA[GREEN_X5]]></name>
				<uri>https://quik2dde.ru/profile.php?id=206</uri>
			</author>
			<updated>2014-09-03T08:28:12Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=641#p641</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Lua: Как преобразовать строку с разделителями в таблицу?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=640#p640" />
			<content type="html"><![CDATA[<p>гугление подсказывает такой вот изящный вариант:</p><p>Добавляем метод к <strong>string</strong>:</p><div class="codebox"><pre><code>function string:split( inSplitPattern, outResults )
   if not outResults then
      outResults = { }
   end
   local theStart = 1
   local theSplitStart, theSplitEnd = string.find( self, inSplitPattern, theStart )
   while theSplitStart do
      table.insert( outResults, string.sub( self, theStart, theSplitStart-1 ) )
      theStart = theSplitEnd + 1
      theSplitStart, theSplitEnd = string.find( self, inSplitPattern, theStart )
   end
   table.insert( outResults, string.sub( self, theStart ) )
   return outResults
end</code></pre></div><p>Использование:</p><div class="codebox"><pre><code>local myString = &quot;XXX,YYY,ZZZ&quot;

local myTable = myString:split(&quot;,&quot;)

for i = 1, #myTable do
    -- обработка таблицы поэлементно
    --  ..... myTable[i]  .....
end</code></pre></div><br /><p><span style="color: #FF2222"><strong>admin:</strong></span><br /><span style="color: #FF2222"><em><strong>GREEN_X5</strong>, ваш вопрос выделил в отдельную тему, надеюсь вы не против.</em></span></p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2014-09-03T04:02:50Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=640#p640</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Lua: Как преобразовать строку с разделителями в таблицу?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=639#p639" />
			<content type="html"><![CDATA[<p>Вот как раз вопрос по циклам. ) <br />Существует ли подходящий for each чтобы легко разобрать в массив строку типа<br />RSH3,VBZ2,O4Z2,O2Z2,SiM3,SiH3,SiF3,RIH3,RIM3,LKH3,LKZ2,GDZ2,GMZ2,GZH3,GZZ2,EuZ2,EDZ2,SiZ2,RIZ2,<br />Или нужно перебирать каждый знак строки? В Купайле вроде есть такое...</p><p>Вот такую конструкцию сейчас накидал. Это самое изящное что можно сделать в Lua? )))</p><div class="codebox"><pre><code>function GetCodes(sec)

    local list
    list = getClassSecurities(sec)
    local len
    len=string.len(list)
    local cod={}
    local REFi=0
    local item = &quot;NO&quot;
    local n=0
    for i=0,len-1,1 do
        item = &quot;NO&quot;
        if string.sub(list,i,i)==&quot;,&quot;  then
            item = string.sub(list,REFi,i-1)
            if item~=nil then
                cod[n]=item
                logMemo:Add(n..&quot; &quot;..item)
                REFi=i+1
                n=n+1
            end                
        end
    end
    return cod
end</code></pre></div>]]></content>
			<author>
				<name><![CDATA[GREEN_X5]]></name>
				<uri>https://quik2dde.ru/profile.php?id=206</uri>
			</author>
			<updated>2014-09-02T19:02:37Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=639#p639</id>
		</entry>
</feed>
