Indexing in a loop using fileparts
    6 views (last 30 days)
  
       Show older comments
    
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
0 Comments
Accepted Answer
  Jatin
 on 17 Sep 2024
        
      Edited: Jatin
 on 17 Sep 2024
  
      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)
See Also
Categories
				Find more on Matrix Indexing in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
