<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBScript: чтение последних N строк текстового файла]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7209&amp;type=atom" />
	<updated>2012-05-13T05:13:31Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=7209</id>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: чтение последних N строк текстового файла]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=60272#p60272" />
			<content type="html"><![CDATA[<p>Другим вариантом может стать использование <a href="http://www.microsoft.com/technet/scriptcenter/tools/logparser/default.mspx">Log Parser 2.2</a> (<a href="http://forum.script-coding.com/viewtopic.php?id=947">VBScript: работаем с утилитой LogParser от Microsoft</a>):<br /></p><div class="codebox"><pre><code>Option Explicit

Dim strPath
Dim lngLines

Dim objLogQuery
Dim objCOMTextLineInputContext

Dim strQuery
Dim strText


strPath  = &quot;c:\Temp\Some.txt&quot; &#039; Путь к текстовому файлу
lngLines = 10                 &#039; Количество потребных последних строк

Set objLogQuery                = WScript.CreateObject(&quot;MSUtil.LogQuery&quot;)
Set objCOMTextLineInputContext = WScript.CreateObject(&quot;MSUtil.LogQuery.TextLineInputFormat&quot;)

With objCOMTextLineInputContext
    .codepage       = 1251
    .recurse        = False
    .splitLongLines = False
End With

strQuery = &quot;SELECT TOP &quot; &amp; CStr(lngLines) &amp; &quot; Text, Index FROM &#039;&quot; &amp; strPath &amp; &quot;&#039; ORDER BY Index DESC&quot;
strText  = &quot;&quot;

With objLogQuery.Execute(strQuery, objCOMTextLineInputContext)
    Do Until .atEnd
        With .getRecord
            strText = .getValue(&quot;Text&quot;) &amp; vbCrLf &amp; strText
        End With
        
        .moveNext
    Loop
    
    .close
End With

Set objCOMTextLineInputContext = Nothing
Set objLogQuery                = Nothing

WScript.Echo strText

WScript.Quit 0</code></pre></div>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2012-05-13T05:13:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=60272#p60272</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBScript: чтение последних N строк текстового файла]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=60264#p60264" />
			<content type="html"><![CDATA[<p>Основная идея состоит в создании массива из N элементов для хранения последовательно считываемых строк текстового файла и организации на основе этого массива кольца со скользящим началом очереди. Данный скрипт отличает бережное отношение к оперативной памяти, в отличие от простого «.ReadAll()».<br /></p><div class="codebox"><pre><code>Option Explicit

Dim strPath
Dim lngLines

Dim objFSO
Dim objTS

Dim i
Dim j


strPath  = &quot;c:\Temp\Some.txt&quot; &#039; Путь к текстовому файлу
lngLines = 10                 &#039; Количество потребных последних строк

ReDim arrLines(lngLines - 1)  &#039; Массив для организации очереди из считываемых строк

Set objFSO = WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set objTS  = objFSO.OpenTextFile(strPath)

With objTS
    i = 0
    
    Do Until .AtEndOfStream
        arrLines(i) = .ReadLine()
        
        i = (i + 1) Mod lngLines
    Loop
    
    .Close
End With

Set objTS  = Nothing
Set objFSO = Nothing

For j = 0 To lngLines - 1
    WScript.Echo arrLines((i + j) Mod lngLines)
Next

WScript.Quit 0</code></pre></div><p>Автор идеи — <strong><a href="http://forum.script-coding.com/profile.php?id=26249">shiz</a></strong>.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2012-05-13T03:37:50Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=60264#p60264</id>
		</entry>
</feed>
