我有一个从传感器收集数据并将其保存到文本文件的程序。文本文件中的数据如下所示:
[1,2,3,4] [5,6,7,8] [9L,10L,11L,12L]
如何在matlab中将数组反序列化为向量?
注意我有一些带有float
值的数组,所以请参考阅读浮点数。
我有一个从传感器收集数据并将其保存到文本文件的程序。文本文件中的数据如下所示:
[1,2,3,4] [5,6,7,8] [9L,10L,11L,12L]
如何在matlab中将数组反序列化为向量?
注意我有一些带有float
值的数组,所以请参考阅读浮点数。
不幸的是,我没有找到任何更干净的解决方案 - 问题当然是每行开头和结尾的括号。这是一个解决方案,它逐行读取文件并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
为正确大小的块。如果不是,并且每个向量可以有不同的大小,您将不得不使用第一个解决方案。
只是一个小补充——一旦你删除了“L”,你的数据就是有效的 matlab 代码。你可以把它读出来:
text_data = '[1,2,3,4]';
parsed_data = eval(text_data);