powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Парсер тексовых логов
6 сообщений из 6, страница 1 из 1
Парсер тексовых логов
    #38704749
GutenMorgan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите, пожалуйста, сделать парсер текстовых логов (*.txt) для Access.
Вид логов:
=========
User: Ivanov
IP: 192.168.111.12
=========
<date> 12.07.2014 </date>
12.07.2014 18:50:01 : Запуск копирования
12.07.2014 18:59:10 : Завершение копирования

=========
User: Petrov
IP: 192.168.111.10
=========
<date> 12.07.2014 </date>
12.07.2014 10:01:32 : Запуск копирования
12.07.2014 11:12:07 : Завершение копирования

На выходе должны получить таблицу:

User IP SessionDate CopyTime DescriptionIvanov 192.168.111.1212.07.201412.07.2014 18:50:01Запуск копированияIvanov 192.168.111.1212.07.201412.07.2014 18:59:10Завершение копированияPetrov 192.168.111.1012.07.201412.07.2014 10:01:32Запуск копированияPetrov 192.168.111.1012.07.201412.07.2014 11:12:07Завершение копирования

Заранее спасибо за любую помощь.
...
Рейтинг: 0 / 0
Парсер тексовых логов
    #38705164
GutenMorgan, стандартных способов нет. Файл нужно читать построчно (или целиком) средствами VBA (или FSO.TextStream, или ADODB.Stream), анализировать каждую строку, вычленять требуемые данные и добавлять записи в Recordset, открытый на таблице-получателе.
Вот пример процедуры для вашего случая:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Sub DeribanLog()
Const sPath = "C:\Temp\Log.txt"
Dim i&, j&, s$, v, v1
'Файл открывается на чтение, считывается всё содержимое, файл закрывается.
    i = FreeFile: Open sPath For Input As i: s = Input(LOF(i), i): Close i
'Текст преобразуется в массив строк (вместо vbCrLf может быть vbCr или vbLf).
    v = Split(s, vbCrLf)
 
Dim arr(0 To 4)
 For i = LBound(v) To UBound(v)
    s = v(i)
  If s Like "User:*" Then
    Erase arr
    arr(0) = Mid$(s, 7)
  ElseIf s Like "IP:*" Then
    arr(1) = Mid$(s, 5)
  ElseIf s Like "<date>*" Then
    arr(2) = Mid$(s, 8, 10)
    For j = 1 To 2
        i = i + 1
        s = v(i)
        arr(3) = Left$(s, 19)
        arr(4) = Mid$(s, 23)
Debug.Print arr(0); Tab; arr(1); Tab; arr(2); Tab; arr(3); Tab; arr(4)
    Next j
  End If
 Next i
End Sub


Строка с Debug.Print выводит результаты в окно отладки. Вместо нее надо выполнить добавление записи в Recordset.
...
Рейтинг: 0 / 0
Парсер тексовых логов
    #38705166
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GutenMorgan,
Открываешь лог на чтение, читаешь построчно, анализируешь каждую строку и пишешь соответствующие данные в таблицу.
Примеров на чтение бесконечное множество. Анализ - не сложный:

"=========" готовишься читать первую строчку с "User"
если сейчас приходит строчка, начинающаяся на "User", парсишь ее и пишешь новую строку в рекордсет или готовишь новый инсерт.
Если приходит строка не содержащая "User" в первых символах - решаешь сам что делать.
Если все нормально ждешь в след строке IP. Пришло IP, парсишь строку и пишешь в рекордсет или готовишь строку для инсерта
ну и так далее
...
Рейтинг: 0 / 0
Парсер тексовых логов
    #38705631
GutenMorgan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев ),
Большое спасибо! Работает как надо, только в массиве с описанием arr(4) сбивается кодировка; в окне дебага и после вставки видны абракадабры:
Завершение копирования

Не подскажете, как это можно исправить? Исходный файл в Windows-1251
...
Рейтинг: 0 / 0
Парсер тексовых логов
    #38705759
GutenMorganв массиве с описанием arr(4) сбивается кодировка; в окне дебага и после вставки видны абракадабры:
Завершение копирования А в строке до занесения в массив? Или в считанном из файла тексте?
GutenMorganИсходный файл в Windows-1251 Вы уверены? Если файл открывать в Ворде, какую кодировку предлагает?
Или отткрыть в блокноте, а затем "Сохранить как" - какая кодировка высвечивается?
Может файл выложите?
...
Рейтинг: 0 / 0
Парсер тексовых логов
    #38707219
GutenMorgan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев ),

Спасибо за наводку, дело действительно оказалось в исходной кодировке логов. Поменял в настройках самой софтины формат вывода, все стало ок.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Парсер тексовых логов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]