Matlab file names in a loop

I have a set of files named, dipoles.0.5000.xvg , dipoles.5000.01.10000.xvg and so on. I need to read those files and save in a different data(k) matrix. In the below form I am getting an Invalid file identifier error.
clc
clear all
for i = [0 5000.01 10000.01 15000.01 20000.01 25000.01 30000.01 35000.01 40000.01 45000.01 50000.01 55000.01 60000.01 65000.01 70000.01 75000.01 80000.01 85000.01 90000.01 95000.01];
for j = 5000:5000:100000
for k = 1:1:20
Data(k) = import_xvg('dipoles.%i.%j.xvg');
end
end
end

Answers (1)

Chunru
Chunru on 18 Jul 2022
Edited: Chunru on 18 Jul 2022
fn = dir("dipoles*.*");
for i = 1:length(fn)
x{i} = readmatrix(fn(i).name, "NumHeaderLines", 27);
end
x
x = 1×2 cell array
{12×5 double} {18×5 double}

5 Comments

Thanks for your response. The Data is a matrix, and its needs to save in the Data{i} for each import_xvg operation. I am getting an error "Unable to perform assignment because brace indexing is not supported for variables of this type". How can save them in a Data1, Data2... Data100 variable then stack them together in a bigger Data matrix like, Data = [Data1
Data2
......
Data100]
Thanks
Chunru
Chunru on 18 Jul 2022
Edited: Chunru on 18 Jul 2022
Can you attach 2 or 3 sample files and import_xvg program?
Or you need to check what import_xvg returns by looking into it documentation.
Avik Mahata
Avik Mahata on 18 Jul 2022
Edited: Avik Mahata on 18 Jul 2022
I had to rename the files to .txt. I don't really have to use import_xvg, I can use simple dlmread/readmatrix etc. and ignore the first few lines of text. That will probably be lot faster as well. I tried that but somehow its not reading the matrix out the file properly. All I have to do is take those matrices out of the files and put in a master file in order.
See above.
Thanks. It works.

Sign in to comment.

Asked:

on 18 Jul 2022

Commented:

on 18 Jul 2022

Community Treasure Hunt

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

Start Hunting!