Separate 24 digits single array of data loaded from file into 6 different arrays

1 Ansicht (letzte 30 Tage)
So I have a datalogger saving into a file data from 6 diferent sensors with this format:
504800002206203200000000
504800002205203000000000
504800002205203000000000
507000002206202900000000
507000002206203000000000
504200002205203200000000
504200002206203100000000
504200002205203200000000
504200002208203100000000
504200002204203200000000
500400002205203000000000
Where Each 4 Digits is equivalent to a singe data, for a total of 24 digits (6*4) per line.
I want to split this into 6 variables (one for each sensor data).
I came up with a code that does that, but it is too slow. Does anybody have an suggestion on how to improve it?
%===|Converte em String|===
d = textscan(fid,'%s');
fclose(fid);
dados = d{1,1};
%===|Converte a String em Dados|===
for i=1:length(dados)
dados{i,1} = split(dados{i,1},"");
dados{i,2} = str2double(sprintf('%s%s%s%s',dados{i,1}{6,1}, dados{i,1}{7,1}, dados{i,1}{8,1}, dados{i,1}{9,1}));
dados{i,3} = str2double(sprintf('%s%s%s%s',dados{i,1}{10,1}, dados{i,1}{11,1}, dados{i,1}{12,1}, dados{i,1}{13,1}));
dados{i,4} = str2double(sprintf('%s%s%s%s',dados{i,1}{14,1}, dados{i,1}{15,1}, dados{i,1}{16,1}, dados{i,1}{17,1}));
dados{i,5} = str2double(sprintf('%s%s%s%s',dados{i,1}{18,1}, dados{i,1}{19,1}, dados{i,1}{20,1}, dados{i,1}{21,1}));
dados{i,6} = str2double(sprintf('%s%s%s%s',dados{i,1}{22,1}, dados{i,1}{23,1}, dados{i,1}{24,1}, dados{i,1}{25,1}));
dados{i,1} = str2double(sprintf('%s%s%s%s',dados{i,1}{2,1}, dados{i,1}{3,1}, dados{i,1}{4,1}, dados{i,1}{5,1}));
end
dados = cell2mat(dados);
%===|Salva os Dados em Variaveis|===
rot = dados(:,1);
vel = dados(:,2);
anlg0 = dados(:,3);
anlg1 = dados(:,4);
tempAmb = dados(:,5);
tempObj = dados(:,6);

Akzeptierte Antwort

Simon Chan
Simon Chan am 1 Sep. 2021
Try the following by converting the text using function num2cell.
clear; clc;
fid = fopen('data.txt');
d = textscan(fid,'%s');
data = cat(1,d{:});
dataexpand = cellfun(@num2cell,data,'UniformOutput',false);
alldata = cat(1,dataexpand{:});
%
rot = str2double(string(cell2mat(alldata(:,1:4))))
vel = str2double(string(cell2mat(alldata(:,5:8))))
anlg0 = str2double(string(cell2mat(alldata(:,9:12))))
anlg1 = str2double(string(cell2mat(alldata(:,13:16))))
tempAmb = str2double(string(cell2mat(alldata(:,17:20))))
tempObj = str2double(string(cell2mat(alldata(:,21:24))))

Weitere Antworten (0)

Kategorien

Mehr zu Time Series Events finden Sie in Help Center und File Exchange

Produkte


Version

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by