我有一個程序從傳感器收集數據,並將其保存到文本文件中。該數據n文本文件看起來像這樣:matlab - 反序列化數組
[1,2,3,4] [5,6,7,8] [9L,10L,11L,12L]
我怎麼反序列化陣列到MATLAB引導?
note我有一些數組與float
值,所以請認爲也讀取浮動。
我有一個程序從傳感器收集數據,並將其保存到文本文件中。該數據n文本文件看起來像這樣:matlab - 反序列化數組
[1,2,3,4] [5,6,7,8] [9L,10L,11L,12L]
我怎麼反序列化陣列到MATLAB引導?
note我有一些數組與float
值,所以請認爲也讀取浮動。
不幸的是我沒有找到任何清潔劑解決這個 - 這個問題的,當然在每行的開頭和結尾的括號內。這裏有一個解決方案,它可以逐行讀取文件,並在切出括號的字符串上運行textscan
。各個矢量被存儲在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
分成正確大小的塊。如果沒有,並且每個載體可以具有不同的大小,則必須使用第一種解決方案。
爲什麼你不聲明括號空白:加入'「空白」,「[,]」'的'textscan'選擇? –
@ H.Muster好點。然而,問題依然存在 - 一次調用'textscan'將會把所有的向量讀入一個數組中。所以我無論如何都必須在循環中做...我已經更新了我的答案。 – angainor
不錯的更新! (+1) –
只是一個小除了 - 一旦你刪除了「L」的數據是有效的MATLAB代碼。你可以把它讀出來:
text_data = '[1,2,3,4]';
parsed_data = eval(text_data);
第三排'L'是怎麼回事? –
@GuntherStruyf這意味着它的類型的'long' – elyashiv