<?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=5512</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=5512&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS: Запись в файл инвертированным образом, конкатенация строк».]]></description>
		<lastBuildDate>Mon, 14 Feb 2011 05:47:57 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBS: Запись в файл инвертированным образом, конкатенация строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=45131#p45131</link>
			<description><![CDATA[<p>Способов добавления строк в начала файла наверное тьма, могу предложить парочку:</p><p>Берем файл лога, читаем его весь в память, добавляем к нему новую строку и результат снова записываем в файл.<br />Из минусов вижу: При огромном файле, и небольшом объеме оперативной памяти, могут возникнуть проблемы. Как вариант, можно не читать весь файл целиком, а читать его построчно =&gt; нужно писать циклы. Опять же при внезапном прерывании скрипта, данные теряются, поэтому лучше организовывать через временный файл ИМХО (я сделал без временного).<br /></p><div class="codebox"><pre><code>&#039;Способ 1
Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set f = fso.OpenTextFile(&quot;c:\testfile.txt&quot;, 1)
buffer = f.ReadAll()
f.Close()
Set f = fso.OpenTextFile(&quot;c:\testfile.txt&quot;, 2, True)
s = Now() &amp; &quot; Не удалось запустить процесс.&quot;
f.WriteLine(s)
f.WriteLine(buffer)
f.Close()</code></pre></div><p>Как вариант можно скинуть новую строчку во временный файл. Затем воспользоваться стандартной коммандой Windows - copy, для склеивания файлов. Думаю работать будет быстрее (не утверждаю) чем заниматься чтением файла построчно, и записью. Потом проверить результат копирования (в примере я не делал проверки), удалить временные файлы и переименовать готовый.<br /></p><div class="codebox"><pre><code>&#039;Способ 2
Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set WshShell = CreateObject(&quot;WScript.Shell&quot;)
Set f = fso.CreateTextFile(&quot;c:\tmp.txt&quot;)
s = Now() &amp; &quot; Не удалось запустить процесс.&quot;
f.WriteLine(s)
f.Close()

WshShell.Run &quot;cmd.exe /C copy c:\tmp.txt + c:\testfile.txt c:\out.txt /B&quot;, 0, True
fso.DeleteFile &quot;c:\tmp.txt&quot;
fso.DeleteFile &quot;c:\testfile.txt&quot;
Set f = fso.GetFile (&quot;c:\out.txt&quot;)
f.Name = &quot;testfile.txt&quot;</code></pre></div><p>Ну вот как то так.</p>]]></description>
			<author><![CDATA[null@example.com (DnsIs)]]></author>
			<pubDate>Mon, 14 Feb 2011 05:47:57 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=45131#p45131</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Запись в файл инвертированным образом, конкатенация строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=45130#p45130</link>
			<description><![CDATA[<div class="quotebox"><cite>The_Immortal пишет:</cite><blockquote><p>Не подскажите, как можно сделать, чтобы последняя строчка была на самом верху (то есть, чтобы происходила обратная запись в файл -все новое наверх)?</p></blockquote></div><p>Никак. Только читать весь файл в переменную, закрывать файл, открывать его для записи, писать новую строку, затем старое содержимое файла из переменной, закрывать файл. Соответственно — для сколько-нибудь значимых объёмов текстового файла сие мало применимо.</p><p>Именно поэтому серьёзные логи во-первых, бинарные, во-вторых — являются базой данных того или иного формата. Запись в них всё равно идёт в конец файла, но база данных позволяет манипулировать с ними достаточно произвольным образом, например, извлечь N последних записей, отсортировать записи в порядке, обратном добавлению и т.п.</p><p>В принципе, используя OLEDB, можно работать и с текстовым файлом, как с базой данных: <a href="http://forum.script-coding.com/viewtopic.php?pid=10206#p10206">VBScript: работа с большими текстовыми файлами</a></p><div class="quotebox"><cite>The_Immortal пишет:</cite><blockquote><p>пусть на входе есть 2 строковые переменные &quot;Люблю &quot; и &quot;Мир!&quot;. На выходе надо получить &quot;Люблю Мир!&quot;.</p></blockquote></div><div class="codebox"><pre><code>love = &quot;Люблю &quot;
what = &quot;Мир!&quot;

WScript.Echo &quot;&quot;&quot;&quot; &amp; love &amp; &quot; &quot; &amp; what &amp; &quot;&quot;&quot;&quot;</code></pre></div><div class="quotebox"><blockquote><div class="codebox"><pre><code>&quot;Люблю  Мир!&quot;</code></pre></div></blockquote></div><p><span style="color: Green"><strong>The_Immortal</strong>, ещё раз: <a href="http://forum.script-coding.com/rules.html#3.11.">один вопрос — одна тема</a>. Последующие темы с несколькими вопросами внутри будут мною закрываться.</span></p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Mon, 14 Feb 2011 05:34:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=45130#p45130</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Запись в файл инвертированным образом, конкатенация строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=45129#p45129</link>
			<description><![CDATA[<div class="quotebox"><cite>The_Immortal пишет:</cite><blockquote><p>То оператор &amp; и переменные l,m будут восприниматься как обычные символы, и на выходе получится: &quot;l &amp; m&quot;.<br />А вот как можно загнать эти слова под общие кавычки? И реально ли это осуществить?</p></blockquote></div><p>Так?</p><div class="codebox"><pre><code>love = &quot;Люблю &quot;
what = &quot;Мир!&quot;
res =  &quot;&quot;&quot;&quot; &amp; love &amp; what &amp; &quot;&quot;&quot;&quot;
MsgBox res</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (DnsIs)]]></author>
			<pubDate>Mon, 14 Feb 2011 04:14:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=45129#p45129</guid>
		</item>
		<item>
			<title><![CDATA[VBS: Запись в файл инвертированным образом, конкатенация строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=45128#p45128</link>
			<description><![CDATA[<p>Ребят, у меня идет обычная запись в файл путем добавления:<br /></p><div class="codebox"><pre><code>Dim fso, tf, time
Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;)
Const ForAppending = 8
Set tf = fso.OpenTextFile(&quot;c:\testfile.txt&quot;, ForAppending, True)
time = Now()
tf.Write(time)
tf.WriteLine(&quot; Не удалось запустить процесс.&quot;)</code></pre></div><p>По-прежнему хотелось бы узнать как одной строкой вот это можно оформить? (Не знаю, как преобразовать переменную time в строку, чтобы осуществить конкатенацию)<br /></p><div class="codebox"><pre><code>tf.Write(time)
tf.WriteLine(&quot; Не удалось запустить процесс.&quot;)</code></pre></div><p>На выходе в файле получается что-то типа этого:<br />13.02.2011 15:38:53 Не удалось запустить процесс.<br />14.02.2011 15:38:53 Не удалось запустить процесс.<br />15.02.2011 15:38:53 Не удалось запустить процесс.<br />и т.д.</p><p>Не подскажите, как можно сделать, чтобы последняя строчка была на самом верху (то есть, чтобы происходила обратная запись в файл -все новое наверх)? Вот так:<br />и т.д.<br />15.02.2011 15:38:53 Не удалось запустить процесс.<br />14.02.2011 15:38:53 Не удалось запустить процесс.<br />13.02.2011 15:38:53 Не удалось запустить процесс.</p><p>Спасибо!</p><br /><p>Так, с конкатенацией разобрался, оказывается надо было всего лишь написать:<br /></p><div class="codebox"><pre><code>tf.WriteLine(time &amp; &quot; Не удалось запустить процесс.&quot;)</code></pre></div><p>Но на эту тему созрел еще один вопрос: пусть на входе есть 2 строковые переменные &quot;Люблю &quot; и &quot;Мир!&quot;. На выходе надо получить &quot;Люблю Мир!&quot;.<br />Я пытался сделать следующим образом:<br /></p><div class="codebox"><pre><code>love = &quot;&quot;&quot;Люблю &quot;&quot;&quot;
what = &quot;&quot;&quot;Мир!&quot;&quot;&quot;
res =  l &amp; m
MsgBox res</code></pre></div><p>На выходе у меня получается: &quot;Люблю &quot;&quot;Мир!&quot; <br />Если же сделать так:<br /></p><div class="codebox"><pre><code>love = &quot;Люблю &quot;
what = &quot;Мир!&quot;
res = &quot;&quot;&quot;l &amp; m&quot;&quot;&quot;
MsgBox res</code></pre></div><p>То оператор &amp; и переменные l,m будут восприниматься как обычные символы, и на выходе получится: &quot;l &amp; m&quot;.<br />А вот как можно загнать эти слова под общие кавычки? И реально ли это осуществить?</p>]]></description>
			<author><![CDATA[null@example.com (The_Immortal)]]></author>
			<pubDate>Sun, 13 Feb 2011 22:13:44 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=45128#p45128</guid>
		</item>
	</channel>
</rss>
