<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBS:Перебор элементов массива объектов, заполненного с помощю рекурсии]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=10232</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=10232&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS:Перебор элементов массива объектов, заполненного с помощю рекурсии».]]></description>
		<lastBuildDate>Thu, 11 Dec 2014 20:28:40 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBS:Перебор элементов массива объектов, заполненного с помощю рекурсии]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=89155#p89155</link>
			<description><![CDATA[<div class="quotebox"><cite>tIRyamPaKa2 пишет:</cite><blockquote><p>вроде инструмента проводника &quot;Портфель&quot; в ОС Windows</p></blockquote></div><p>Похоже, что &quot;Портфель&quot; отсутсвует в Windows 8 и Windows 8.1. Работая в этих ОС, я не находил в контекстном меню &quot;Создать&quot; пункта &quot;Портфель&quot;.</p><br /><div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>Предполагаю, что Вашу задачу можно решить проще.</p></blockquote></div><p>Поддерживаю данный тезис. Вот, например, всего одна строка в пакетном файле, и в обеих папках всё встанет на свои места: </p><div class="codebox"><pre><code>@for /f &quot;tokens=1-4 delims=|&quot; %%i in (&quot;robocopy|C:\Test|D:\Test|/dcopy:t /e /xo&quot;) do @%%i &quot;%%j&quot; &quot;%%k&quot; %%l&amp; %%i &quot;%%k&quot; &quot;%%j&quot; %%l</code></pre></div><p>.</p>]]></description>
			<author><![CDATA[null@example.com (Yury)]]></author>
			<pubDate>Thu, 11 Dec 2014 20:28:40 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=89155#p89155</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS:Перебор элементов массива объектов, заполненного с помощю рекурсии]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=89150#p89150</link>
			<description><![CDATA[<p><strong>tIRyamPaKa2</strong>,<br />1) Поправьте пожалуйста заголовок темы в соответствии с <a href="http://forum.script-coding.com/rules.html#3.1.">пунктом правил 3.1</a>.</p><p>2) Предполагаю, что Вашу задачу можно решить проще. На другом форуме обсуждался вариант: <a href="http://www.cyberforum.ru/cmd-bat/thread978534.html">Батник для копирования только новых файлов</a>.</p><p>Человек таким образом обновлял каталог проекта. Возможно то решение подойдёт больше ?</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Thu, 11 Dec 2014 15:03:11 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=89150#p89150</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS:Перебор элементов массива объектов, заполненного с помощю рекурсии]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=89139#p89139</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Реализовывать я начал так:<br /></p><ul><li><p>создаём массив объектов всех вложенных папок и файлов, содержащихся в папке № 1;</p></li><li><p>создаём массив объектов всех вложенных папок и файлов, содержащихся в папке № 2;</p></li><li><p>сравниваем оба этих массива и дополняем недостоющими элементами соответственно.</p></li></ul></blockquote></div><p>Используйте словарь (коллекцию) — «Scripting.Dictionary».</p><div class="quotebox"><blockquote><p>Код следующий:</p></blockquote></div><p>Начните с добавления «Option Explicit» в начало кода и объявления <em>всех</em> переменных.</p><ul><li><p>Нумерация массива начинается не с единицы, а с нуля.</p></li><li><p>Нет нужды проверять существование файла, если Вы всё одно собираетесь его переписывать. Можно обойтись одним методом «.CreateTextFile()».</p></li><li><p>А вот существование папки проверить надо.</p></li><li><p>Располагайте функцию за телом основной части.</p></li><li><p>Если функция ничего не возвращает — это процедура, а не функция.</p></li></ul><div class="quotebox"><blockquote><p>Прошу обратить внимание на третью снизу строку: если в ней заменить константу 1 на переменную i то интерпретатор выдаёт ошибку (код 800А01А8, описание: Требуется объект: &quot;). Описание почему-то заканчивается двойной кавычкой, поэтому не понятно какой-такой объект требуется... Если я подставляю числовые константы - как по маслу, а стоит заставить интерпритатор перебирать массив - ошибка! Почему так?</p></blockquote></div><p>Потому что Вы находите N вложенных папок, а перебираете в цикле N+1. Естественно, в N+1 по счёту, пустом, элементе массива не будет объекта. Отсюда и ошибка. Т.е., в начале должно быть «i = 0», а при переборе — «For i = 0 To maxI - 1» как минимум.</p><p>P.S. Настоятельно рекомендую завязывать с массивами для данной задачи. Используйте словарь/коллекцию.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Wed, 10 Dec 2014 20:39:54 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=89139#p89139</guid>
		</item>
		<item>
			<title><![CDATA[VBS:Перебор элементов массива объектов, заполненного с помощю рекурсии]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=89135#p89135</link>
			<description><![CDATA[<p>Решил я написать программу для сравнения двух папок и если в одной из них не достаёт вложенных папок или файлов, имеющихся в другой, то она дополняется ими соответственно. В конечном итоге получится что-то вроде инструмента проводника &quot;Портфель&quot; в ОС Windows, но с расширенными возможностями.</p><p>Реализовывать я начал так:<br /></p><ul><li><p>создаём массив объектов всех вложенных папок и файлов, содержащихся в папке № 1;</p></li></ul><ul><li><p>создаём массив объектов всех вложенных папок и файлов, содержащихся в папке № 2;</p></li></ul><ul><li><p>сравниваем оба этих массива и дополняем недостоющими элементами соответственно.</p></li></ul><p>Но в самом начале (при создании массива объектов всех вложенных папок и файлов, содержащихся в папке № 1) столкнулся с непредвиденной проблемой.</p><p>Код следующий:<br /></p><div class="codebox"><pre><code>dim i, maxI
dim objectsBufer(1000)
dim put
i = 1
allFoldersBufer(&quot;C:\папка1&quot;)
function allFoldersBufer(allDir)
 set f = createObject(&quot;scripting.fileSystemObject&quot;).getFolder(allDir)
 set subF = f.subFolders
 for each folder in subF
  set objectsBufer(i) = folder
  i = i + 1
  allFoldersBufer(allDir &amp; &quot;\&quot; &amp; folder.name)
 next
end function
maxI = i

put = &quot;C:\Результат работы.txt&quot;
set fso = createObject(&quot;scripting.fileSystemObject&quot;)
if fso.fileExists(put) then
 set file = fso.getFile(put)
 set textSte = file.openAsTextStream(2, -1)
else
 set textSte = fso.createTextFile(put)
end if

i = 1
msgBox &quot;i = &quot; &amp; i &amp; &quot;     maxI = &quot; &amp; maxI
for i = 1 to maxI
textSte.writeLine objectsBufer(1).path &amp; &quot;     Имя папки: &quot; &amp; objectsBufer(1).name
next
textSte.close
</code></pre></div><p>Прошу обратить внимание на третью снизу строку: если в ней заменить константу 1 на переменную i то интерпретатор выдаёт ошибку (код 800А01А8, описание: Требуется объект: &quot;). Описание почему-то заканчивается двойной кавычкой, поэтому не понятно какой-такой объект требуется... Если я подставляю числовые константы - как по маслу, а стоит заставить интерпритатор перебирать массив - ошибка! Почему так?</p>]]></description>
			<author><![CDATA[null@example.com (tIRyamPaKa2)]]></author>
			<pubDate>Wed, 10 Dec 2014 19:17:56 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=89135#p89135</guid>
		</item>
	</channel>
</rss>
