Indexing in a loop using fileparts

4 views (last 30 days)
James
James on 17 Sep 2024
Commented: James on 17 Sep 2024
Hello,
My filenames have the timestamp in them like this: X000_104520 where the #'s after the underscore are the HH:MM:SS
I wanted to loop through the files and take only the timestamp part and save it to a table or an array.
Here is my code that I'm having some issues with the indexing of the timestamp value (TS). Any help on this is appreciated, Thank you:
fileName = dir([pwd,'\*.txt']);
for n = 1:numel(fileName)
S=6;
[~,TS(n,:)]=fileparts(fileName(n).name);
L=length(TS(n,:));
TS(n,:)=TS(n,:)(L-(S-1):L); %Not able to properly index here
Results{n} = table(TS, 'VariableNames',{sprintf('File_%d',n)});
end
Results{:}
The filenames are, as I'm not able to upload the files due to Mathworks limit?
X000_104520.txt
X001_122004.txt
X002_034536.txt

Accepted Answer

Jatin
Jatin on 17 Sep 2024
Edited: Jatin on 17 Sep 2024
Hi @James,
The error you're encountering is due to MATLAB not interpreting the chain of indexing, which is why attempting "TS(n,:)(L-(S-1):L)" results in an "Invalid array indexing" error. Here's a simplified version of the code that will give you the desired results.
fileName = dir([pwd,'/*.txt']); % Get all .txt files in the current directory
TS = strings(numel(fileName), 1); % Pre-allocate an array of strings for timestamps
for n = 1:numel(fileName)
[~, name] = fileparts(fileName(n).name); % Extract filename without extension
TS(n) = name(end-5:end); % Extract the last 6 characters for the timestamp
end
% Convert to a table and display results
Results = table(TS, 'VariableNames', {'Timestamp'});
disp(Results);
If you want to know more about the MATLAB's capacity of chained indexing, read this MATLAB Answer post:
Hope this helps!

More Answers (0)

Products


Release

R2022b

Community Treasure Hunt

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

Start Hunting!