Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Basic / VBA


Хостинг Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг на Windows 2008

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

Чемпионы рейтинга экспертов в этой рассылке

Шичко Игорь
Статус: Студент
Рейтинг: 265
∙ повысить рейтинг >>
Moryarty
Статус: 6-ой класс
Рейтинг: 83
∙ повысить рейтинг >>
megaloman
Статус: Практикант
Рейтинг: 55
∙ повысить рейтинг >>

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Выпуск № 814
от 01.11.2008, 22:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 250, Экспертов: 27
В номере:Вопросов: 2, Ответов: 4

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>

Вопрос № 148561: Здравствуйте! У меня вопрос такого плана: Мне необходимо ПОБИТНО прочитать файл и закодировать его таким образом: например, если БИТ1=0, 2-ой бит=1, 3-ий бит=0, то такая комбинация будет кодироваться буквой А, если другая, например, Б и т.д. Я хоч...


Вопрос № 148620: доброго дня эксперты. помогите с решением задачи по VBA Excel. Я составил небольшуюпрограмку Калькулятор, и хочу привязать вычисления к кнопке CB_ok, но программа выдает ошибку, так как при нажатии на клавиши omB_min_Click(), ComB_mnoz_Click()...

Вопрос № 148.561
Здравствуйте!
У меня вопрос такого плана: Мне необходимо ПОБИТНО прочитать файл и закодировать его таким образом: например, если БИТ1=0, 2-ой бит=1, 3-ий бит=0, то такая комбинация будет кодироваться буквой А, если другая, например, Б и т.д. Я хочу сделать 3-битное кодирование => у меня должно быть 8 комбинаций, каждой из которых будет соответствовать своя буква.
Язык программирования: Visual Basic 6.
ВОПРОС: как это реализовать ?

