AndVGri
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору 'Функция кодирования текста в массив байтов, по условию 3-го дублирования Public Function CodeMajor(ByVal thisText As String) As Byte() Dim vResult() As Byte, vLength As Long Dim i As Long, vCode As Byte vLength = 3& * Len(thisText) 'определим требуемый размер массива ReDim vResult(0& To vLength - 1&) For i = 0& To vLength - 1& Step 3& 'заполнение кодами 'получить код символа и продублировать трижды vCode = CByte(Asc(Mid$(thisText, i \ 3& + 1&, 1&))) vResult(i) = vCode: vResult(i + 1&) = vCode: vResult(i + 2&) = vCode Next i CodeMajor = vResult End Function 'Функция декодирования массива, по условию 3-го дублирования, в текст Public Function DecodeMajor(ByRef thisArray() As Byte) As String Dim vFirst As Long, vLast As Long Dim sResult As String, i As Long 'определим границы массива vFirst = LBound(thisArray) vLast = UBound(thisArray) 'проверим на требование кратности 3 и выдадим сообщение об ошибке If ((vLast - vFirst + 1&) Mod 3&) <> 0& Then MsgBox "Число элемнетов массива не кратно 3", vbCritical, "Ошибка" Err.Raise 13 End If For i = vFirst To vLast Step 3& If (thisArray(i) = thisArray(i + 1&)) Or (thisArray(i) = thisArray(i + 2&)) Then sResult = sResult & Chr$(CLng(thisArray(i))) ElseIf thisArray(i + 1&) = thisArray(i + 2&) Then sResult = sResult & Chr$(CLng(thisArray(i + 1&))) Else sResult = sResult & "_" 'если не равных пар - заменяем на "_" End If Next i DecodeMajor = sResult End Function | Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 18:21 18-04-2007 | Исправлено: AndVGri, 19:49 18-04-2007 |
|