/
AstroJohn
/
MailRobot
Обзор
Документация
Войти
/
AstroJohn
/
MailRobot
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Parser/LogParser/mdlParser.vb
213 строк
8 KB
AstroJohn
1st commit
11 сен 2024, 13:31
11 сен 2024, 13:31
0f57dc5
Код
Авторство
О чём код?
Imports System.Collections.ObjectModel Imports System.ComponentModel Imports System.Text Imports System.Xml.Serialization Namespace LogParser #Region "Типы, определения и интерфейс для парсера" ''' <summary> ''' Интерфейс парсера отчета произвольного формата ''' </summary> ''' <remarks></remarks> <Obsolete("Use Csharp!")> Public Interface IParser Property LogStream As IO.Stream 'ввод потока с отчетом Property ParsedLog As clsParsedLog 'вывод результатов парсинга Property FileName As String Sub ParseLog() End Interface ''' <summary> ''' Форматы отчетов ''' </summary> ''' <remarks></remarks> <Obsolete("Use Csharp!")> Public Enum LOG_FORMAT UNKNOWN = 0 ERMAK = 1 EDI = 2 End Enum ''' <summary> ''' Типы ошибок парсинга ''' </summary> ''' <remarks></remarks> <Obsolete("Use Csharp!")> Public Enum PARSE_ERROR_TYPE NONE = 0 'нет ошибки WARNING = 1 'предупреждение - отчет принимаем BAD = 2 'ошибка - отчет не принимаем, ищем ошибки дальше CRITICAL = 3 'критическая ошибка - отчет не принимаем, останавливаем дальнейший поиск ошибок OTHER_CONTEST = 4 'выслан отчет за другие соревнования End Enum ''' <summary> ''' Типы ошибок парсинга отчета ''' </summary> ''' <remarks></remarks> <Obsolete("Use Csharp!")> Public Enum LOG_PARSE_ERROR_TYPE NONE = 0 'нет ошибки WARNING = 1 'есть предупреждения - отчет принимаем OTHER_CONTEST = 2 'выслан отчет за другие соревнования ERRORS_FOUND = 3 'отчет не принят, так как содержит ошибки FORMATTED_LOG_NOT_FOUND = 4 'файл не является отчетом в требуемом формате End Enum ''' <summary> ''' Типы парсинга строк QSO ''' </summary> ''' <remarks></remarks> <Obsolete("Use Csharp!")> Public Enum QSO_PARSE_METHOD EXACT = 0 'под каждое поле выделены строгие позиции SPLIT = 1 'важен только порядок данных, где они расположены - не важно End Enum ''' <summary> ''' Типы колонок данных в строке QSO ''' </summary> ''' <remarks></remarks> <Obsolete("Use Csharp!")> Public Enum QSO_DATA_COLUMN_TYPE NONE = 0 FREQ = 1 MODE = 2 [DATE] = 3 TIME = 4 CALLSIGN = 5 SENT_RST = 6 SENT_NR = 7 STATION = 8 RCVD_RST = 9 RCVD_NR = 10 End Enum ''' <summary> ''' Класс строки QSO ''' </summary> ''' <remarks></remarks> <Obsolete("Use Csharp!")> Public Class clsParsedQSO Public Freq As Integer Public Mode As String Public Time As Date Public CallSign As String Public SentNr As String Public Stn As String Public RcvdNr As String Public ParseResult As New clsParseResult Public Band As String End Class ''' <summary> ''' Класс строки заголовка отчета ''' </summary> ''' <remarks></remarks> <Obsolete("Use Csharp!")> Public Class clsParsedHeader Public Name As String Public Value As String Public ParseResult As New clsParseResult End Class ''' <summary> ''' Класс результата парсинга ''' </summary> ''' <remarks></remarks> <Obsolete("Use Csharp!")> Public Class clsParseResult Public Type As PARSE_ERROR_TYPE Public Message As String Public Message_Rus As String End Class ''' <summary> ''' Класс результата парсинга отчета ''' </summary> ''' <remarks></remarks> <Obsolete("Use Csharp!")> Public Class clsLogParseResult Public Type As LOG_PARSE_ERROR_TYPE Public Message As String Public Message_Rus As String End Class ''' <summary> ''' Класс результата парсинга всего отчета ''' </summary> ''' <remarks></remarks> <Obsolete("Use Csharp!")> Public Class clsParsedLog Public Format As LOG_FORMAT Public Callsign As String Public Category As String Public Location As String Public Band As String Public ParseResult As New clsLogParseResult Public Encoding As Encoding Public QSOCount As Integer Public EMail As String Public Lines As New ArrayList() Public QSOs As New Collection(Of clsParsedQSO) Public ContestDate As Date? Public Headers As New Collection(Of clsParsedHeader) Public Function GetHeaderValue(ByVal HeaderName As String) As String GetHeaderValue = If(Headers.FirstOrDefault(Function(x) x.Name = HeaderName)?.Value, String.Empty) End Function Public Function GetHeaderValue_All(ByVal HeaderName As String) As String GetHeaderValue_All = If(Join(Headers.Where(Function(x) Left(x.Name, HeaderName.Length) = HeaderName).Select(Function(x) x.Value).ToArray(), Environment.NewLine), String.Empty) End Function Public ClaimedResultsText As String End Class ''' <summary> ''' Класс параметров парсера отчета ''' </summary> ''' <remarks></remarks> <Serializable()> <XmlType("clsParserParameters")> <Obsolete("Use Csharp!")> Public Class clsParserParameters <XmlElement("ContestName")> Public Property ContestName As String <XmlElement("UserFriendlyContestName")> Public Property UserFriendlyContestName As String <XmlElement("UserFriendlyContestNameEn")> Public Property UserFriendlyContestNameEn As String <XmlElement("DateStart")> Public Property DateStart As Date <XmlElement("DateEnd")> Public Property DateEnd As Date <XmlElement("SimplestCheck")> Public Property SimplestCheck As Boolean <XmlElement("QSOParseMethod")> Public Property QSOParseMethod As QSO_PARSE_METHOD <XmlElement("UBNLinkTemplate")> Public Property UBNLinkTemplate As String <XmlElement("ResultsLink")> Public Property ResultsLink As String <XmlElement("HelpText")> Public Property HelpText As String <XmlElement("HelpTextEn")> Public Property HelpTextEn As String <XmlArray("ERMAK_Tags")> <XmlArrayItem("ERMAK_Tag")> Public Property ERMAK_Tags As BindingList(Of clsERMAK_Tag) Public Sub New() ERMAK_Tags = New BindingList(Of clsERMAK_Tag) End Sub End Class ''' <summary> ''' Класс обязательного ключевого слова шапки отчета ''' </summary> ''' <remarks></remarks> <Serializable()> <Obsolete("Use Csharp!")> Public Class clsERMAK_Tag Public Property Tag As String Public Property Count As Integer Public Sub New(Tag_Name As String, Tag_Count As Integer) Tag = Tag_Name Count = Tag_Count End Sub Public Sub New() Tag = String.Empty Count = 0 End Sub End Class #End Region End Namespace