P.S. То, что надо открыть файл как бинарный я понял, а вот что дальше...
Большое спасибо!
Отправлен: 26.10.2008, 21:19
Вопрос задал: AkaProc (статус: 4-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Furfurol
Здравствуйте, AkaProc!
Это практически кодирование по Base64, ток там используется 6-ти битная база (вместо 3 как у Вас)
Пример http://base.vingrad.ru/view/1969-Realizatsiya-algoritma-BASE64-na-VB
Ответ отправил: Furfurol (статус: 2-ой класс)
Ответ отправлен: 27.10.2008, 11:48

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 148561 на номер 1151 (Россия) | Еще номера >>
  • Переслать WebMoney: руб.
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 4
    Комментарий оценки:
    Спасибо за ответ. Я как раз задал этот вопрос потомучто мне надо обойтись БЕЗ BASE64 и других сторонних компонентов.


    Отвечает: Владимир (C4tnt)
    Здравствуйте, AkaProc!

    Читайте из файла 3 байта в переменные:
    dim b[3] as byte

    и потом расшифровывайте в триплеты таким образом:
    dim triplets[8] as byte

    Если младший бит в файле идёт первым:

    triplets[0] = (b[0] and 7)
    triplets[1] = (b[0] and 56) / 8
    triplets[2] = (b[0] and 192) / 64 + (b[1] and 1)*4
    triplets[3] = (b[1] and 14) / 2
    triplets[4] = (b[1] and 112) / 16
    triplets[5] = (b[1] and 128) / 128 + (b[2] and 3) * 2
    triplets[6] = (b[2] and 28) / 4
    triplets[7] = (b[2] and 224) / 32

    Если старший бит в файле идёт первым:

    triplets[0] = (b[0] and 224) / 32
    triplets[1] = (b[0] and 28) / 4
    triplets[2] = (b[0] and 3) * 2 + (b[1] and 128)/128
    triplets[3] = (b[1] and 112) / 16
    triplets[4] = (b[1] and 14) / 2
    triplets[5] = (b[1] and 1)*4 + (b[2] and 192)/64
    triplets[6] = (b[2] and 56) / 8
    triplets[7] = (b[2] and 7)

    В triplets[n] хранятся трёхбитовые величины. 0 <= triplets[n] <= 7
    ---------
    Теперь к нашим ответам осталось лишь найти вопросы
    Ответ отправил: Владимир (C4tnt) (статус: 5-ый класс)
    Ответ отправлен: 27.10.2008, 17:37

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 148561 на номер 1151 (Россия) | Еще номера >>
  • Переслать WebMoney: руб.
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 148.620
    доброго дня эксперты.
    помогите с решением задачи по VBA Excel.
    Я составил небольшуюпрограмку Калькулятор, и хочу привязать вычисления к кнопке CB_ok, но программа выдает ошибку, так как при нажатии на клавиши omB_min_Click(), ComB_mnoz_Click(), ComB_plus_Click(), ComB_razd_Click() она записывает данные на лист1, и если поле пустое тогда выдается ошибка. помогите упростить алгоритм.
    заранее благодарен.

    Приложение:

    Отправлен: 27.10.2008, 12:35
    Вопрос задал: Алексий (статус: Посетитель)
    Всего ответов: 2
    Мини-форум вопроса >>> (сообщений: 0)

    Отвечает: PsySex
    Здравствуйте, Алексий!
    Это происходит из за того, что пустое поле является как бы нулем...
    Т.е. например в ComB_razd_Click прога пытается делить на 0...
    Вообщем измените коды вычислений следующим образом
    Код:
    Private Sub ComB_razd_Click()
    If Val(pole.Text)<>0 then
    Лист1.Range("A4") = pole.Text
    End If
    pole.Text = ""
    End Sub

    Это защитит от неправильного ввода в поле.
    ---------
    Bom Shankar!
    Ответ отправил: PsySex (статус: Специалист)
    Ответ отправлен: 29.10.2008, 11:31

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 148620 на номер 1151 (Россия) | Еще номера >>
  • Переслать WebMoney: руб.
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Отвечает: Тесленко Евгений Алексеевич
    Здравствуйте, Алексий!
    "простить алгоритм" арифметических операций не удастся.
    А попытаться упростить и обойти в коде деления на ноль, как писал PsySex, можно.
    Код:
    Private Sub CB_ok_Click()

    If ComB_mnoz.Enabled Then pole.Text = Лист1.Range("A2") * nmbFld

    If nmbFld = 0 Then Exit Sub '!

    If ComB_plus.Enabled Then pole.Text = Лист1.Range("A1") + nmbFld
    If ComB_min.Enabled Then pole.Text = Лист1.Range("A3") - nmbFld
    If ComB_razd.Enabled Then pole.Text = Лист1.Range("A4") / nmbFld
    End Sub
    Function nmbFld() As Double '!
    Dim s As String
    s = pole.Text
    If Not IsNumeric(s) Or Len(s) = 0 Then
    Else
    nmbFld = CDbl(s)
    End If
    End Function
    Private Sub CB1_Click()
    If nmbFld = 0 Then Exit Sub '!
    If ComB_plus.Enabled Then pole.Text = Лист1.Range("A1") + nmbFld
    End Sub
    Private Sub CB2_Click()
    If ComB_mnoz.Enabled Then pole.Text = Лист1.Range("A2") * nmbFld
    End Sub
    Private Sub CB3_Click()
    If nmbFld = 0 Then Exit Sub '!
    If ComB_min.Enabled Then pole.Text = Лист1.Range("A3") - nmbFld
    End Sub
    Private Sub CB4_Click()
    If nmbFld = 0 Then Exit Sub '!
    If ComB_razd.Enabled Then pole.Text = Лист1.Range("A4") / nmbFld
    End Sub
    Private Sub ComB_cancel_Click()
    pole.Text = ""
    Лист1.Range("A1:A4") = ""
    End Sub

    Private Sub ComB_min_Click()
    Лист1.Range("A3") = pole.Text
    pole.Text = ""
    End Sub
    Private Sub ComB_mnoz_Click()
    Лист1.Range("A2") = pole.Text
    pole.Text = ""
    End Sub
    Priva te Sub ComB_plus_Click()
    Лист1.Range("A1") = pole.Text
    pole.Text = ""
    End Sub
    Private Sub ComB_razd_Click()
    Лист1.Range("A4") = pole.Text
    pole.Text = ""
    End Sub

    Sub toFld(sVal$) '!
    pole.Text = pole.Text + sVal
    If pole.Text = "0" Then pole.Text = "0."
    End Sub
    Private Sub ComB_tck_Click()
    toFld "."
    End Sub
    Private Sub ComB0_Click()
    toFld "0"
    End Sub
    Private Sub ComB1_Click()
    toFld "1"
    End Sub
    Private Sub ComB2_Click()
    toFld "2"
    End Sub
    Private Sub ComB3_Click()
    toFld "3"
    End Sub
    Private Sub ComB4_Click()
    toFld "4"
    End Sub
    Private Sub ComB5_Click()
    toFld "5"
    End Sub
    Private Sub ComB6_Click()
    toFld "6"
    End Sub
    Private Sub ComB7_Click()
    toFld "7"
    End Sub
    Private Sub ComB8_Click()
    toFld "8"
    End Sub
    Private Sub ComB9_Click()
    toFld "9"
    End Sub
    Private Sub vixod_Click()
    Unload Me
    End Sub

    Евгений.
    Ответ отправил: Тесленко Евгений Алексеевич (статус: Практикант)
    Ответ отправлен: 29.10.2008, 17:36

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 148620 на номер 1151 (Россия) | Еще номера >>
  • Переслать WebMoney: руб.
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вы имеете возможность оценить этот выпуск рассылки.
    Нам очень важно Ваше мнение!
    Оценить этот выпуск рассылки >>

    Отправить вопрос экспертам этой рассылки

    Приложение (если необходимо):

    * Код программы, выдержки из закона и т.п. дополнение к вопросу.
    Эта информация будет отображена в аналогичном окне как есть.

    Обратите внимание!
    Вопрос будет отправлен всем экспертам данной рассылки!

    Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
    экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


    Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
    Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2008, Портал RusFAQ.ru, Россия, Москва.
    Авторское право: ООО "Мастер-Эксперт Про"
    Техподдержка портала, тел.: +7 (926) 535-23-31
    Хостинг: "Московский хостер"
    Поддержка: "Московский дизайнер"
    Авторские права | Реклама на портале

    ∙ Версия системы: 5.9 от 29.10.2008

    Яндекс Rambler's Top100
    RusFAQ.ru | MosHoster.ru | MosDesigner.ru
    RusIRC.ru | Kalashnikoff.ru | RadioLeader.ru

    В избранное