Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Кодировка нескольких значений в одно число. Добавлено: 22.07.11 13:40  

Автор вопроса:  me4huk
Добрый день, уважаемые знатоки!

Пишу обработку для учёта заправки картриджей на VBA под Excel. Поскольку с картриджами при их заправке могут проводить определённый ряд операций (всего их не более десятка), есть большое желание представить эти операции в виде двоичных(или шестнадцатиричных, как удобнее) констант и кодировать обработку каждого картриджа в одно десятичное число для записи в ячейку.
Поскольку я, к сожалению, не программист, то никакого представления о способах обратного преобразования такого числа и выявления действительных в каждом конкретном случае констант у меня нет. Я даже не знаю, как правильно называется подобное кодирование/разбор. Не поможете ли кодами/алгоритмами?

Заранее благодарен за внимание. :)

Ответить

  Ответы Всего ответов: 2  

Номер ответа: 1
Автор ответа:
 Ким Чен Ир



Вопросов: 0
Ответов: 140
 Профиль | | #1 Добавлено: 22.07.11 15:09
Ничего сложного.
Это называется установка и проверка битовых флагов.
Каждое действие идентифицируется числом соответствующем степени двойки.
  1. Const MY_ZAPRAVKA = &H1
  2. Const MY_PROTIRKA = &H2
  3. Const MY_XXX1 = &H4
  4. Const MY_XXX2 = &H8
  5. Const MY_XXX3 = &H10
  6. Const MY_XXX4 = &H20
  7. Const MY_XXX5 = &H40
  8. Const MY_XXX6 = &H80

' &H - 'это шеснадцатиричный префикс, так нагляднее.

Ну, и вкурить принцип установки и проверки битов.
  1.  
  2. Dim operation As Long ' суммарное действие
  3.  
  4. operation = MY_ZAPRAVKA Or MY_PROTIRKA ' была проведена заправка и протирка :)
  5. ' занести в ячейку
  6. Cells(1, 1) = operation
  7. '....
  8. ' прочитать из ячейки
  9. operation = Cells(1, 1)
  10. If (operation And MY_PROTIRKA) Then ' проверить, была ли заправка
  11.  ' да
  12. Else
  13.  ' нет
  14. End If
  15. '....
  16. 'удалить заправку
  17. operation = operation And Not MY_ZAPRAVKA
  18. Cells(1, 1) = operation


Ответить

Номер ответа: 2
Автор ответа:
 me4huk



Вопросов: 2
Ответов: 1
 Профиль | | #2 Добавлено: 22.07.11 15:48
О! Большое спасибо. Покопаю в этом направлении. :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам