如何在matlab中读取带有可变十六进制值列的文本文件?

时间:2013-07-08 18:17:24

标签: matlab text hex large-files textscan

我有一个我需要阅读的文本文件,根据行有不同数量的十六进制数据列。我试图读取它然后操作十六进制,但我似乎找到了一个很好的方法来读取文件。我想读取十六进制之前的前五列(那些将永远在那里)作为字符串,然后最终将十六进制操作为十进制和绘图。但每行中的十六进制字数不同。我正在尝试使用文本扫描,但可以弄清楚如何做到这一点。任何帮助将不胜感激。

以下是一些示例数据:

x 0:47950 0x ---- 001:00:07:56.63 16-R-08-04 0x8000 0x0012 0x0000

x 0:136994 0x ---- 001:00:13:14.35 16-R-07-04 0x8000 0x0012 0x0000 0x0000

x 0:532637 0x ---- 001:00:40:29.86 15-R-08-04 0x8000 0x0012 0x0000 0x0000 0x0000 0x0000

x 0:532637 0x ---- 001:00:40:29.86 16-R-04-04 0x8000 0x0012 0x0000 0x0000 0x0000

x 0:47950 0x ---- 001:00:07:56.63 16-R-08-04 0x8000 0x0012 0x0000

1 个答案:

答案 0 :(得分:1)

这可能会让你指向正确的方向。

根据文件的大小,使用字符串操作的fgetl()可能会非常慢,但它可能会作为第一次传递。

fid = fopen('hex.txt');

approxNumLines = 10; % Pre-allocate for speed
realNumLines = 0; % Counter variable

resultingCellArray = cell(approxNumLines,1); % Pre-allocate for speed


line = fgetl(fid); % Get the first line
while line ~= -1
    realNumLines = realNumLines + 1;
    resultingCellArray{realNumLines} = strsplit(line);
    line = fgetl(fid);
end

resultingCellArray = resultingCellArray(1:realNumLines);

在此之后你将不得不做一些单元格到十六进制到矩阵的操作,但这应该是非常简单的,具体取决于你想要的方式。