如何从文本文件中提取格式化的十六进制数据?

7次浏览(过去30天)
我有一个文本文件与数万行格式如下:
...
[11:52:30.739]:值:(bc - 7 - f - 00 - 00 - f7 - f6 - 2 a - d7 - 24 - d9 - 81 - ee - 6 a - dd - 08 - d4 - bd - d5 - 09 - e1 - 10 - f5 - 22 - db - 20 - de - 55 - ea - 21 - d9 - 22 - d1 - ea - d5 - 45 - e5 - 95 - f8 - 2 a - d7 - 22 - da - 12 - ef - 95 - dd - 2 a - d3 - 85 - d4 - 5 a - e1 - eb - f6 - 2 a - db - 22 - de - 54 - ea - a2 - d8 - 7 d - cf - 15 - d4 0 - - e5 - fb - fa - 88 - d6 - a5 d9 - d1 - ea - 80 - dc - 95 - d1 - 24 - d2 - 2 - d - e1 d5 - f9 - aa -哒-哒- dd - aa - e6 - bd - d7 - 56 - ce - d5 - d1 - 5 a - e5 - 5 b - fd - d5 d5 - 55 - da - a8 e9 - da - db - ef - cf - 11 - d0 d5 - e1 - 15 - fc - ea - d9 - 21 - de - d5 - e6 a0 - d6 - b5 - cd - 0 - - d0 ee - e6 - 55 - ff - 20 - d5 - 55 - db - de - e9 d5 - da - 96 - ce - 2 a - ce - 5 a - e3 - dd - fc - ea - d8 - f6 - dd - 55 - e7 - d5 d5 - 8 a - ce - 16 - d0 a8 - e8 - 15 - fe - d4 - d5 - 6 a - dc - d5 - ea - aa - da - 2 a - cf - 22 - ce - a5 - e4 - b5 - fc - 6 a - d9 - 4 - a - de - aa - e8 - fa - d5 - a2 - cf - 12 - d1 - aa - e9 a0 - fd - 4 - a - d6 - 55 - dc - ea - eb - 95 - da - f5 - cf - 2 a - cf - 94 - e4 - ea - fb - ca - d9 - 40 - de - d5 - e8 - 5 - 2 - d6 - 44 - d0 - - - d2 - b5 - e9 2 - a - fd - 40 - d6 - aa - dc - db - eb - ab - da - e8 - cf - 55 - cf - 6 a - e4]
[11:52:30.777]:值:(cb - 7 - f - 00 - 00 - ff - fb - 2 a - d5 - 2 a - da - 2 d - ec - 95 db - b6 - d0 - 2 a - d1 - b5 - e5 - da - fa - 15 - d9 - 2 a - df - b6 - e8 - 7 f - d7 - 02 - cd - 55 - d1 - 45 - e9 - 4 - a - fe - aa - d4 - d5 - da - d5 eb - ea - db - 0 - 20 - cf - d0 - aa - e5 - af - fc - 69 d9 - da - de - aa - e6 - 55 - d7 - 2 a - cc - 55 - d0 - 56 - e9 - 95 - ff - 00 - d5 - 81 - da - 55 - e8 - 95 db - 95 - ce - 22 - cf - 56 - e6 - f6 - fd - d5 d8 - a4 - de - 55 - e5 - 5 b - d6 - b5 - cc - d2 - cf - 16 - eb - 2 a - 01 - 85 - d4 - 29 - db - aa - ea - aa - da - bf - ce - d5 - ce - 44 - e7 - 2 - 4 - fc - 90 d9 - - dd - 2 a - e5 a8 - d6 - aa - cd - 55 - d1 -广告- e9 - aa - fe - 35 - d4 - ea - d8 - 24 - e8 ca - da - 6 d - d0 - 6 a - d0 b5 - e5 - dd - fc - b6 d8 - 6 a - dd - 56 - e5 - 85 - d6 - d2 - cd - a5 d0 - ab - e9 - 11 - 00 - 82 - d4 0 - 15 - da - 55 - ea - - - db - 15 - d0 - 55 - cf - 6 a - e6 - 50 - fa - ea - d9 - 40 - dc - aa - e5 - 28 - d7 - aa - cd - 6 - e - d1 - a4 - e8 - 55 - fb - 7 - a - d5 - 55 - d7 - 2 a - e8 - b6 - da - 95 - d1 - 7 - a - d1 - 5 d - e5 - 57 - f8 - 7 d - d9 - 20 - dd - 0 - a - e7 - de - d7 - 20 - ce - 1 a - d2 - d5 - e7 - 94 - fc - 5 a - d5 - 89 - d8 - 4 - a - ea - 94 - db - ab - d1 - d6 - d1 - aa - e4]
...
我需要以以下方式提取十六进制数据:前32位是索引,下面的单词是实际数据。
目前,我正在逐行解析文件,并使用regexp提取十六进制数据。这个很慢。最后,我得到了一个可以快速处理的双精度矩阵。
一定有更快的方法来提取这些数据,我不知道。也许你能帮忙?
2的评论
保罗
保罗 2018年7月4日
regexp是什么样子的?也许可以提高效率。

登录评论。

接受的答案

Guillaume
Guillaume 2018年7月4日
编辑:Guillaume 2018年7月4日
如何:
Filecontent = fileread(你的文件);把所有的东西都看一遍
Hexstrings = regexp(文件内容,‘(?< =值 : \[)[^\]]*(?=\])'“匹配”);
Decvalues = cell2mat(cellfun(@(十六进制)sscanf(十六进制,“% x -”)、hexstrings“UniformOutput”、假));
这样做可能更快:
Filecontent = fileread(你的文件);把所有的东西都看一遍
Hexstrings = regexp(文件内容,‘(?< =值 : \[)[^\]]*(?=\])'“匹配”);
减值=重塑(sscanf(strjoin(hexstrings,“- - -”),“% x -”), [], numel(hexstrings))';
不幸的是, textscan 没有 ' % x ' 格式说明符。
2的评论
斯坦尼斯拉夫•斯坦伯格
Guillaume,辉煌!到目前为止,它看起来比我之前编码的要快得多。好学。谢谢。

登录评论。

更多答案(0)

2022世界杯八强谁会赢?


释放

R2018a

世界杯预选赛小组名单社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!世界杯预选赛小组名单

开始狩猎!

Baidu
map