<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS:Как провести замену в строке следующей за найденой?]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8236&amp;type=atom" />
	<updated>2013-04-16T18:43:23Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=8236</id>
		<entry>
			<title type="html"><![CDATA[Re: VBS:Как провести замену в строке следующей за найденой?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=71480#p71480" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>dab00 пишет:</cite><blockquote><p>Я бы сделал примерно <a href="http://blog.daspot.ru/2013/04/blog-post.html">так</a>. Как это работает подробно описал <a href="http://blog.daspot.ru/2013/04/contentservice-vs-fusion-tables-api.html">здесь</a>.</p></blockquote></div><p>Ваши примеры для меня слишком сложны, я вообще ничего не понял.</p><div class="quotebox"><cite>dab00 пишет:</cite><blockquote><p>В случае наличия какого-нибудь планшетника или телефона с приложением Google Drive &quot;жена&quot; cможет менять цены в процессе поездки в трамвае например, и про этот вопрос можно будет благополучно забыть <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p></blockquote></div><p>Да лениво ей самой делать, она уже полгода собирается их поменять. Просто мне уже самому стало интересно как это сделать скриптом?</p>]]></content>
			<author>
				<name><![CDATA[griha09]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27540</uri>
			</author>
			<updated>2013-04-16T18:43:23Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=71480#p71480</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS:Как провести замену в строке следующей за найденой?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=71427#p71427" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>griha09 пишет:</cite><blockquote><p>Сейчас решаю как сделать - есть три варианта структуры price.txt<br />Вариант 1:<br />Наименование;Стоимость</p><p>Вариант 2:<br />Наименование<br />Стоимость </p><p>Вариант 3<br />Наименование - в price.txt<br />Стоимость - в price2.txt</p><p>По-моему вариант 2 самый простой: тогда пишем так<br /></p><div class="codebox"><pre><code>
If InStr(1, sw, word) &lt;&gt; 0 Then    &#039;вот мы нашли нужную строку
sw = file2.ReadLine()
word = file1.ReadLine() 
</code></pre></div></blockquote></div><p>Но код-то Вы привели к варианту-3 - с одного файла читаете наименование, а с другого - цену:)</p><p>Я считаю самым приемлемым - вариант-1 - разрывать справочник на два файла(вар-3)&nbsp; либо зависеть от случайного пропуска какой-то строки, что нарушит весь справочник (вар-2) - чревато и неудобно.</p><p>-----<br />В варианте-1: считанную строку разбиваете на массив из двух элементов по разделителю &quot;;&quot; (см. по функцию &quot;Split()&quot; - <a href="http://msdn.microsoft.com/en-us/library/0764e5w5(v=vs.84).aspx">Split Function</a> ), полученными двумя значениями массива заполнить &quot;Словарь&quot; - см. <a href="http://msdn.microsoft.com/en-us/library/x4k5wbx4(v=vs.84).aspx">Dictionary Object</a>. </p><p>Таким образом сначала считываем весь справочник цен в память в словарь, удобство которого - удобный поиск наличия ключа - &quot;Exists Method&quot; (в Вашем случае названия продукта, найденного в корректируемом файле) и получение соответствующего значения по ключу &quot;Item Property &quot; (у Вас - новая цена).</p><br /><br /><p><em>ps. а можно вместо текстового файла использовать эксельную таблицу: колонка с наименованием, колонка с ценой. Править ее пользователю удобно т.к. есть поиск и всякие сортировки и прочие полезности, считывать скриптом - тоже (на машине должен быть установлен Офис с Экселем) - примеры есть на форуме, если не найдете - маякуйте адаптирую какой-то свой скрипт для примера.</em></p>]]></content>
			<author>
				<name><![CDATA[Rom5]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5724</uri>
			</author>
			<updated>2013-04-16T06:54:43Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=71427#p71427</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS:Как провести замену в строке следующей за найденой?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=71426#p71426" />
			<content type="html"><![CDATA[<p>Я бы сделал примерно <a href="http://blog.daspot.ru/2013/04/blog-post.html">так</a>. Как это работает подробно описал <a href="http://blog.daspot.ru/2013/04/contentservice-vs-fusion-tables-api.html">здесь</a>.<br />В случае наличия какого-нибудь планшетника или телефона с приложением Google Drive &quot;жена&quot; cможет менять цены в процессе поездки в трамвае например, и про этот вопрос можно будет благополучно забыть <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></content>
			<author>
				<name><![CDATA[dab00]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27085</uri>
			</author>
			<updated>2013-04-16T06:50:18Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=71426#p71426</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS:Как провести замену в строке следующей за найденой?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=71425#p71425" />
			<content type="html"><![CDATA[<p>Большое спасибо, Rom5, чето вообще ступил что надо просто еще раз прочитать sw = file2.ReadLine() <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p>А где же берется новая цена?&nbsp; &nbsp;До этого вопроса я еще не дошел <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />Сейчас решаю как сделать - есть три варианта структуры price.txt<br />Вариант 1:<br />Наименование;Стоимость</p><p>Вариант 2:<br />Наименование<br />Стоимость </p><p>Вариант 3<br />Наименование - в price.txt<br />Стоимость - в price2.txt</p><p>По-моему вариант 2 самый простой: тогда пишем так<br /></p><div class="codebox"><pre><code>
If InStr(1, sw, word) &lt;&gt; 0 Then    &#039;вот мы нашли нужную строку
sw = file2.ReadLine()
word = file1.ReadLine() 
               
          
</code></pre></div><p>ну и дальше уже выделять цену из строки sw, у лучше и проще наверное строки в price.txt записывать в виде <strong>&lt;div class=&quot;price fr&quot;&gt;420 руб.&lt;/div&gt;</strong> и делать полную замену строки sw на строку word. Строковая функция <strong>Replace(expr, find, replacewith[, start[, count[, compare]]])</strong> для этого подойдет?</p>]]></content>
			<author>
				<name><![CDATA[griha09]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27540</uri>
			</author>
			<updated>2013-04-15T22:52:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=71425#p71425</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS:Как провести замену в строке следующей за найденой?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=71412#p71412" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>я в первом ссобщении написал что например Вот я нашёл строку <br /><em>&lt;div class=&quot;title&quot;&gt;Охлаждающий гель после бритья&lt;/div&gt;</em><br />А как указать что замену надо провести в следующей за ней строке?</p></blockquote></div><p>После Вашего успешного сравнения - еще раз считать в переменную строку из файла той же командой<br /></p><div class="codebox"><pre><code>sw = file2.ReadLine()</code></pre></div><p>потом в переменной с содержимым, например, <em>&quot;&lt;div class=&quot;price fr&quot;&gt;420 руб.&lt;/div&gt;&quot;</em> ищите позиции внутренних угловых скобок, и меняете в переменной <em>sw</em> текст на свой новый<br /></p><div class="codebox"><pre><code>
sNewPrice = &quot;456 руб.&quot; &#039;&#039;&#039;&#039;&#039;&#039;&#039; пример того, на что собрались менять
iPos1 = InStr(sw, &quot;&gt;&quot;)
iPos2 = InStrRev(sw, &quot;&lt;&quot;) &#039;ищем первую скобку справа&#039;
&#039;&#039;&#039;&#039; если sNewPrice (цена новая) без текста &quot; руб.&quot;, то 
&#039; iPos2 = InStr(iPos1, sw, &quot; &quot;) &#039;либо ищем пробел после первой скобки &#039;
&#039; iPos2 = InStr( sw, &quot; руб.&quot;) &#039;либо ищем фразу &quot;про рубли&quot; &#039;

&#039;формируем строку для вывода в файл из 3-х частей&#039;
sw = Left(sw, iPos1 ) &amp; sNewPrice &amp; Right(sw, Len(sw) - iPos2 + 1)

&#039;выводите в новый файл переменную sw уже за пределами сравнения поиска строки названия продукта, 
&#039;но перед Loop
&#039; (!) не забудьте сделать такой же вывод в новый файл значения переменной sw выше по коду - перед 
&#039;   дополнительным &quot;считыванием следующей строки&quot;
</code></pre></div><p><strong>Кстати, по Вашему коду я не понял - а где же берется новая цена?</strong><br />Привели бы уже образец своего &quot;c:\price.txt&quot;, т.к. могут быть нюансы и по самому поиску названия продукта -я бы к искомой фразе добавил бы спереди и сзади угловые скобки, для однозначного поиска строки...</p><p>А замена в файле как правило выглядит как создание совершенно нового файла, в который выводятся все считываемые строки - и неизменяемые значения <em>sw</em>, и откорректированные. </p><p>----<br />Файл прежний перед считыванием его значений можно переименовывать в .bak, а создаваемому - давать имя прежнего. В таком случае в цикле обхода всех файлов надо еще и проверять имя на наличие в нем .bak для пропускания уже обработанных файлов. <br />(и я не сильно представляю как себя будет вести &quot;обход&quot; файлов каталога, если в нем появляются в процессе работы новые файлы, возможно нужно при входе в каталог создать массив списка имен обрабатываемых файлов и делать цикл открытия файлов уже по своему массиву)</p>]]></content>
			<author>
				<name><![CDATA[Rom5]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5724</uri>
			</author>
			<updated>2013-04-15T18:21:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=71412#p71412</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS:Как провести замену в строке следующей за найденой?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=71409#p71409" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>Смотря что заменить надо. Целиком весь тег </p><div class="codebox"><pre><code>&lt;div class=&quot;price fr&quot;&gt;420 руб.&lt;/div&gt;</code></pre></div><p> или его свойства или содержимое ?</p></blockquote></div><p>заменить надо только цену(цифры).</p><p>я в первом ссобщении написал что например Вот я нашёл строку <br />&lt;div class=&quot;title&quot;&gt;Охлаждающий гель после бритья&lt;/div&gt;<br /> А как указать что замену надо провести в следующей за ней строке?</p><p>Сделал пока только &quot;болванку&quot;<br /></p><div class="codebox"><pre><code>&#039;берем название товара в price_txt и ищем строку с этим товаром в файлах папки 


price_txt = &quot;c:\price.txt&quot;        &#039;файл price
papka = &quot;C:\77777777777\&quot;            &#039;папка поиска


Set objFSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set file1 = objFSO.OpenTextFile(price_txt, 1, False)


While Not file1.AtEndOfStream
word = file1.ReadLine()               &#039; считываем строку из price_txt   &#039;искомое слово

RecursiveFolderScan papka

Wend

file1.close
Msgbox &quot;ВСЕ!&quot;



Sub RecursiveFolderScan(FolderPath)
    &#039;Получаем объектную модель текущего каталога
    Set Folder = objFSO.GetFolder(FolderPath)
 
    &#039;Перебираем все файлы в текущем каталоге
    For Each File in Folder.Files
&#039;+++++++++++++++++++++++++++++++++++++++++

Set file2 = objFSO.OpenTextFile(File, 1, False)

Do Until file2.AtEndOfStream
sw = file2.ReadLine()

If InStr(1, sw, word) &lt;&gt; 0 Then    &#039;вот мы нашли нужную строку

&#039;а теперь надо перейти на следующюю строку и сделать в ней замену
                
            End If
        Loop
file2.close

    Next
 
    &#039;Перебираем все подкаталоги в каталоге
    For Each SubFolder in Folder.SubFolders
        RecursiveFolderScan(SubFolder.Path)
    Next
End Sub

</code></pre></div>]]></content>
			<author>
				<name><![CDATA[griha09]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27540</uri>
			</author>
			<updated>2013-04-15T17:16:35Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=71409#p71409</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS:Как провести замену в строке следующей за найденой?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=71378#p71378" />
			<content type="html"><![CDATA[<p>Может Вам стоит написать пару скриптов: один выгружает содержимое Ваших исходных таблиц - например, в XLS-ный файл (выгружать в строки содержимое тегов с классами &quot;title&quot; и соответствующий им &quot;price fr&quot;), пользователь правит этот файл, а Вы другим скриптом делаете поиски и замены на основании содержимого XLS ?</p><p>Или Вам нужен просто vbs-пример работы с текст.файлами? Тогда показывайте, что уже написано.</p>]]></content>
			<author>
				<name><![CDATA[Rom5]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5724</uri>
			</author>
			<updated>2013-04-15T09:00:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=71378#p71378</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS:Как провести замену в строке следующей за найденой?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=71375#p71375" />
			<content type="html"><![CDATA[<p>Смотря что заменить надо. Целиком весь тег </p><div class="codebox"><pre><code>&lt;div class=&quot;price fr&quot;&gt;420 руб.&lt;/div&gt;</code></pre></div><p> или его свойства или содержиое ?</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2013-04-15T08:02:29Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=71375#p71375</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBS:Как провести замену в строке следующей за найденой?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=71372#p71372" />
			<content type="html"><![CDATA[<p>Как тему назвать не знаю, админы поправьте<br />Жена типа занимается косметикой, попросила сделать сайт - сделал. Но чето не подумал и сделал без СМS, и цены указал явно без переменных. А сейчас надо цены поменять, переделывать все с переменными не хочется (тоже что вручную).Все строки с товарами записаны так:<br /> </p><div class="codebox"><pre><code>              &lt;a href=&quot;../dlya-muzhchin/product/ohlazhdayuschiy-gel-posle-britya.php&quot; class=&quot;product fl&quot; style=&quot;background-image:url(../../../images/products/1/7791/4185711/medium_gel.jpg)&quot;&gt;
                        &lt;div class=&quot;title&quot;&gt;Охлаждающий гель после бритья&lt;/div&gt;
                        &lt;div class=&quot;price fr&quot;&gt;420 руб.&lt;/div&gt;
                    &lt;/a&gt;
                
                    &lt;a href=&quot;../dlya-muzhchin/product/ochischayuschee-mylo-mkmen.php&quot; class=&quot;product fl&quot; style=&quot;background-image:url(../../../images/products/1/7803/4185723/medium_010334.jpg)&quot;&gt;
                        &lt;div class=&quot;title&quot;&gt;Очищающее мыло MKMen&lt;/div&gt;
                        &lt;div class=&quot;price fr&quot;&gt;420 руб.&lt;/div&gt;
                    &lt;/a&gt;
</code></pre></div><p>Вот я нашел строку </p><div class="codebox"><pre><code>&lt;div class=&quot;title&quot;&gt;Охлаждающий гель после бритья&lt;/div&gt;</code></pre></div><p>, а как указать что замену надо провести в след.строке?</p>]]></content>
			<author>
				<name><![CDATA[griha09]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27540</uri>
			</author>
			<updated>2013-04-15T07:42:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=71372#p71372</id>
		</entry>
</feed>
