我正在导入一个包含数据列的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)))
答案 0 :(得分:0)
最简单的方法可能是使用IronPython或R接口。但是,这是一个只使用计算列的版本(非常难看,但完成工作):
((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])