如何在Spotfire中从十六进制字符串创建整数列?

时间:2015-12-09 14:54:18

标签: spotfire

我正在导入一个包含数据列的csv文件,其中包含以十六进制格式的分号字节,如下所示:

06;03;58;1C;05;F5;D2;70;05;F5;DF;...

(是的,这是逗号分隔文件中的所有一个列。)

我想将此列解析为具有32位值的多个列并将其转换为十进制:

06;03;58;1C -> 0x0603581C -> 100882460
05;F5;D2;70 -> 0x05F5D270 -> 99996272 ...

这是我创建第一列的第一次(徒劳)尝试之一:

Integer(Concatenate("0x",
    Mid([data], 1, 2), 
    Mid([data], 4, 2), 
    Mid([data], 7, 2), 
    Mid([data], 10, 2)))

有关如何完成此任务的任何建议? 我试图避免使用这个非常类似的计算在Excel中预处理csv文件的额外步骤:

HEX2DEC(CONCATENATE(
    MID($M2,1,2),
    MID($M2,4,2),
    MID($M2,7,2),
    MID($M2,10,2)))

1 个答案:

答案 0 :(得分:0)

最简单的方法可能是使用IronPython或R接口。但是,这是一个只使用计算列的版本(非常难看,但完成工作):

  • 提取pos 1,2,...
  • 的单字符子字符串
  • 用其数字值替换每个字符,即' A' - > ' 10',' B' - > ' 11',...
  • 将其转换为整数Int1,Int2,...
  • 将结果值计算为((Int1*16) + Int2)*16 + ...

以下是计算列的列表达式(我只做了前两个字符):

INT1

Integer(
  Substitute(
    Substitute(
     Substitute(
       Substitute(
         Substitute(
           Substitute(
             Mid([Input],1,1),
             "A","10"),
           "B","11"),
         "C","12"),
       "D","13"),
   "E","14"),
 "F","15"))

INT2

Integer(
  Substitute(
    Substitute(
     Substitute(
       Substitute(
         Substitute(
           Substitute(
             Mid([Input],2,1),
             "A","10"),
           "B","11"),
         "C","12"),
       "D","13"),
   "E","14"),
 "F","15"))

结果

Integer(([Int1]*16) + [Int2])