1

Я в настоящее время в некоторых шестнадцатеричных строках в файлах данных видеоигры. Структура является:

XX 01 YY YY (then repeats)

Куда:

XX is the item's cost
01 is unknown (it won't matter)
YY YY is the item's ID.

Например:

28 01 AF 01

... было бы описание предмета, который стоит 40 золотых (28 в гексах) с идентификатором "01AF" (у меня есть список ссылок для всех идентификаторов / предметов в игре).

Я хочу поместить это в таблицу Excel со столбцами:

| ItemID | Cost |

Как бы супер-пользователь атаковал эту задачу, если бы у кого-то было что-то вроде этого:альтернативный текст

2 ответа2

1

(РЕДАКТИРОВАТЬ: Решение улучшено на основе комментария Арджан)

Вот простое, но грязное решение MS Excel.

Допущение: данные представлены в формате 28 01 AF 01 XX XX XX XX YY YY YY YY... (через пробел)

  1. Скопируйте данные в А1.
  2. Введите в B1: =MID($A$1, ROW(B1)*12-11, 11). Скопируйте его в B2: B20.
  3. Введите в C1: =MID(B1,10,2)&MID(B1,7,2). Скопируйте его в C2: C20.
  4. (a) Введите в D1: =HEX2DEC(LEFT(B1,2)). Скопируйте его в D2: D20.
    (б) Если #NAME? появилась ошибка, затем введите следующее в D1. Скопируйте его в D2: D20.

=IF(CODE(LEFT(B1,1))>64,CODE(LEFT(B1,1))-55,LEFT(B1,1))*16 +IF(CODE(MID(B1,2,1))>64,CODE(MID(B1,2,1))-55,MID(B1,2,1))

(Другое предположение для решения (б): все значения HEX указаны заглавными буквами)

Колонка C & D будет то, что вам нужно.


объяснение

B:B разбивает данные (A1) на разные строки.

C1 просто извлекает символы в позиции {10, 11, 7, 8} из B1.

D1 извлекает первые 2 символа в A1, а затем преобразует их из HEX в DEC.


Примечание: надстройка Analysis ToolPak требуется для HEX2DEC() в (a). Если #NAME? появляется ошибка, это означает, что функция не поддерживается. В этом случае взлом в (b) поможет конвертировать из HEX в DEC.

CODE() получает ASCII-код символа. Для ABCDEF их коды ASCII: {65,66,67,68,69,70}. CODE()-55 затем возвращает {10,11,12,13,14,15}.

0

Это немного запутанный способ сделать это, но это работает.

Скопируйте файл в MS Word.
Начать курсор в начале файла.
Написать макрос, который перемещает курсор вправо на 12 позиций, а затем вводит разрыв строки (возврат)
Сохраните файл в текстовом формате, убедитесь, что разрывы строк включены.
Откройте файл в Excel, убедившись, что выходные данные в ячейках выбираются как текстовые, а не общие (иначе вы будете использовать первые 0)

Затем просто добавьте заголовки и удалите столбец, который вам не нужен / не нужен. Вуаля.

Возможно, кто-то с лучшим знанием VB может помочь вам здесь, синтаксис полностью отличается от C++, и я немного тронут сегодня.

Код у меня есть:

(Pseudocode) - While Not End of File

    Selection.MoveRight Unit:=wdCharacter, Count:=12
    Selection.TypeParagraph
Wend

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .