<?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=4713</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=4713&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS : подскажите как - Построчное чтение текстовых файлов с конца».]]></description>
		<lastBuildDate>Thu, 25 Nov 2010 09:32:01 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBS : подскажите как - Построчное чтение текстовых файлов с конца]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=42219#p42219</link>
			<description><![CDATA[<p>А если так попробовать?<br /></p><div class="codebox"><pre><code>Set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set File = FSO.GetFile(&quot;test.txt&quot;)
Set TextStream = File.OpenAsTextStream(1)
Str = vbNullString
While Not TextStream.AtEndOfStream
    Str = TextStream.ReadLine()
Wend
TextStream.Close
MsgBox Str</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Kobrasol)]]></author>
			<pubDate>Thu, 25 Nov 2010 09:32:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=42219#p42219</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS : подскажите как - Построчное чтение текстовых файлов с конца]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=37825#p37825</link>
			<description><![CDATA[<div class="quotebox"><cite>Slav пишет:</cite><blockquote><p>я почему-то так и думал - что кто-то предложит еще и крутить диск в обратную сторону. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />Надеюсь, что Вы действительно пошутили.<br />Предыдущий сектор будет считан на следующем обороте диска.<br />Главное - мы знаем его номер.</p></blockquote></div><p>Тогда это очевидно сводит задачу к <a href="http://msdn.microsoft.com/en-us/library/aa365541%28VS.85%29.aspx">SetFilePointer</a>/<a href="http://msdn.microsoft.com/en-us/library/aa365467%28VS.85%29.aspx">ReadFile</a>. Причём посекторное чтение таким способом в разы снизит производительность(в секунду диск делает меньше 20-ти оборотов, если попробовать ускорить, то мы можем просто уничтожить диск:)).</p>]]></description>
			<author><![CDATA[null@example.com (Александр_)]]></author>
			<pubDate>Mon, 19 Jul 2010 13:17:46 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=37825#p37825</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS : подскажите как - Построчное чтение текстовых файлов с конца]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=37818#p37818</link>
			<description><![CDATA[<p>Спасибо, уважаемые коллеги.</p><p>На мой взгляд интересно обсудили.</p><p>Особенная благодарность <strong>Rumata</strong>.<br />Про Skip я не знал.<br />На данный момент лично для меня - то что надо.</p>]]></description>
			<author><![CDATA[null@example.com (Slav)]]></author>
			<pubDate>Mon, 19 Jul 2010 11:50:29 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=37818#p37818</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS : подскажите как - Построчное чтение текстовых файлов с конца]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=37817#p37817</link>
			<description><![CDATA[<div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p>Ага, надо только заставить сидюк диск в обратную сторону крутить</p></blockquote></div><p>Александр_,</p><p>я почему-то так и думал - что кто-то предложит еще и крутить диск в обратную сторону. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />Надеюсь, что Вы действительно пошутили.<br />Предыдущий сектор будет считан на следующем обороте диска.<br />Главное - мы знаем его номер.</p><p>Спасибо за экскурс в NTFS.<br />Действительно, интересно.<br />Насколько я знаю, там еще сложнее - те же индексы.<br />Но вот для &quot;обратного чтения&quot; все это как-то не очень.<br />Исключительно по моему скромному мнению. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (Slav)]]></author>
			<pubDate>Mon, 19 Jul 2010 11:47:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=37817#p37817</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS : подскажите как - Построчное чтение текстовых файлов с конца]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=37814#p37814</link>
			<description><![CDATA[<p><strong>Slav</strong>, с терминами &quot;вперёд&quot; и &quot;назад&quot; всё понятно. В такой их интерпретации - читаем &quot;вперёд&quot;.<br />Понятно также и то, что о разнице между текстовым и не текстовым файлами имеет смысл говорить только в контексте восприятия данных человеком, а не вычислительным комплексом.</p><p>В данном случае вынужден повторить Ваши слова: &quot;Мы обсуждаем разные вопросы&quot;.</p>]]></description>
			<author><![CDATA[null@example.com (Dmitrii)]]></author>
			<pubDate>Mon, 19 Jul 2010 11:22:44 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=37814#p37814</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS : подскажите как - Построчное чтение текстовых файлов с конца]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=37812#p37812</link>
			<description><![CDATA[<div class="quotebox"><cite>Slav пишет:</cite><blockquote><p>... seek, конечно, не чтение &quot;с конца&quot; - но все-таки на порядок лучше чтения мусора с самого начала...</p></blockquote></div><p>Насколько верно я сужу по документации - у объектов WSH нет методов работы с нетекстовыми файлами - всевозможные Open/CreateTextFile, OpenAsTextStream и единственный объект - опять же TextStream. Но последний имеет два метода SkipLine и Skip. Последний - аналог seek. <br /></p><div class="quotebox"><blockquote><p>Skips a specified number of characters when reading a TextStream file.</p><p>object.Skip(characters)<br />Arguments<br />object <br />Required. Always the name of a TextStream object. <br />characters <br />Required. Number of characters to skip when reading a file.</p></blockquote></div><p>Если в постановке задачи нет ограничений на использование внешних утилит, то я бы порекомендовал использовать юниксовые&nbsp; порты команд (например, <a href="http://unxutils.sourceforge.net/">http://unxutils.sourceforge.net/</a>): <br /><strong>tail -n </strong> - чтение последних n строк из файла<br /><strong>tac</strong> - команда, выводящая в STDOUT строки указанных файлов в обратном порядке</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Mon, 19 Jul 2010 09:59:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=37812#p37812</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS : подскажите как - Построчное чтение текстовых файлов с конца]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=37809#p37809</link>
			<description><![CDATA[<div class="quotebox"><cite>Slav пишет:</cite><blockquote><p>2. Любой файл &quot;на оптическом диске&quot; (файловая система UDF) без значительных вычислительных затрат может быть прочитан в любом направлении. Просто &quot;читалки&quot; на плеерах пока никто не додумался делать. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />И реализуется эта возможность &quot;вперед-назад&quot; на уровне элементарной микросхемы - правда, при жесткой организации самой файловой системы.</p></blockquote></div><p>Ага, надо только заставить сидюк диск в обратную сторону крутить <img src="//forum.script-coding.com/img/smilies/big_smile.png" width="15" height="15" /><br /></p><div class="quotebox"><cite>Slav пишет:</cite><blockquote><p>3. Любая файловая система с жесткой организацией позволяет относительно просто реализовать алгоритм &quot;обратного чтения&quot;. Я уже приводил пример с перфокартами.<br />Если Вы на абсолютно чистый винт запишете файл - то формально он будет соответствовать условию &quot;обратного чтения&quot;. Но! Файловая система все равно будет знать из каталога только первый кластер, а в каждом будет только ссылка на последующий.<br />Так что &quot;в конец&quot; придется все равно идти по всей цепочке.</p></blockquote></div><p>Нет, это не совсем так. Привожу пример организации на NTFS, про MFT и т.п. не рассказываю, поскольку сейчас это не важно. Запись файла выглядит примерно вот так:<br /></p><div class="codebox"><pre><code>|стнадарт.инфо.|имя|данные|</code></pre></div><p>Каждый из этих атрибутов состоит из заголовка и значения. Но размер записи фиксирован(если не ошибаюсь, то 1кб). Если данные не уместились то этот атрибут называется нерезидентным, в таких случаях под хранение данных выделяется дополнительное пространство вне MFT(буржуи называют его &quot;run&quot; или &quot;extent&quot;, у нас обычно просто &quot;группа&quot;). И вот тут на помощь приходит LCN- это нумерованная от 0 до N последовательность кластеров на всём томе, и VCN- аналогичная нумерованная последовательность, но только для каждого файла своя(т.е. нумеруются только кластеры принадлежащие файлу). Т.о. данные выглядят так:<br />|Начальный VCN|Соответствующий ему LCN|число кластеров|<br />Таким образом файловая система знает не только первый кластер:). Например если файл занимает 16 кластеров и нужно попасть на 14-ый(отсчёт с нуля):<br /></p><div class="codebox"><pre><code>|00|1297|8|
|08|4932|4|
|12|6321|4|</code></pre></div><p>Из этой таблицы извлекается третья запись и считается отступ(14-12=2), т.о. нужный нам кластер находится под номером 6323.</p>]]></description>
			<author><![CDATA[null@example.com (Александр_)]]></author>
			<pubDate>Mon, 19 Jul 2010 09:30:22 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=37809#p37809</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS : подскажите как - Построчное чтение текстовых файлов с конца]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=37804#p37804</link>
			<description><![CDATA[<div class="quotebox"><cite>The gray Cardinal пишет:</cite><blockquote><p>Я имел в виду загружать весь лог в таблицу БД каким-нибудь Job&#039;ом, исполняющимся периодически. Структурированные текстовые файлы вроде можно так загружать какими-то простыми командами. Может, это и бред — рассуждаю почти наугад.</p></blockquote></div><p>The gray Cardinal,</p><p>в принципе этот вопрос я могу решить и в сях, дельфях, скулях... - открыть текстовый файл, seek-нуть на запомненную в предыдущем запуске позицию, и начать читать сразу только новые сообщения.<br />Запущу любую из Студий - и вперед.<br />seek, конечно, не чтение &quot;с конца&quot; - но все-таки на порядок лучше чтения мусора с самого начала.</p><p>Но на этом форуме меня всегда поражали изящные и лаконичные решения в 2-3 десятках строк, написанных в обычном Блокноте.<br />Жаль, что кроме ReadLine и ReadAll ничего другого мы не нашли.</p><p>Или плохо искали? <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (Slav)]]></author>
			<pubDate>Mon, 19 Jul 2010 08:12:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=37804#p37804</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS : подскажите как - Построчное чтение текстовых файлов с конца]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=37800#p37800</link>
			<description><![CDATA[<div class="quotebox"><cite>Slav пишет:</cite><blockquote><p>Алгоритм становится вообще очень странным: искать новые строчки в логе (в конце файла, кстати), загружать их в базу SQL, а потом обращаться с запросом.</p></blockquote></div><p>Я имел в виду загружать весь лог в таблицу БД каким-нибудь Job&#039;ом, исполняющимся периодически. Структурированные текстовые файлы вроде можно так загружать какими-то простыми командами. Может, это и бред — рассуждаю почти наугад.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Mon, 19 Jul 2010 06:36:45 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=37800#p37800</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS : подскажите как - Построчное чтение текстовых файлов с конца]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=37798#p37798</link>
			<description><![CDATA[<div class="quotebox"><cite>Dmitrii пишет:</cite><blockquote><p>Похоже, сначала надо договориться о том, что следует понимать под словами &quot;вперёд&quot; и &quot;назад&quot;, не забывая, опять же, что речь идёт о логических структурах, именуемых файлами (а в данном случае ещё и текстовыми).</p></blockquote></div><p>Dmitrii,</p><p>ну давайте &quot;договоримся&quot;. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />1. Приведенная Вами функция <em>getc()</em> продвигает указатель к началу файла или к концу?<br />2. Известна ли Вам хотя бы одна функция чтения, которая продвигает указатель к началу файла, что-то типа <em>getc(-1)</em>?<br />Подчеркиваю, не перемещает виртуальный указатель - это не чтение - а именно читает, и именно к началу?</p><div class="quotebox"><cite>Dmitrii пишет:</cite><blockquote><p>Кстати, про пример с плеером оптических дисков: разве указанный Вами эффект достигается только особенностями размещения данных на диске? Если так, то придётся признать следующее:<br />- текстовый файл, записанный на компакт-диск, можно прочитать построчно от конца к началу;<br />- текстовый файл, записанный на НЖМД так, что логические блоки четко соответствуют расположению физических секторов, можно прочитать построчно от конца к началу.</p></blockquote></div><p>1. Я не вижу большой разницы между тектовым файлом и любым другим - разве что CR - LF встречается чаще и этому сочетанию придан особый логический смысл.<br />2. Любой файл &quot;на оптическом диске&quot; (файловая система UDF) без значительных вычислительных затрат может быть прочитан в любом направлении. Просто &quot;читалки&quot; на плеерах пока никто не додумался делать. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />И реализуется эта возможность &quot;вперед-назад&quot; на уровне элементарной микросхемы - правда, при жесткой организации самой файловой системы.<br />3. Любая файловая система с жесткой организацией позволяет относительно просто реализовать алгоритм &quot;обратного чтения&quot;. Я уже приводил пример с перфокартами.<br />Если Вы на абсолютно чистый винт запишете файл - то формально он будет соответствовать условию &quot;обратного чтения&quot;. Но! Файловая система все равно будет знать из каталога только первый кластер, а в каждом будет только ссылка на последующий.<br />Так что &quot;в конец&quot; придется все равно идти по всей цепочке.</p>]]></description>
			<author><![CDATA[null@example.com (Slav)]]></author>
			<pubDate>Mon, 19 Jul 2010 06:20:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=37798#p37798</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS : подскажите как - Построчное чтение текстовых файлов с конца]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=37796#p37796</link>
			<description><![CDATA[<p>Коллеги,</p><p>если нужна конкретика - то я имею ввиду как раз лог MS SQL сервера.<br />Кто в курсе - файл ERRORLOG.</p><p>Новая версия файла образуется при перезагрузке сервера - вот такой вот <em>&quot;странный способ ведения лога&quot;</em>.<br />А так как перезагрузка только в крайнем случае - то копится он несколько месяцев.</p><p>Поэтому и грузить текстовый лог MS SQL в сам MS SQL как-то... диковато.<br />Алгоритм становится вообще очень странным: искать новые строчки в логе (в конце файла, кстати), загружать их в базу SQL, а потом обращаться с запросом.<br />Т.е. этап &quot;чтение последних строчек&quot; таким образом не исключается.</p><p>Спасибо за предложенные варианты.<br />Буду дальше пробовать.</p><p>На самом деле &quot;чтение с конца&quot; - реально с конца, а не иммитация разными способами - не такая уж и очевидная вещь.</p>]]></description>
			<author><![CDATA[null@example.com (Slav)]]></author>
			<pubDate>Mon, 19 Jul 2010 06:03:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=37796#p37796</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS : подскажите как - Построчное чтение текстовых файлов с конца]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=37758#p37758</link>
			<description><![CDATA[<div class="quotebox"><cite>JSman пишет:</cite><blockquote><p>Адо будет перебирать записи с начала файла, поэтому не думаю, что этот вариант полезный.</p></blockquote></div><p>ADO позволит сделать SELECT, который будет быстро работать. А как уж оно само там &quot;в душе&quot; будет читать, это его трудности <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Sat, 17 Jul 2010 13:01:10 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=37758#p37758</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS : подскажите как - Построчное чтение текстовых файлов с конца]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=37756#p37756</link>
			<description><![CDATA[<p>Адо будет перебирать записи с начала файла, поэтому не думаю, что этот вариант полезный.</p>]]></description>
			<author><![CDATA[null@example.com (JSmаn)]]></author>
			<pubDate>Sat, 17 Jul 2010 11:23:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=37756#p37756</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS : подскажите как - Построчное чтение текстовых файлов с конца]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=37755#p37755</link>
			<description><![CDATA[<div class="quotebox"><cite>Slav пишет:</cite><blockquote><p>Так вот, лог-файл немерянный, управлять его размером я не могу, а читать ну о-о-о-о-чень хочется именно с конца.</p></blockquote></div><p><a href="http://forum.script-coding.com/viewtopic.php?id=1322">VBScript: работа с большими текстовыми файлами</a><br />Ещё можно подумать о загрузке файла в специальную БД MS SQL Server, такую загрузку можно автоматизировать, сейчас не вспомню как именно, но в MS SQL Server вроде были такие возможности &quot;малой кровью&quot;. Дальше работать с этой БД запросами.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Sat, 17 Jul 2010 09:00:37 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=37755#p37755</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS : подскажите как - Построчное чтение текстовых файлов с конца]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=37754#p37754</link>
			<description><![CDATA[<p>Не вижу особой сложности реализации чтения файлов с конца. Можно воспользоваться средствами SAPI — <a href="http://forum.script-coding.com/viewtopic.php?id=4284">SAPI.spFileStream</a>.</p>]]></description>
			<author><![CDATA[null@example.com (JSmаn)]]></author>
			<pubDate>Sat, 17 Jul 2010 04:40:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=37754#p37754</guid>
		</item>
	</channel>
</rss>
