センサーからデータを収集し、それをテキストファイルに保存するプログラムがあります。テキストファイルのデータは次のようになります。
[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
ので、フロートの読み取りも参照してください。
ちょっとした追加 - 「L」を削除すると、データは有効な matlab コードになります。次のように読むことができます。
text_data = '[1,2,3,4]';
parsed_data = eval(text_data);
残念ながら、これに対するより明確な解決策は見つかりませんでした。もちろん、問題はすべての行の最初と最後にある括弧です。これは、ファイルを1行ずつ読み取り、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
正しいサイズのチャンクに分割できます。そうでない場合、およびすべてのベクトルが異なるサイズを持つ可能性がある場合は、最初のソリューションを使用する必要があります。