Como converter uma única linha de números hexadecimais em uma tabela Excel de várias linhas?

1

Atualmente, estou em algumas sequências hexagonais nos arquivos de dados de um videogame. A estrutura é:

XX 01 YY YY (then repeats)

Onde:

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

Por exemplo:

28 01 AF 01

... seria descrever um item que custa 40 gold (que é 28 em hexadecimal) com um ID de "01AF" (eu tenho uma lista de referência para todos os ID / Items no jogo).

Eu quero colocar isso em uma tabela do excel com colunas:

| ItemID | Cost |

Como um super usuário atacaria essa tarefa se alguém tivesse algo assim:

    
por FlavorOfLife 06.12.2010 / 11:16

2 respostas

1

( EDIT: Solução melhorada com base no comentário de Arjan)

Aqui está uma solução simples, mas suja do MS Excel.

Suposição: os dados estão no formato 28 01 AF 01 XX XX XX XX YY YY YY YY... (separados por espaços)

  1. Copiar dados para A1.
  2. Insira em B1: =MID($A$1, ROW(B1)*12-11, 11) . Copie-o para B2: B20.
  3. Insira em C1: =MID(B1,10,2)&MID(B1,7,2) . Copie para C2: C20.
  4. (a) Insira em D1: =HEX2DEC(LEFT(B1,2)) . Copie-o para D2: D20.
    (b) Se o erro #NAME? aparecer, insira o seguinte em D1. Copie para 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))

(Outra suposição para a solução (b): todos os valores HEX estão em letra maiúscula)

coluna C & D seria o que você precisa.

Explicação

B: B divide os dados (A1) em linhas diferentes.

C1 simplesmente extrai os caracteres na posição {10, 11, 7, 8} de B1.

D1 extrai os primeiros 2 caracteres em A1 e, em seguida, converte-os de HEX para DEC.

Observação: Suplemento do Analysis ToolPak é necessário para HEX2DEC() em (a). Se #NAME? erro aparecer, significa que a função não é suportada. Neste caso, o hack em (b) ajudaria a converter de HEX para DEC.

CODE() obtém o código ASCII do caractere. Para ABCDEF, seus códigos ASCII são {65,66,67,68,69,70}. CODE()-55 , em seguida, retorna {10,11,12,13,14,15}.

    
por 08.12.2010 / 11:31
0

É uma maneira confusa de fazer isso, mas funciona.

Copie o arquivo para o MS Word.
Inicie o cursor no início do arquivo.
Escreva uma macro que mova o cursor para a direita 12 lugares e, em seguida, insira uma quebra de linha (retorno)
Salvar o arquivo em um formato de texto, verifique se que as quebras de linha estão ativadas. Abra o arquivo no Excel, certificando-se de selecionar a saída nas células para ser texto e não geral (ou você usará os 0's principais)

Em seguida, basta adicionar os cabeçalhos e remover a coluna que você não deseja / precisa. Voila.

Talvez alguém com melhor conhecimento de VB possa ajudá-lo aqui, a sintaxe é completamente diferente do C ++ e estou um pouco pressionado pelo tempo hoje.

O código que tenho é:

(Pseudocode) - While Not End of File

    Selection.MoveRight Unit:=wdCharacter, Count:=12
    Selection.TypeParagraph
Wend
    
por 06.12.2010 / 12:00