Indexing in a loop using fileparts

2 次查看(过去 30 天)
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

采纳的回答

Jatin
Jatin 2024-9-17
编辑:Jatin 2024-9-17
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!

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

产品


版本

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by