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

조회 수: 1 (최근 30일)
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);

채택된 답변

Simon Chan
Simon Chan 2021년 9월 1일
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))))

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Time Series Events에 대해 자세히 알아보기

제품


릴리스

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by