4

我有一个从传感器收集数据并将其保存到文本文件的程序。文本文件中的数据如下所示:

[1,2,3,4]
[5,6,7,8]
[9L,10L,11L,12L]

如何在matlab中将数组反序列化为向量?

注意我有一些带有float值的数组,所以请参考阅读浮点数。

4

2 回答 2

3

不幸的是,我没有找到任何更干净的解决方案 - 问题当然是每行开头和结尾的括号。这是一个解决方案,它逐行读取文件并textscan在去掉括号的字符串上运行。各个向量存储在 a 中cell

fid = fopen('data.txt', 'r');
data = {};
while 1
    tline = fgetl(fid);
    if ~ischar(tline); break; end
    A = textscan(tline, '%f', 'Delimiter', ',', 'Whitespace', '[ ]L\b\t');
    data{end+1} = A{1};
end
fclose(fid);

L在这里被视为分隔符。如果这些信息对你来说真的很重要,并且你想要执行类型转换为uint64,则必须修改上面的代码。

编辑按照 H.Muster 的评论,您可以一口气阅读整个文件,如下所示:

fid = fopen('data.txt', 'r');
A = textscan(fid, '%f', 'Delimiter', ',', 'Whitespace', '[ ]L\b\t');
fclose(fid);

现在A包含一个包含所有数据的单列向量。因此,如果您知道每行中向量的大小,则可以将其拆分A为正确大小的块。如果不是,并且每个向量可以有不同的大小,您将不得不使用第一个解决方案。

于 2012-10-10T09:02:23.303 回答
3

只是一个小补充——一旦你删除了“L”,你的数据就是有效的 matlab 代码。你可以把它读出来:

text_data = '[1,2,3,4]';
parsed_data = eval(text_data);
于 2012-10-10T11:04:25.810 回答