<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBScript: определение количества размерностей массива]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=5194&amp;type=atom" />
	<updated>2010-11-21T03:52:19Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=5194</id>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: определение количества размерностей массива]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=42019#p42019" />
			<content type="html"><![CDATA[<p>Третий способ основан на предположении, что массив в любом своем измерении имеет элементы [0…x], либо вовсе не имеет измерений (динамический до вызова «ReDim …»):<br /></p><div class="codebox"><pre><code>Option Explicit

Dim not_arr
Dim arr1(2,3,5,1,7)
Dim arr2()
Dim arr3


arr3 = Array(1, 2.3, &quot;45&quot;, Array(&quot;еще&quot;, 1))

WScript.Echo &quot;Число измерений для массивов:&quot;
WScript.Echo &quot;    arr1(2,3,5,1,7) :&quot; &amp; ArrayDims(arr1)
WScript.Echo &quot;    arr2()          :&quot; &amp; ArrayDims(arr2)
WScript.Echo &quot;    arr3()          :&quot; &amp; ArrayDims(arr3)
WScript.Echo &quot;    not_arr         :&quot; &amp; ArrayDims(not_arr)

WScript.Quit 0
&#039;=============================================================================

&#039;=============================================================================
&#039;Возвращает число измерений массива
&#039;=============================================================================
Function ArrayDims(arr)
    Dim nElCount, i, nCurElCount
    
    If Not IsArray(arr) Then
        ArrayDims = -1 &#039;Не массив - индикатор ошибки
        Exit Function
    End If
    
    nElCount = 0
    
    For Each i In arr &#039;Всего элементов в массиве
        nElCount = nElCount + 1
    Next
    
    If nElCount = 0 then
        ArrayDims = 0 &#039;Динамический, не определен
        Exit Function
    End If
    
    ArrayDims   = 1
    nCurElCount = UBound(arr, 1) + 1
    
    While nElCount &gt; nCurElCount
        ArrayDims   = ArrayDims + 1
        nCurElCount = 1
        
        For i = 1 To ArrayDims
            nCurElCount = nCurElCount * (UBound(arr, i) + 1)
        Next
    Wend
End Function
&#039;=============================================================================</code></pre></div><p>Функция возвращает:<br />* число размерностей массива, указанного аргументом функции;<br />* «0» — если размерности массива ещё не заданы;<br />* «-1» в случае, если переданный аргумент не является массивом.</p><p>Автор идеи — <strong>jite</strong>.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2010-11-21T03:52:19Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=42019#p42019</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: определение количества размерностей массива]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=42018#p42018" />
			<content type="html"><![CDATA[<p>Другой способ — последовательно увеличивать искомое значение размерности в функции UBound/LBound до возникновения ошибки:<br /></p><div class="codebox"><pre><code>Option Explicit

Dim Arr(1, 2, 3, 4)

WScript.Echo GetArrDimensions(Arr)

WScript.Quit 0
&#039;=============================================================================

&#039;=============================================================================
Function GetArrDimensions(Arr)
    Dim i
    
    i = 1
    
    On Error Resume Next
    
    Do
        UBound Arr, i
        
        If Err.Number &lt;&gt; 0 Then
            On Error Goto 0
            GetArrDimensions = i - 1
            
            Exit Function
        Else
            i = i + 1
        End If
    Loop
End Function
&#039;=============================================================================</code></pre></div><p>Автор идеи — <strong>JSman</strong>, отдельное спасибо — <strong>Xameleon</strong>.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2010-11-21T03:51:48Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=42018#p42018</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBScript: определение количества размерностей массива]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=42017#p42017" />
			<content type="html"><![CDATA[<p>Как известно, в JScript для массивов типа VBArray существует метод «.dimensions()», позволяющий непосредственно получить число размерностей указанного массива. В VBScript подобная функциональность отсутствует.</p><p>Одним из способов может быть использование формата *.wsf — передача массива в функцию на языке JScript, вычисление числа размерностей массива и возврат полученного значения в VBScript:<br /></p><div class="codebox"><pre><code>&lt;job&gt;
    &lt;script language=&#039;JScript&#039;&gt;
        function GetDimensions(arr) { return arr.dimensions() }
    &lt;/script&gt;
        
    &lt;script language=&quot;VBScript&quot;&gt;
        Dim arrSample(1, 2, 3, 4, 5)
        
        WScript.Echo GetDimensions(arrSample)
    &lt;/script&gt;
&lt;/job&gt;</code></pre></div>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2010-11-21T03:51:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=42017#p42017</id>
		</entry>
</feed>
