Я пытаюсь реализовать битовый экстрактор для данных шины CAN в Excel. Я борюсь с частью алгоритма, поэтому это в основном не зависит от Excel / openpyxl.
У меня есть таблица с идентификатором, хранящимся в столбце B, и двоичный код для временного шага в столбце F. Я хочу проанализировать двоичные числа и извлечь части, которые содержат значение сигналов. Один идентификатор может иметь один или несколько сигналов. В зависимости от идентификатора, я хочу go через все строки и преобразовать двоичный код в десятичный (как показано ниже). Идентификаторы содержат 3, 4, 5, 6, 7 или 8 байтов, которые определены для каждого идентификатора (пример ниже: 2E имеет 8 байтов, 4A имеет 5 байтов).
Ввод:
A B C D E F G H .. M
.. 2E .... 0000000000000AA4..
...4A ... 02478304B..
Организованный ввод: AB C DEFGH .. M .. 2E .... 00 00 00 00 00 00 0A A4 .. ... 4A ... 00 24 78 30 4B ..
Токовый выход:
A B C D E F G H .. M
..2E .... ... 101010100100
..4A ....... 100100011110000011000001001011
Требуемый выход:
A B C D E F G H .. M
..2E .... ... 0000000000000000000000000000000000000000000000000000101010100100
..4A ....... 100100011110000011000001001011
ВОПРОС: Поскольку в начале измерения установлено большинство значений в ноль (в HEX, в столбце E), BIN не включает их, и сигналы не могут быть извлечены правильно. Я не знаю, как это сделать в функции convertHEXtoBIN()
(см. Ниже). Значение HEX в столбце E - это строка, из которой я успешно преобразовал в BIN, но нули в начале не были включены в код BIN. Те нули в конце включены.
Подход: В приведенной ниже функции я бы добавил условие if, чтобы поймать первые нули, cell.value
содержит ноль, пока не появится первый HEX code != 0
, а затем эти нули затем добавляются в восемь раз (8 раз ноль, если появляются два нуля, 4 раза, если появляется один ноль) и ставятся перед двоичным кодом res
. Другое решение может состоять в том, чтобы позволить функции convertHEXtoBIN()
включать нули (а не пренебрегать ими), но я не знаю, возможно ли это вообще ...
У вас есть идея, как это реализовать?
Код пока:
import openpyxl
from openpyxl import Workbook
theFile = openpyxl.load_workbook('Adapted_T013.xlsx')
allSheetNames = theFile.sheetnames
print("All sheet names {} " .format(theFile.sheetnames))
sheet = theFile.active
def convertHEXtoBIN():
max_row_var = sheet.max_row+1
for row in sheet.iter_rows(min_row=1, max_row=max_row_var,values_only = True):
for cell in sheet["E"]:
if cell.value is not None:
inputHEX = str(cell.value)
res = "{0:08b}".format(int(inputHEX,16))
sheet.cell(row=cell.row, column=6).value = res
break