<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS: Обработчик текстовых логов, вставка полученных данных в Oracle]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=4960&amp;type=atom" />
	<updated>2010-10-01T13:00:31Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=4960</id>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Обработчик текстовых логов, вставка полученных данных в Oracle]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=39793#p39793" />
			<content type="html"><![CDATA[<p>Ну что ж друзья держите еще некоторые доработки.<br /> - добавил логирование работы самого скрипта с перезаписю лога при каждом новом запуске<br /> - поменял структуру скрипта, для удобства чтения</p><p><strong>ВНИМАНИЕ!</strong> Вопросы:<br /> №1 - как правильней написать функцию удаления обработанных файлов, при условии что запрос в БД прошел успешно<br /> №2 - как исключить из считывания лог-файла целую строку что начинается на знак &quot;#&quot;, пробовал и Left&#039;ом , но при этом ругается на UBound(неправильный тип переменной stringArray).</p><p>Сам код: (он рабочий, но вот нужно усовершенствовать)<br /></p><div class="codebox"><pre><code>del_vbslog = True
files_move = True
log_reader = True
Dim SourceFolder, pathTo, idx, file, FSO, FileLog
SourceFolder = &quot;D:\Temp&amp;logs\WebLogFiles\W3SVC1&quot;
pathTo = SourceFolder + &quot;\Export_To_Oracle&quot;
Set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
FileLog = Left(WScript.ScriptName,(Len(WScript.ScriptName)-4)) &amp; &quot;_&quot; &amp; DatePart(&quot;yyyy&quot;,Date) &amp; &quot;_&quot; &amp; DatePart(&quot;m&quot;,Date) &amp; &quot;_&quot; &amp; DatePart(&quot;d&quot;,Date) &amp; &quot;.&quot; &amp; &quot;log&quot;

Main()
&#039;-----------------------------------------------------------
Sub Main()
  If del_vbslog Then DelVbsLog()
  If files_move Then LogFilesMove()
  If log_reader Then LogReader()
End Sub

&#039;-----------------------------------------------------------
&#039;Удаляем лог-файл нашего скрипта, если таковой существует
Sub DelVbsLog()
  If FSO.FileExists(FileLog) Then
    Set File = FSO.GetFile(FileLog)
    Const DELETE_FILE_FORCE = True
    File.Delete DELETE_FILE_FORCE
  End If
End Sub
&#039;-----------------------------------------------------------

&#039;-----------------------------------------------------------
&#039;Перемещаем лог-файлы в папку Export_To_Oracle
Sub LogFilesMove()

If Not FSO.FolderExists(pathTo) Then
    FSO.CreateFolder pathTo
End If
On Error Resume Next
WriteLog(&quot;Перемещены\скопированы следующие файлы: &quot; &amp; vbCrLf)
For Each File In FSO.GetFolder(SourceFolder).Files
    path_to_file=pathTo &amp; &quot;\&quot; &amp; File.Name
    if FSO.FileExists(path_to_file) then FSO.DeleteFile(path_to_file)
    FSO.MoveFile File.Path, path_to_file
    If Err.number &lt;&gt; 70 Then Log_Ok_Or_ErrorAndQuit &#039;исключаем ошибку если файл занят другим процессом
    WriteLog(path_to_file)
Next
End Sub

Sub Log_Ok_Or_ErrorAndQuit
    If Err.number &lt;&gt; 0 Then
        WriteLog &quot;Error #&quot; + Err.number + &quot; :&quot; + Err.Description, 1
        WScript.Quit
    End if
End Sub

&#039;-----------------------------------------------------------
&#039;Обрабатываем каждый лог-файл и производим запись в БД
Sub LogReader()

Dim TheFolder, TheFiles, fileName
Set TheFolder = FSO.GetFolder(pathTo)
Set TheFiles = TheFolder.Files

Set OraSession = CreateObject(&quot;OracleInProcServer.XOraSession&quot;)
Set OraDatabase = OraSession.OpenDatabase(&quot;oracle.test&quot;, &quot;root/password&quot;, 0)
OraDatabase.ExecuteSQL(&quot;ALTER SESSION SET NLS_NUMERIC_CHARACTERS= &#039;.`&#039;&quot;)

For Each fileName In TheFiles

  if Not FSO.FileExists(fileName) Then
      Set file = FSO.CreateTextFile(fileName, true)
      file.Close
  End if

  Set file = FSO.GetFile(fileName)

  Dim text
  Set text = FSO.OpenTextFile(fileName, 1, false)

  WriteLog(vbCrLf &amp; &quot;Был обработан файл: &quot; &amp; vbCrLf &amp; fileName)
  
  Dim stringArray, lastString
  text.SkipLine
  text.SkipLine
  text.SkipLine
  text.SkipLine
  stringArray = Split(text.ReadAll, Chr(13), -1, 1)
  text.Close

    WriteLog(vbCrLf &amp; &quot;Выполнены следующие действия: &quot;)
  idx = UBound(stringArray)
  isRunCommit = false
  Do Until idx &lt; 0
    lastString = stringArray(idx)
    if Len(lastString) &gt; 0 Then
      Dim data, time, cs_method, cs_uri_stem, cs_uri_query, s_port, c_ip, sc_status, sc_substatus, sc_bytes, cs_bytes, time_taken, parsing, count
      parsing = Split(lastString, &quot; &quot;)
      count = UBound(parsing)
      
      if (count &gt; 5) Then
        data = parsing(0)
        time = parsing(1)
        cs_method = parsing(2)
        cs_uri_stem = parsing(3)
        cs_uri_query = parsing(4)
        s_port = parsing(5)
        c_ip = parsing(6)
        sc_status = parsing(7)
        sc_substatus = parsing(8)
        sc_bytes = parsing(9)
        cs_bytes = parsing(10)
        time_taken = parsing(11)

        if cs_uri_query = &quot;-&quot; Then &#039;если вместо данных прочерк, то заменяем на пустоту. У вас может такого не быть, либо встречатся другой символ
          cs_uri_query = &quot;&quot;
        End if

        sql = &quot;INSERT INTO STATS_SITE VALUES ( to_date(&#039;&quot; &amp; data &amp; &quot; &quot; &amp; time &amp; &quot;&#039;, &#039;yyyy-mm-dd hh24:mi:ss&#039;), &#039;&quot; &amp; cs_method &amp; &quot;&#039;, &#039;&quot; &amp; cs_uri_stem &amp; &quot;&#039;, &#039;&quot; &amp; cs_uri_query &amp; &quot;&#039;, &#039;&quot; &amp; s_port &amp; &quot;&#039;, &#039;&quot; &amp; c_ip &amp; &quot;&#039;, &#039;&quot; &amp; sc_status &amp; &quot;&#039;, &#039;&quot; &amp; sc_substatus &amp; &quot;&#039;, &#039;&quot; &amp; sc_bytes &amp; &quot;&#039;, &#039;&quot; &amp; cs_bytes &amp; &quot;&#039;, &#039;&quot; &amp; time_taken &amp; &quot;&#039;)&quot;
        OraDatabase.ExecuteSQL(sql)
        isRunCommit = true
        WriteLog(vbCrLf &amp; sql)
      End If
    End If
    idx = idx - 1
  Loop
  if isRunCommit = True Then
  &#039;file.Delete &#039;как бы удаление файла после удачной обработки и добавления в базу
  &#039;OraSession.CommitTrans
  end if
  &#039;if isRunCommit = True Then OraSession.CommitTrans
Next
End Sub

&#039;-----------------------------------------------------------
&#039;Функция записи лог файла

Function WriteLog(Text)
   Const ForReading = 1, ForWriting = 2
   Dim f
   
  Set f = FSO.OpenTextFile(FileLog, 8, True)    
    f.Write Text &amp; vbCrLf
    f.Close
   
End Function</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Progressive]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26264</uri>
			</author>
			<updated>2010-10-01T13:00:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=39793#p39793</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Обработчик текстовых логов, вставка полученных данных в Oracle]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=39601#p39601" />
			<content type="html"><![CDATA[<p>Как обычно, <a href="http://www.script-coding.com/WSH/FileSystemObject.html">FSO</a>-&gt;<a href="http://www.script-coding.com/WSH/FileSystemObject.html#3.20.">.GetFolder(…)</a>-&gt;<a href="http://www.script-coding.com/WSH/FileSystemObject.html#6.2.15.">Files</a>, второй пример из последней ссылки позволяет перебрать все файлы в папке.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2010-09-23T18:08:39Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=39601#p39601</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Обработчик текстовых логов, вставка полученных данных в Oracle]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=39600#p39600" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>Кстати, я и не думал, что .ReadAll читает с позиции указателя. Полагал, что только целиком, весь файл с начала. Спасибо.</p></blockquote></div><p>На здаровье. Обращяйтесь если что <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /></p><p>Кстати интересный вариант с Left! Но мне кажется рид алл подходит для небольших файлов, лучше все таки обрабатывать по строчно. Завтра попробую и так и так, посмотрим что быстрее окажется <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p>2 Rumata<br />Спс, я принцип то понимал... ну попробуем завтра практически, если не получится то обращусь <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p>Кстати, а никто не подскажет как обрабатывать все лог-файлы которые находятся в папке по очереди, там по дате создания например или другому атрибуту?<br />К примеру есть папка <strong>Temp</strong> а в ней штук 30 файлов разришения *.log и во всех одинаковая структура, само собой!</p><p>Вот названия к примеру:<br /></p><div class="codebox"><pre><code>ex10092008.log
ex10092009.log
ex10092010.log
ex10092011.log
ex10092012.log
ex10092013.log
ex10092014.log
ex10092015.log
...
ex10092023.log
ex10092100.log
ex10092101.log
ex10092102.log
ex10092103.log</code></pre></div><p>Вот такой вид будет файлов в папке. И вот как бы каждый обработать этим скриптом что я написал <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /> Не будешь жеш менять ручьками название лог-файла в скрипте каждый рас...<br />Кто что думает по этому поводу?</p>]]></content>
			<author>
				<name><![CDATA[Progressive]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26264</uri>
			</author>
			<updated>2010-09-23T17:42:42Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=39600#p39600</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Обработчик текстовых логов, вставка полученных данных в Oracle]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=39599#p39599" />
			<content type="html"><![CDATA[<p>Наверное, можно оставить и .ReadAll(), наподобие:<br /></p><div class="codebox"><pre><code>…
With objFSO.OpenTextFile(&quot;…&quot;)
    Do Until .AtEndOfStream
        strLine = .ReadLine
        
        If Left(Trim(strLine)) &lt;&gt; &quot;#&quot; Then
            strArray = Split(strLine &amp; vbCr &amp; .ReadAll, vbCr) &#039; А тут в файле точно только «0x0D», а не «0x0D,0x0A»?
            
            .Close
            
            Exit Do
        End If
    Loop
    
    .Close
End With
…</code></pre></div>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2010-09-23T17:24:27Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=39599#p39599</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Обработчик текстовых логов, вставка полученных данных в Oracle]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=39598#p39598" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>while ( ! stream.AtEndOfStream ) {
    var line = stream.ReadLine();
    if ( line.charAt(0) == &#039;#&#039; ) {
        // Пропустить строку, начинающуюся с символа #
        continue;
    }
    // Работаем со строкой
}</code></pre></div><p>Простите, что на JScript. Просто на нем все время &quot;думаю&quot;. Но для иллюстрации алгоритма это не принципиально. Если что-то непонятно, готов перевести на VBScript.</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2010-09-23T17:07:36Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=39598#p39598</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Обработчик текстовых логов, вставка полученных данных в Oracle]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=39597#p39597" />
			<content type="html"><![CDATA[<p>Кстати, я и не думал, что .ReadAll читает с позиции указателя. Полагал, что только целиком, весь файл с начала. Спасибо.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2010-09-23T16:18:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=39597#p39597</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Обработчик текстовых логов, вставка полученных данных в Oracle]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=39596#p39596" />
			<content type="html"><![CDATA[<p>А, Вы в этом смысле… теперь ясно.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2010-09-23T16:14:13Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=39596#p39596</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Обработчик текстовых логов, вставка полученных данных в Oracle]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=39595#p39595" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><div class="quotebox"><cite>Progressive пишет:</cite><blockquote><p>Решил все проблемы кроме толкового СкипЛайна.</p></blockquote></div><p>А чем не толковый?</p></blockquote></div><p>А вдруг поставится IIS другой версии, а там закоментированных строк, что за знаком # будет всего 3? или наоборот 5?</p>]]></content>
			<author>
				<name><![CDATA[Progressive]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26264</uri>
			</author>
			<updated>2010-09-23T16:03:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=39595#p39595</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Обработчик текстовых логов, вставка полученных данных в Oracle]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=39588#p39588" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Progressive пишет:</cite><blockquote><p>Решил все проблемы кроме толкового СкипЛайна.</p></blockquote></div><p>А чем не толковый?</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2010-09-23T13:37:03Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=39588#p39588</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Обработчик текстовых логов, вставка полученных данных в Oracle]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=39584#p39584" />
			<content type="html"><![CDATA[<p>Ура <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />Решил все проблемы кроме толкового СкипЛайна.</p><p>Вот кушайте полностью рабочий скрипт:</p><div class="codebox"><pre><code>Dim FSO, file, fileName
fileName = &quot;C:\Temp\ex10091011.log&quot;

Set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
if Not FSO.FileExists(fileName) Then
    Set file = FSO.CreateTextFile(fileName, true)
    file.Close
End if

Set file = FSO.GetFile(fileName)

Dim text
Set text = FSO.OpenTextFile(fileName, 1, false)

Dim stringArray, lastString, idx
text.SkipLine
text.SkipLine
text.SkipLine
text.SkipLine
stringArray = Split(text.ReadAll, Chr(13), -1, 1)

text.Close

idx = UBound(stringArray)
Do Until idx &lt; 0
  lastString = stringArray(idx)
  if Len(lastString) &gt; 0 Then
    Dim data, time, cs_method, cs_uri_query, s_port, c_ip, cs_host, sc_status, sc_substatus, sc_bytes, cs_bytes, time_taken, parsing, count
    parsing = Split(lastString, &quot; &quot;)
    count = UBound(parsing)
      
    if (count &gt; 5) Then
      data = parsing(0)
      time = parsing(1)
      cs_method = parsing(2)
      cs_uri_query = parsing(3)
      s_port = parsing(5)
      c_ip = parsing(6)
      cs_host = parsing(7)
      sc_status = parsing(8)
      sc_substatus = parsing(9)
      sc_bytes = parsing(10)
      cs_bytes = parsing(11)
      time_taken = parsing(12)

      Set OraSession = CreateObject(&quot;OracleInProcServer.XOraSession&quot;)
      Set OraDatabase = OraSession.OpenDatabase(&quot;oracle.test&quot;, &quot;testUser/testPass&quot;, 0)
      OraDatabase.ExecuteSQL(&quot;ALTER SESSION SET NLS_NUMERIC_CHARACTERS= &#039;.`&#039;&quot;)
      sql = &quot;INSERT INTO STATS_SITE VALUES ( to_date(&#039;&quot; &amp; data &amp; &quot; &quot; &amp; time &amp; &quot;&#039;, &#039;yyyy-mm-dd hh24:mi:ss&#039;),&#039;&quot; &amp; cs_method &amp; &quot;&#039;, &#039;&quot; &amp; cs_uri_query &amp; &quot;&#039;, &#039;&quot; &amp; s_port &amp; &quot;&#039;, &#039;&quot; &amp; c_ip &amp; &quot;&#039;, &#039;&quot; &amp; cs_host &amp; &quot;&#039;, &#039;&quot; &amp; sc_status &amp; &quot;&#039;, &#039;&quot; &amp; sc_substatus &amp; &quot;&#039;, &#039;&quot; &amp; sc_bytes &amp; &quot;&#039;, &#039;&quot; &amp; cs_bytes &amp; &quot;&#039;, &#039;&quot; &amp; time_taken &amp; &quot;&#039;)&quot;
      OraDatabase.ExecuteSQL(sql)
    End If

  End If
  idx = idx - 1
Loop</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Progressive]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26264</uri>
			</author>
			<updated>2010-09-23T09:47:43Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=39584#p39584</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Обработчик текстовых логов, вставка полученных данных в Oracle]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=39582#p39582" />
			<content type="html"><![CDATA[<p>Ну вот после некоторых махинаций еще один вариант решения задачи №2:</p><div class="codebox"><pre><code>Dim FSO, file, fileName
fileName = &quot;С:\Temp\ex10091011.log&quot;

Set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
if Not FSO.FileExists(fileName) Then
    Set file = FSO.CreateTextFile(fileName, true)
    file.Close
End if

Set file = FSO.GetFile(fileName)

Dim text
Set text = FSO.OpenTextFile(fileName, 1, false)

Dim stringArray, lastString, idx
stringArray = Split(text.ReadAll, Chr(10), -1, 1)

text.Close

idx = UBound(stringArray)
Do Until idx &lt; 0
  lastString = stringArray(idx)
  if Len(lastString) &gt; 0 Then
    Dim data, time, cs_method, cs_uri_query, s_port, c_ip, cs_host, sc_status, sc_substatus, sc_bytes, cs_bytes, time_taken, parsing, count
    parsing = Split(lastString, &quot; &quot;)
    count = UBound(parsing)
      
    if (count &gt; 13) Then
      data = parsing(0)
      time = parsing(1)
      cs_method = parsing(2)
      cs_uri_query = parsing(3)
      s_port = parsing(5)
      c_ip = parsing(6)
      cs_host = parsing(7)
      sc_status = parsing(8)
      sc_substatus = parsing(9)
      sc_bytes = parsing(10)
      cs_bytes = parsing(11)
      time_taken = parsing(12)
      
    End If
  End If
  
  idx = idx - 1
Loop

&#039;insert to oracle
Set OraSession = CreateObject(&quot;OracleInProcServer.XOraSession&quot;)
Set OraDatabase = OraSession.OpenDatabase(&quot;oracle.test&quot;, &quot;testUser/testPass&quot;, 0)
OraDatabase.ExecuteSQL(&quot;ALTER SESSION SET NLS_NUMERIC_CHARACTERS= &#039;.`&#039;&quot;)
OraDatabase.ExecuteSQL(&quot;ALTER SESSION SET NLS_DATE_FORMAT = &#039;dd.mm.yyyy hh24:mi:ss&#039;&quot;)
OraDatabase.ExecuteSQL(&quot;INSERT INTO STATS_SITE VALUES ( &#039;&quot; &amp; data &amp; &quot;&#039;, &#039;&quot; &amp; time &amp; &quot;&#039;,  &#039;&quot; &amp; cs_method &amp; &quot;&#039;, &#039;&quot; &amp; cs_uri_query &amp; &quot;&#039;, &#039;&quot; &amp; s_port &amp; &quot;&#039;, &#039;&quot; &amp; c_ip &amp; &quot;&#039;, &#039;&quot; &amp; cs_host &amp; &quot;&#039;, &#039;&quot; &amp; sc_status &amp; &quot;&#039;, &#039;&quot; &amp; sc_substatus &amp; &quot;&#039;, &#039;&quot; &amp; sc_bytes &amp; &quot;&#039;, &#039;&quot; &amp; cs_bytes &amp; &quot;&#039;, &#039;&quot; &amp; time_taken &amp; &quot;&#039;)&quot;)</code></pre></div><p>Осталось решить 2 проблемы:<br />1. Как исключить считывание данных с первых 4-ох строк (Интуитивно понятно что нужно использовать <strong>SkipLine</strong>, но как его использовать в этом коде? )<br />2. Как правильно отправить запрос в базу Oracle, после каждого считывания строки.</p><p>Объясню на пальцах пункт №2.<br />После первой обработки самой последней строки получаю такие данные:<br /></p><div class="codebox"><pre><code>      data = 2010-09-10
      time = 11:04:46
      cs_method = GET
      cs_uri_query = /person.html
      s_port = 8080
      c_ip = 127.0.0.1
      cs_host = test.com.ua:8080
      sc_status = 404
      sc_substatus = 0
      sc_bytes = 2102
      cs_bytes = 694
      time_taken = 0</code></pre></div><p>Эти данные должны добавится в БД</p><p>После обработки цикла второй рас уже передпоследней строки получаем такие данные:<br /></p><div class="codebox"><pre><code>      data = 2010-09-10
      time = 11:04:29
      cs_method = GET
      cs_uri_query = /index.html
      s_port = 8080
      c_ip = 127.0.0.1
      cs_host = test.com.ua:8080
      sc_status = 200
      sc_substatus = 0
      sc_bytes = 3902
      cs_bytes = 724
      time_taken = 312</code></pre></div><p>Опять таки эти данные должны добавится в БД<br />ну и так дальше...</p><p>Вот вопрос - как это реализовать то? <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[Progressive]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26264</uri>
			</author>
			<updated>2010-09-23T08:06:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=39582#p39582</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Обработчик текстовых логов, вставка полученных данных в Oracle]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=39577#p39577" />
			<content type="html"><![CDATA[<p>все также как и во всех sql-запросах <a href="http://aam.ugpl.de/?q=ru/node/815">http://aam.ugpl.de/?q=ru/node/815</a><br /></p><div class="codebox"><pre><code>INSERT INTO ТАБЛИЦА VALUES (&#039;строка&#039;, &#039;дата&#039;, число)</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2010-09-22T18:19:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=39577#p39577</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Обработчик текстовых логов, вставка полученных данных в Oracle]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=39575#p39575" />
			<content type="html"><![CDATA[<p>Я бы тоже поменял язык <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Но увы другого пока не дано...<br />Спасибо за вариант решения задачи, но увы не подходит...</p><p>Может кто-то хотябы знает как написать в VBS-е правильно <strong>OraDatabase.ExecuteSQL(&quot;INSERT INTO</strong> ... &quot;)<br />Что после инсёрт инто? Так же как и в обычном запросе по логике, но я буду вставлять не численные параметры а переменные которые содержат в себе параметры...<br />Что-то я совсем запутался... <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[Progressive]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26264</uri>
			</author>
			<updated>2010-09-22T17:56:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=39575#p39575</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Обработчик текстовых логов, вставка полученных данных в Oracle]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=39574#p39574" />
			<content type="html"><![CDATA[<p>Я бы сделал просто - читать входной поток построчно и выпуливать в выходной поток готовые sql-запросы:<br /></p><div class="codebox"><pre><code>cscript log2sql.vbs &lt; C:\Logs\ex10091011.log &gt; C:\Temp\ex10091011.sql</code></pre></div><p>А если оракловая консоль поддерживает конвейеры то и так<br /></p><div class="codebox"><pre><code>cscript log2sql.vbs &lt; C:\Logs\ex10091011.log | plsql опции соединения с БД</code></pre></div><p>Вот только язык поменял бы VBscript на JScript. У него более гибкие стредства работы со строками.</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2010-09-22T17:07:24Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=39574#p39574</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBS: Обработчик текстовых логов, вставка полученных данных в Oracle]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=39571#p39571" />
			<content type="html"><![CDATA[<p>Доброго времени суток.<br /><span class="bbu">Необходимо:</span><br />VBS обработчик текстовых логов, который умеет вставлять полученные данные, из лог-файлов, в Oracle.</p><p><span class="bbu">Имеется:</span><br /> - лог-файлы такого типа: &quot;ex10091011.log&quot; (создан сервером 10.09.2010, с чего следует, что в имени файла сначало стоит год, месяц, число, и &quot;11&quot; - время, когда был создан лог в часах), которые находятся в определенной папке (к примеру С:\Logs\)<br /> - в каждом из этих файлов первые 4 строки считывать ненужно (Там находится информация за знаком &quot;#&quot; о том, что это за лог, и кто его создал, и какие поля он в себе содержит через разделитель пробел)</p><p>Вот и само содержание лог-файла:<br /></p><div class="codebox"><pre><code>#Software: Microsoft Internet Information Services 6.0
#Version: 1.0
#Date: 2010-09-10 11:04:29
#Fields: date time cs-method cs-uri-stem cs-uri-query s-port c-ip cs-host sc-status sc-substatus sc-bytes cs-bytes time-taken 
2010-09-10 11:04:29 GET /index.html - 8080 127.0.0.1 test.com.ua:8080 200 0 3902 724 312
2010-09-10 11:04:46 GET /person.html - 8080 127.0.0.1 test.com.ua:8080 404 0 2102 694 0</code></pre></div><p>- в Oracle создана таблица (STATS_SITE) с такими же полями что и в лог-файле:<br />| DATA | TIME | CS_METHOD | CS_URI_STEM | CS_URI_QUERY | S_PORT | C_IP | CS_HOST | SC_STATUS | SC_SUBSTATUS | SC_BYTES | CS_BYTES | TIME_TAKEN |<br />(Разделитель &quot;|&quot; вставлен для удобства чтения)</p><br /><p><span class="bbu">Постановка задачи:</span><br /> - считать каждое поле с каждой строки лог-файла(2010-09-20, 11:04:29, GET, /index.html, 8080, 127.0.0.1, test.com.ua:8080, 200, 0, 3902, 724, 312) и добавить в таблицу оракла STATS_SITE по соответственным полям. </p><p>Например:<br /> - в строке №5 первое поле, до первого пробела, имеет вид <strong>2010-09-10</strong>, его нужно считать с лога и добавить в Oracle таблицу <strong>STATS_SITE</strong> в ячейку <strong>DATA</strong>, ну и так дальше...</p><br /><p><span class="bbu">Мои размышления.</span><br />&nbsp; &nbsp;<strong>Часть 1</strong>. Первое что лучше сделать - скопировать из папки, куда генерируются лог-файлы сервером, все логи, к примеру за сутки, в новую папку - &quot;Temp&quot;(в этой папке будут содержатся те лог-файлы которые были созданы в период между последними запусками скрипта), если скопировать один из логов не удалость, то и фиг с ним пусть остается, поскольку планировщик позже запустит скрипт снова и занятый процессом лог-файл уже будет свободен. Дальше очистить корневую папку (С:\Logs\ - это делается для очистки диска на котором работает сервер, ибо с практики этих лог-файлов потом создается на сотни мегабайт, что очень плохо), потом создать еще одну папку &quot;AllLogs&quot; - в ней будут хранится логи за период одного месяца и каждые 30 дней очищятся, мало ли, а вдруг сервер оракла упадет.<br />&nbsp; &nbsp;Эту часть я решил. Скрипт создан и чудесно работает. <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /></p><p>&nbsp; &nbsp;<strong>Часть 2</strong>. Процес считывания лог-файла. Теоретически понятно, что нужно использовать FSO, но как описать нужные мне поля?Создать временный файл и записать построчно все поля, разделенные в каждой строке пробелом, что нужны мне и сделать запрос в базу, но как это сделать максимально безболезненно?<br />&nbsp; &nbsp; Если позволите я выложу где я &quot;хожу&quot; вокруг да около, а вы если не сложно подскажите практическими примерами что да как...</p><div class="codebox"><pre><code>Dim FSO, file, fileName
fileName = &quot;С:\Temp\ex10091011.log&quot;

Set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
if Not FSO.FileExists(fileName) Then
    Set file = FSO.CreateTextFile(fileName, true)
    file.Close
End if

Set file = FSO.GetFile(fileName)

Dim text
Set text = FSO.OpenTextFile(fileName, 1, false)

Dim stringArray, lastString, idx
stringArray = Split(text.ReadAll, Chr(10), -1, 1)

text.Close

idx = UBound(stringArray)
Do Until idx &lt; 0
  lastString = stringArray(idx)
  if Len(lastString) &gt; 0 Then
    Dim data, time, cs-method, cs-uri-stem, cs-uri-query, s-port, c-ip, cs-host, sc-status, sc-substatus, sc-bytes, cs-bytes, time-taken, parsing, count
    parsing = Split(lastString, &quot; &quot;)
    count = UBound(parsing)
      
    if (count &gt; 13) Then
      data = parsing(0)
      time = parsing(1)
      cs-method = parsing(2)
      cs-uri-stem = parsing(3)
      cs-uri-query = parsing(4)
      s-port = parsing(5)
      c-ip = parsing(6)
      cs-host = parsing(7)
      sc-status = parsing(8)
      sc-substatus = parsing(9)
      sc-bytes = parsing(10)
      cs-bytes = parsing(11)
      time-taken = parsing(12)
        
&#039; ??????????????????????
&#039; ?????????????????????? по идее цикл если i&gt;13 then ??? то что? 
      
    End If
  End If
  
  idx = idx - 1
Loop


&#039;Конектимся к базе и отправляем полученные данные в таблицу

Set OraSession = CreateObject(&quot;OracleInProcServer.XOraSession&quot;)
Set OraDatabase = OraSession.OpenDatabase(&quot;oracle.test&quot;, &quot;testUser/testPass&quot;, 0)
OraDatabase.ExecuteSQL(&quot;ALTER SESSION SET NLS_NUMERIC_CHARACTERS= &#039;.`&#039;&quot;)
OraDatabase.ExecuteSQL(&quot;ALTER SESSION SET NLS_DATE_FORMAT = &#039;dd.mm.yyyy hh24:mi:ss&#039;&quot;)
OraDatabase.ExecuteSQL(&quot;INSERT INTO STATS_SITE VALUES ( &quot; &amp; data &amp; &quot;, &quot; &amp; time &amp; &quot;,  &quot; &amp; cs-method &amp; &quot;, &quot; &amp; cs-uri-stem &amp; &quot;, &quot; &amp; cs-uri-query &amp; &quot;, &quot; &amp; s-port &amp; &quot;, &quot; &amp; c-ip &amp; &quot;, &quot; &amp; cs-host &amp; &quot;,&quot; &amp; sc-status &amp; &quot;,&quot; &amp; sc-substatus &amp; &quot;, &quot; &amp; sc-bytes &amp; &quot;, &quot; &amp; cs-bytes &amp; &quot;, &quot; &amp; time-taken &amp; &quot;)&quot;)</code></pre></div><p>Код с ошибками, &quot;возможно&quot; специальными... Это сделанно с целью отсеивания ответов вида: &quot;да зайди в гугл там все есть&quot;, &quot;учите матчасть&quot; и т.д. и т.п.<br />Мне нужны практические примеры!</p><p>З.Ы. Человек который дельно поможет не останется без материального &quot;Спасибо&quot;! <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[Progressive]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26264</uri>
			</author>
			<updated>2010-09-22T12:15:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=39571#p39571</id>
		</entry>
</feed>
