<?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=7519</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7519&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS: поиск в строке и удаление этой строки».]]></description>
		<lastBuildDate>Sun, 16 Sep 2012 05:41:07 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBS: поиск в строке и удаление этой строки]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=63889#p63889</link>
			<description><![CDATA[<div class="quotebox"><cite>griha09 пишет:</cite><blockquote><p>Спасибо dab00 за коменты</p></blockquote></div><p>Рад, что Вам помогло. Уже очень похоже <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />. Примерно о таком алгоритме чуть выше толковал уважаемый <strong>Rumata</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (dab00)]]></author>
			<pubDate>Sun, 16 Sep 2012 05:41:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=63889#p63889</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: поиск в строке и удаление этой строки]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=63886#p63886</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>и кстати файл otchet нельзя размещать в этом же каталоге т.к. скрипт проходит все файлы каталога и будет бесконечно копировать строки из otchet в otchet</p></blockquote></div><p>Можно, если сие учесть — проверяя имя файла.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Sat, 15 Sep 2012 18:24:43 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=63886#p63886</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: поиск в строке и удаление этой строки]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=63885#p63885</link>
			<description><![CDATA[<p>Спасибо dab00 за коменты, но заменой sw на word в строке&nbsp; strNewText = Replace(strText, sw, &quot; &quot;) проблему не решишь, т.к. будет удалять только слово word а нам надо всю строку sw. Так что я решил не мучаться а просто копировать в др. файл все строки не содержащие искомое слово word<br /> </p><div class="codebox"><pre><code>word = &quot;Source&quot;                 &#039;искомое слово
papka = &quot;c:\temp\&quot;            &#039;папка поиска
otchet = &quot;D:\\test\\otchet.txt&quot;        &#039;файл отчета
i=0




Set objFSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set file2 = objFSO.OpenTextFile(otchet, 2, True) 


RecursiveFolderScan papka
file2.close

Msgbox &quot;ВСЕ! Обработано &quot;&amp; i &amp;&quot; файлов&quot;




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

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

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

If InStr(1, sw, word) = 0 Then    &#039;копируем в др. файл все строки не равные этой
                
&#039;file2.WriteLine(file.Name)         
file2.WriteLine(sw)     
                
            End If
        Loop
file1.close
 

objFSO.DeleteFile File, 1    &#039;удаляем исход.файл
&#039;objFSO.MoveFile otchet, File    &#039;почему-то выдает ошибку  переимен-м отчет в исход.файл




i=i+1        &#039;счетчик файлов
&#039;++++++++++++++++++++++++++++++++++++++



    Next
 
    &#039;Перебираем все подкаталоги в каталоге
    For Each SubFolder in Folder.SubFolders
        RecursiveFolderScan(SubFolder.Path)
    Next
End Sub</code></pre></div><p>и кстати файл otchet нельзя размещать в этом же каталоге т.к. скрипт проходит все файлы каталога и будет бесконечно копировать строки из otchet в otchet</p>]]></description>
			<author><![CDATA[null@example.com (griha09)]]></author>
			<pubDate>Sat, 15 Sep 2012 17:37:38 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=63885#p63885</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: поиск в строке и удаление этой строки]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=63671#p63671</link>
			<description><![CDATA[<p><strong>Rumata</strong><br />Зависание системы на очень больших файлах, может, и будет, если не стоит автоопустошитель оперативки. Поскольку речь о тексте, думается, что файлы не настолько большие, чтобы вызвать сбой. У меня таких нет, по крайней мере. Хотя у некоторых админов имеются очень большие логи, но это редкость. И, естественно, нужно чистить (Nothing) переменную с содержимым после каждой записи.</p><p><strong>dab00</strong><br />Так не получится. <em>sw</em> в функции замены будет принимать значение последней строки ( а не каждой в отдельности) обрабатываемого файла. Там же цикл в цикле. Тут регексы нужны.</p>]]></description>
			<author><![CDATA[null@example.com (Flasher)]]></author>
			<pubDate>Sat, 08 Sep 2012 20:58:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=63671#p63671</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: поиск в строке и удаление этой строки]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=63665#p63665</link>
			<description><![CDATA[<div class="quotebox"><cite>griha09 пишет:</cite><blockquote><p>Вот никак не могу придумать как переделать его чтоб удалял строки со всеми искомыми словами в файле.</p></blockquote></div><p>Я закомментировал Ваш скрипт таким образом, чтобы дочитав текст скрипта до конца Вы решили вопрос.<br /></p><div class="codebox"><pre><code>
word = &quot;Source:&quot; &#039;искомое слово
papka = &quot;c:\temp\&quot; &#039;папка поиска

otchet = &quot;otchet.txt&quot; &#039;файл отчета - поместим его в каталог скрипта для простоты
i = 0 &#039;счетчик файлов

Dim boolFound &#039;флаг - слово найдено

Set objFSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)

&#039;---не понял причем тут RegExp
&#039;Set objRegExp = CreateObject(&quot;VBScript.RegExp&quot;)
&#039;objRegExp.IgnoreCase = True

Set file2 = objFSO.OpenTextFile(otchet, 2, True)

RecursiveFolderScan papka

file2.close

Msgbox &quot;ВСЕ! Обработано &quot;&amp; i &amp;&quot; файлов&quot;



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

		Set file1 = objFSO.OpenTextFile(File, 1, False) &#039;читаем файл
		boolFound = False

		Do Until file1.AtEndOfStream
			sw = file1.ReadLine() &#039;по-строчно
			If InStr(1, sw, word) &lt;&gt; 0 Then
				boolFound = True &#039;слово найдено
				file2.WriteLine(file.Name) &#039;пишем в отчет имя файла      
				file2.WriteLine(sw) &#039;пишем в отчет всю строку
				Exit Do &#039;выходим из цикла - скрипт пишет в отчет только строку с первым словом
			End If
        Loop
		file1.close &#039;закрываем файл

		&#039;записать уникальный номер в конец исходной страницы
		If boolFound Then
			Set file1 = objFSO.OpenTextFile(File, 1, False) &#039;снова читаем тот же файл
			strText = file1.ReadAll &#039;читаем все содержимое в переменную			
			file1.close &#039;и опять закрываем
			&#039;меняем все вхождения найденной строки на пробел - а надо наверное искомого слова - word
			strNewText = Replace(strText, sw, &quot; &quot;) 			
			
			&#039;снова открываем тот же файл - на этот раз для записи - таким образом удаляя все содержимое файла
			Set file1 = objFSO.OpenTextFile(File, 2, False)
			file1.WriteLine strNewText &#039;пишем новое содержимое
			file1.close &#039;и закрываем в третий раз
		End If	

		i = i + 1 &#039;счетчик файлов
    Next
 
    &#039;Перебираем все подкаталоги в каталоге
    For Each SubFolder in Folder.SubFolders
        RecursiveFolderScan(SubFolder.Path)
    Next
End Sub</code></pre></div><p>Постарался ничего не менять в первоначальном коде, чтобы уважаемый griha09 сумел сам разобраться.</p>]]></description>
			<author><![CDATA[null@example.com (dab00)]]></author>
			<pubDate>Sat, 08 Sep 2012 19:23:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=63665#p63665</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: поиск в строке и удаление этой строки]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=63663#p63663</link>
			<description><![CDATA[<div class="quotebox"><cite>smaharbA пишет:</cite><blockquote><p>Могу читать и писать одновременно</p></blockquote></div><p>Коллега, обратите внимание на всю фразу: </p><div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>Вы не можете читать и писать одновременно в один и тот же файл, так чтобы удалить определенные строки, а остальные оставить</p></blockquote></div><p><strong>Flasher</strong><br />Согласен. Но что будет с очень большими файлами? Не будет ли зависания скрипта или аварийного завершения по нехватке памяти?</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Sat, 08 Sep 2012 17:33:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=63663#p63663</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: поиск в строке и удаление этой строки]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=63661#p63661</link>
			<description><![CDATA[<p><strong>smaharbA</strong>, поясните — при помощи «TextStream»?</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Sat, 08 Sep 2012 16:16:37 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=63661#p63661</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: поиск в строке и удаление этой строки]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=63659#p63659</link>
			<description><![CDATA[<p>Не знаю к чему флуд, но <strong>Rumata</strong> имел в виду, что после открытия файла на запись читать его уже не имеет смысла (он будет пустовать), поэтому перебирать построчно так не получится. Вот я и пишу что надо запонимать в переменной весь исправленный текст, а потом его целиком записывать.</p>]]></description>
			<author><![CDATA[null@example.com (Flasher)]]></author>
			<pubDate>Sat, 08 Sep 2012 15:46:16 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=63659#p63659</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: поиск в строке и удаление этой строки]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=63658#p63658</link>
			<description><![CDATA[<p>Могу читать и писать одновременно - я Юлий Цезарь ?</p>]]></description>
			<author><![CDATA[null@example.com (smaharbA)]]></author>
			<pubDate>Sat, 08 Sep 2012 15:23:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=63658#p63658</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: поиск в строке и удаление этой строки]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=63657#p63657</link>
			<description><![CDATA[<p><strong>griha09</strong><br />Не вдаваясь в технические подробности: нужно не строки в цикле перебирать, а сразу заменять через RegExp.Replace в ReadAll всю комбинацию <em>* искомое слово * vbNewline</em> на <em>&quot; &quot; vbNewline</em>.</p>]]></description>
			<author><![CDATA[null@example.com (Flasher)]]></author>
			<pubDate>Sat, 08 Sep 2012 15:01:52 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=63657#p63657</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: поиск в строке и удаление этой строки]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=63484#p63484</link>
			<description><![CDATA[<p><strong>griha09</strong><br />Вы не можете читать и писать одновременно в один и тот же файл, так чтобы удалить определенные строки, а остальные оставить. Для этого и используется временный файл, в который пишутся все строки, кроме указанных. После завершения чтения входного файла он и временный закрываются, а временный файл перемещается в оригинальный..</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Mon, 03 Sep 2012 18:32:57 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=63484#p63484</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: поиск в строке и удаление этой строки]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=63483#p63483</link>
			<description><![CDATA[<p><strong>Rumata</strong><br />вообще-то мне надо удалить все строки (заменить на &quot; &quot;), содержащие заданную подстроку, а не сохранить их в др.файл. А могу,&nbsp; конечно, записать в др. файл строки не содержащие заданную подстроку, но тут уже просто интересно как модифицировать именно этот скрипт на замену всех строк а не только первой с заданной подстрокой.</p>]]></description>
			<author><![CDATA[null@example.com (griha09)]]></author>
			<pubDate>Mon, 03 Sep 2012 18:17:14 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=63483#p63483</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: поиск в строке и удаление этой строки]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=63439#p63439</link>
			<description><![CDATA[<p><strong>griha09</strong><br />Опишу алгоритм словесно. Полагаю, что по нему реализацию Вы осилите. Будут вопросы - задавайте.</p><div class="codebox"><pre><code>получить список файлов в переменную files

for each file in files
    create tempfile // создать временный файл и открыть на запись
    file.open // открыть файл на чтение
    while not EOF file
        line = file.ReadLine
        if line содержит заданную подстроку then
            выполнить какие-то действия (например, запись в лог-файл о нахождении заданной подстроки)
            пропустить, перейти к следующей строке
        end if
        tempfile.WriteLine line // сохранить строку во временном файле
    end while
    file.Close // закрыть файл
    tempfile.Close // закрыть временный файл
    rename tempfile file // переименовать временный файл в файл
end for</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Sun, 02 Sep 2012 12:25:47 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=63439#p63439</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: поиск в строке и удаление этой строки]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=63435#p63435</link>
			<description><![CDATA[<p><a href="http://www.script-coding.com/WSH/RegExp.html">RegExp</a></p>]]></description>
			<author><![CDATA[null@example.com (dab00)]]></author>
			<pubDate>Sun, 02 Sep 2012 12:05:14 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=63435#p63435</guid>
		</item>
		<item>
			<title><![CDATA[VBS: поиск в строке и удаление этой строки]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=63426#p63426</link>
			<description><![CDATA[<p>есть скрипт который в каждом файле папки ищет&nbsp; строку с заданным словом word и удаляет эту строку, но он удаляет только&nbsp; строку с первым искомым словом в файле, а остальные оставляет. Вот никак не могу придумать как переделать его чтоб удалял строки со всеми искомыми словами в файле.<br /></p><div class="codebox"><pre><code>word = &quot;Source:&quot;                 &#039;искомое слово
papka = &quot;c:\temp\&quot;            &#039;папка поиска
otchet = &quot;D:\\временное\\WSH\\test\\otchet.txt&quot;        &#039;файл отчета
i=0

Dim boolFound



Set objFSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set objRegExp = CreateObject(&quot;VBScript.RegExp&quot;)
objRegExp.IgnoreCase = True
Set file2 = objFSO.OpenTextFile(otchet, 2, True)  &#039;2 - Открыть файл для записи. Если файл уже существовал, его содержимое теряется. 8 - Открыть файл для добавления. Если файл уже существовал, информация будет дописываться в конец файла.Создавать файл, если он не существует (True), или нет (False). 


RecursiveFolderScan papka
file2.close

Msgbox &quot;ВСЕ! Обработано &quot;&amp; i &amp;&quot; файлов&quot;



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

Set file1 = objFSO.OpenTextFile(File, 1, False)
boolFound = False

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

If InStr(1, sw, word) &lt;&gt; 0 Then
                boolFound = True
file2.WriteLine(file.Name)         
file2.WriteLine(sw)     
                Exit Do
            End If
        Loop
file1.close
 

&#039;записать уникальный номер в конец исходной страницы
    If boolFound Then
Set file1 = objFSO.OpenTextFile(File, 1, False)
strText = file1.ReadAll
file1.close
strNewText = Replace(strText, sw, &quot; &quot;)          
                                      
Set file1 = objFSO.OpenTextFile(File, 2, False)
file1.WriteLine strNewText
file1.close

    End If


i=i+1        &#039;счетчик файлов




    Next
 
    &#039;Перебираем все подкаталоги в каталоге
    For Each SubFolder in Folder.SubFolders
        RecursiveFolderScan(SubFolder.Path)
    Next
End Sub</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (griha09)]]></author>
			<pubDate>Sun, 02 Sep 2012 10:49:21 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=63426#p63426</guid>
		</item>
	</channel>
</rss>
