Find the desirable string and read data below them

1 view (last 30 days)
I just started working in my master thesis with SPR-KKR and I need to get the XC-coupling constants J_ij [eV]. I would like to create a script where I could get out each value of DR, J_ij [Ry] and J_ij [eV]. My main problem is that those strings repeat, they appear always above a new value. Below, I leave a small example how the output file is, although the full output file example is attached.
*******************************************************************************
<XCPLJIJ>
XC-coupling constants J_ij
*******************************************************************************
IQ = 1 IT = 1 JQ = 2 JT = 2
->Q = ( 0.289, 0.500, 0.403) ->Q = ( 0.577, 1.000, -0.403)
ITAUIJ ITAUJI N1 N2 N3 DRX DRY DRZ DR J_ij [Ry] J_ij [eV]
117 194 0 -1 0 0.289 -0.500 -0.806 0.992 0.001122 0.015261
IQ = 1 IT = 1 JQ = 2 JT = 2
->Q = ( 0.289, 0.500, 0.403) ->Q = ( 0.577, 1.000, -0.403)
ITAUIJ ITAUJI N1 N2 N3 DRX DRY DRZ DR J_ij [Ry] J_ij [eV]
101 210 -1 -1 0 -0.577 0.000 -0.806 0.992 0.001122 0.015261
IQ = 1 IT = 1 JQ = 2 JT = 2
->Q = ( 0.289, 0.500, 0.403) ->Q = ( 0.577, 1.000, -0.403)
ITAUIJ ITAUJI N1 N2 N3 DRX DRY DRZ DR J_ij [Ry] J_ij [eV]
121 190 0 0 0 0.289 0.500 -0.806 0.992 0.001122 0.015261

Accepted Answer

dpb
dpb on 23 Mar 2019
Edited: dpb on 23 Mar 2019
function data=readTAUIJ(file)
MAGIC_LINE_1='<INIT_MOD_TAUIJ_STAR>';
MAGIC_LINE_2='<XCPLJIJ>';
fid=fopen(file,'r');
% find number elements to read
while ~contains(fgetl(fid),MAGIC_LINE_1), end
N=cell2mat(textscan(fid,'number of TAU(I,J)''s to be calculated: %f','headerlines',2));
while ~contains(fgetl(fid),MAGIC_LINE_2), end
for i=1:4,fgetl(fid);end
data=cell(N,1);
for i=1:N
data(i)=textscan(fid,repmat('%f',1,11),'headerlines',3,'collectoutput',1);
end
fid=fclose(fid);
data=cell2mat(data);
end
  4 Comments
dpb
dpb on 23 Mar 2019
Edited: dpb on 23 Mar 2019
No problem...it's entertainment and teaching...just remember the acknowledgement in the thesis... <VBG>
BTW: As "exercise for Student", look at reading the variable name header line before one of the data sections and then creating a table using those names instead of just the data array. Going forward with the thesis code work, that could be a much more maintainable approach.
Miguel Cardoso
Miguel Cardoso on 23 Mar 2019
I won't forget! Now it's clear for me to interpret the data. Looks easy. Thank you once again.

Sign in to comment.

More Answers (0)

Categories

Find more on 2-D and 3-D Plots 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!