Советы тем, кто программирует на VB & VBA

Листинг 1. Процедуры CodeTableTest и NumberTableTest для совета 254 "Как автоматически определить кодовую таблицу для русских текстов"

Public Sub CodeTableTest _
       (bytSourceArray() As Byte, TableTest() As Single)
       '
       ' Вычисление частоты различных кодов
       ' (для старшей части таблицы 128-255)
       '
       ' ВХОД: bytSourceArray() - байтовый массив кодов символов
       ' ВЫХОД: TableTest(-1) - общее число символов
       ' (без учета кодов перевода строки)
       ' TableTest(0) - общее число кодов 128-255
       ' TableTest(1) - частота в диапазоне &H80-&H8F
       ' ...
       ' TableTest(8) - частота в диапазоне &HF0-&HFF
       '===================================
       Dim i%, k&, Code%
       For i = 0 To 8: TableTest(i) = 0: Next
       For k = LBound(bytSourceArray) To UBound(bytSourceArray)
           Code = bytSourceArray(k)
           If Code <> 10 And Code    <> 13 Then
               TableTest(-1)    = TableTest(-1) + 1
           End If
           If Code > 127 Then
               TableTest(0)    = TableTest(0) + 1
               i =    (Code - 128) \ 16 + 1
               TableTest(i)    = TableTest(i) + 1
           End If
       Next
       For i = 1 To 8:
           TableTest(i) = TableTest(i)    / TableTest(0)
       Next
   End Sub
   
   Public Function NumberTableTest _
       (TableTest() As Single, Lpercent As Single) As Integer
       '
       ' Определение номера кодовой таблицы
       ' ВХОД: TableTest () - см. описание процедуры CodeTableTest
       ' Lpercent - минимальная доля строчных русских букв
       ' ВЫХОД: NumberTableTest = 0 - неопределено
       ' = 1 - DOS (cp866)
       ' = 2 - Windows (cp1251)
       ' = 3 - UNIX (KOI-8)
       ' = 4 - General(ISO 8859-5)
       ' = 5 - Macintosh
   
       '===================================
       NumberTableTest = 0 ' неопределена
   
       If TableTest(7) + TableTest(8) > Lpercent Then
           If TableTest(1) > TableTest(5)    Then
               NumberTableTest    = 5 ' Macintosh
           Else
               NumberTableTest    = 2 ' Windows, cp1251
           End If
       ElseIf TableTest(5) + TableTest(6) > Lpercent Then
           NumberTableTest = 3 ' KOI8 (Unix)
       ElseIf TableTest(7) + TableTest(3) > Lpercent Then
           NumberTableTest = 1 ' DOS (cp866)
       ElseIf TableTest(6) + TableTest(7) > Lpercent Then
           NumberTableTest = 4 ' ISO 8859-5/General
       End If
   End Function 

Возврат

Наш канал на Youtube

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует