write data into a file line by line inside foef(fid) loop

Hi,
I need to read data from .txt file line by line and then for each line I have to call a function (function takes single value each for all inputs at a time and gives the output with dimension 1x3) and save it. Then, it "ll read 2nd line, call function and save it as nextline in file. Same for 3rd lines and so on. The function works fine for 1st line, from 2nd lines it shows error (it is because function takes only a single value each for all inputs). Can anyone help. Thank you so much. My code is below.
clear all;clc;
fid=fopen('testfile.txt','r');
fid1 = fopen('test.txt', 'wt');
i = 0;
while ~feof(fid);
i;
%%%get data
line = fgetl(fid);
ms=line(1:10);t=line(12:23);
alt(i+1)=str2num(line(29:38))*1e-3;%m to km
lon(i+1)=str2num(line(41:47));
lat(i+1)=str2num(line(49:55));
lst(i+1)=str2num(line(57:62));
dens(i+1)=str2num(line(72:88))*1e-3;%kgm-3 to gcm-3
%%convert to ut
ut(i+1)= rem(datenum(t),1)*24;
sec(i+1)=ut(i+1)*3600;
%convert to doy
dt(i+1)=datetime(ms, 'ConvertFrom','datenum');
doy(i+1)=day(dt(i+1),'dayofyear');
%%assume some year, f107a,f107 and ap for testing
year(i+1,:)=2000;
f107a(i+1,:)=150;f107(i+1,:)=150;ap(i+1,:)=4;
%%call function
%%function takes single value of each input paramaters at a time
%%outputn has dimension of 1x3
[outputn]=nrlmsise00_code(doy,year,sec,alt,lat,lon,lst,f107a,f107,ap);
%%normalize data
densn1(i+1)=dens(i+1)*outputn(2)/outputn(1);
densn2(i+1)=dens(i+1)*outputn(3)/outputn(1);
new_data=[densn1 densn2 outputn];
%%save file
fprintf(fid1,'%d %d %d %d %d\n',new_data);
i = i+1;
end;
fclose(fid);fclose(fid1);

Respuestas (1)

I would first read the complete file and then run loop for each line.
T = readtable('https://in.mathworks.com/matlabcentral/answers/uploaded_files/1080015/testfile.txt')
T = 5×12 table
Var1 Var2 Var3 Var4 Var5 Var6 Var7 Var8 Var9 Var10 Var11 Var12 __________ ________ _______ __________ ______ _______ ______ ______ __________ __________ _____ _____ 2002-04-04 00:50:00 {'GPS'} 5.1873e+05 146.08 -56.598 10.516 303.54 1.3136e-12 1.241e-12 0 0 2002-04-04 00:50:10 {'GPS'} 5.1864e+05 146.07 -55.967 10.518 304.18 1.3165e-12 1.2409e-12 0 0 2002-04-04 00:50:20 {'GPS'} 5.1855e+05 146.06 -55.336 10.52 304.81 1.3144e-12 1.2408e-12 0 0 2002-04-04 00:50:30 {'GPS'} 5.1845e+05 146.06 -54.705 10.522 305.44 1.3145e-12 1.2407e-12 0 0 2002-04-04 00:50:40 {'GPS'} 5.1835e+05 146.04 -54.074 10.524 306.07 1.3198e-12 1.2406e-12 0 0
You can access the column you want by using T.(1), T.(2), T.(3) etc.

5 comentarios

Thank you so much. I am using matlab2015a and when I use your method output T is 4x1 table. Then col1=T.(1) gives (4x1 cell). T.(2) gives "index exceeds matrix dimensions",i.e., dimensional error. It seems columns cannot be accessed by T.(1),T.(2) and so on.
KSSV
KSSV el 28 de Jul. de 2022
isn't it used to read Excel files? Here, I have .txt. I am just using a simple example. Real file is large one.
KSSV
KSSV el 28 de Jul. de 2022
Yes... you are right....explore the readtable option...
Thank you so much. I am exploring readtable option but yet to succeed.

Iniciar sesión para comentar.

Categorías

Preguntada:

el 28 de Jul. de 2022

Comentada:

el 29 de Jul. de 2022

Community Treasure Hunt

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

Start Hunting!

Translated by