Получить только шестнадцатеричные значения (байты) из массива в ruby

Я решил это сам ...

Способ чтения пользовательских свойств документа:

import win32com.client as win32
word = win32.Dispatch("Word.Application")
word.Visible = 0
doc = word.Documents.Open(file)
try:
    csp= doc.CustomDocumentProperties('property_you_want_to_know').value
    print('property is %s' % csp)

except exception as e:
    print ('\n\n', e)

doc.Saved= False
doc.Save()
doc.Close()

word.Quit()
0
задан Ger Cas 17 January 2019 в 18:36
поделиться

2 ответа

Учитывая комментарий, я предполагаю, что вы действительно хотите спросить о соответствии шаблона «пробел, гекс, шестнадцатеричный» до первого несоответствия.

Это будет похоже на

a.map(&:chr).join.match(/^( \X\X)+/)[0]

. Он использует специальный заполнитель \X для регулярных выражений, который соответствует шестнадцатеричным цифрам u̶p̶p̶e̶r̶c̶a̶s̶e̶ (0-9, A-F, a-f).


Дополнительная информация:

Опять же, исходя из моей интерпретации вопроса, если исходный массив длинный (или поток), нет необходимости использовать все это. Вам лучше прекратить генерировать символы как можно скорее:

hexs = "0123456789ABCDEF".split.map(&:ord)
a.
  lazy.
  each_slice(3).
  take_while { |spc, h1, h2| spc == 32 && hexs.include?(h1) && hexs.include?(h2) }.
  flat_map(&:chr).
  to_a.
  join

Таким образом, любая часть вашего целочисленного массива даже не учитывается.

0
ответ дан rewritten 17 January 2019 в 18:36
поделиться

Просто отфильтруйте его перед тем, как объединит массив в строку:

[" ", "9", "2", " ", "8", "3", " ", "A", "4", "\x82", "\x00"].
  take_while(&"\x80".method(:>))
#⇒ [" ", "9", "2", " ", "8", "3", " ", "A", "4"]

Затем выполните все, что вы хотите, с результирующим массивом.

0
ответ дан Aleksei Matiushkin 17 January 2019 в 18:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: