Looping string array into parsed timestamp

I have the following data that I would like to parse into hours:minutes:secs to plot against other data.
Here is my code that is causing issues with the indexing.
TS = ["085423","085428","085431","085502"];
TS = TS';
for i = 1:length(TS)
timestr = TS(i);
end
hours = timestr(1:2);
minutes = timestr(3:4);
secs = timestr(5:6);
formatted_time_str = [hours, ':', minutes, ':', secs];
Any insight is appreciated. Thank you.

 채택된 답변

Stephen23
Stephen23 2024년 9월 17일
편집: Stephen23 2024년 9월 17일
"... that is causing issues with the indexing."
Because you are mixing up indexing into string arrays with the characters contained within them. Not the same things at all: indexing into a string array indexes into the string array, not into the characters it contains (as you incorrectly assumed).
TS = ["085423","085428","085431","085502"]
TS = 1x4 string array
"085423" "085428" "085431" "085502"
Method one: returns a string array:
FS = extractBefore(TS(:),3)+":"+extractBetween(TS(:),3,4)+":"+extractAfter(TS(:),4)
FS = 4x1 string array
"08:54:23" "08:54:28" "08:54:31" "08:55:02"
Method two: returns a char matrix:
FS = repmat(':',numel(TS),8);
FS(:,[1:2,4:5,7:8]) = char(TS(:))
FS = 4x8 char array
'08:54:23' '08:54:28' '08:54:31' '08:55:02'

댓글 수: 5

James
James 2024년 9월 17일
편집: James 2024년 9월 17일
Can this be put into the loop, as I have more than 1000 files that need to be processed?
I've only showed 4 here for simplicty.
Thank you
Stephen23
Stephen23 2024년 9월 17일
편집: Stephen23 2024년 9월 17일
"Can this be put into the loop, as I have more than 1000 files that need to be processed? I've only showed 4 here for simplicty."
Sure, put it in a loop if you so desire.
Note that that code I gave you will process any number of text elements, not just four of them.
In trying to plot the FS data (timestamp) against numerical data I get an error message:
scatter(FS,(1:5).^2)
Error using scatter
Input arguments must be numeric, datetime, duration or categorical.
I've tried to convert the FS data to numeric using:
FS = cellstr(FS);
FS = str2num(FS);
But I get the following error:
Error using str2num
Input must be a character vector or string scalar.
Thanks
"In trying to plot the FS data (timestamp) against numerical data I get an error message:"
If you are trying to plot with this data, then you are likely much better of using DURATION objects rather than fiddling around with text or numerics:
TS = ["085423";"085428";"085431";"085502"];
H = str2double(extractBefore(TS(:),3));
M = str2double(extractBetween(TS(:),3,4));
S = str2double(extractAfter(TS(:),4));
D = duration(H,M,S)
D = 4x1 duration array
08:54:23 08:54:28 08:54:31 08:55:02
Y = rand(size(D));
scatter(D,Y)
James
James 2024년 9월 18일
Thank you!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Data Type Conversion에 대해 자세히 알아보기

제품

릴리스

R2022b

태그

질문:

2024년 9월 17일

댓글:

2024년 9월 18일

Community Treasure Hunt

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

Start Hunting!

Translated by