MATLAB Answers

繰り返し処理と変数の作成

8 views (last 30 days)
Kouki
Kouki on 29 Nov 2019
Commented: Kouki on 8 Dec 2019
ファイル名が'sample1.txt','sample2.txt','sample3.txt',........,'sample(N).txt'といったようなファイルがN個あるとして、
sample2.txtの時は、X2_average、sample(N).txtの時は,X(N)_average (コードの最終行付近)となるようにし、ファイルを読み込むごとにX1_average~X(N)_averageの計N個の変数を作成したいです.
(ファイルのsample(N).txtのNの数値と変数X(N)_averageのNが連動するように...)
テキストファイルのサンプルは添付してあるものです.(これと同じ形式のものが複数あるという想定で...)
%file open
fid=fopen('sample1.txt','r');
data_num=100;
X=zeros(data_num,1);
T=zeros(data_num,1);
for k=1:data_num
tline = fgetl(fid);
if (isempty(tline)==1)
break
elseif (tline==-1)
break
else
%XDATA%
x_start=find(tline=='=');
x_end=find(tline=='[');
val_x= tline(x_start+1:x_end-1);
val_x=str2num(val_x);
%TIME%
%hour
h_start=find(tline=='>');
val_h= tline(h_start-14:h_start-13);
val_h=str2num(val_h);
%min
m_start=find(tline=='>');
val_m= tline(m_start-11:m_start-10);
val_m=str2num(val_m);
%second
s_start=find(tline=='>');
val_s= tline(s_start-8:s_start-7); %%%小数点以下入れるときは-8:-13
val_s=str2num(val_s);
%TIME
val_t=val_h*3600+val_m*60+val_s;
%recording place
X(k)=val_x;
T(k)=val_t;
end
end
fclose(fid);
%recording
data_num=k-1;
X= X(1:data_num,1);
T= T(1:data_num,1);
%Average
X1_average=mean(X);%%%sample2.txtの時は、X2_average、sample(N).txtの時は,X(N)_average,といったようにしたい。

  0 Comments

Sign in to comment.

Accepted Answer

Shunichi Kusano
Shunichi Kusano on 1 Dec 2019
こんにちは。
for文を使って、すでに作成されているスクリプトを入力ファイル名を変えながら呼び出して、結果を配列に保存していく、という流れが一番素直かとおもいます。
X_average = zeros(1,N);
for i = 1:N
filename = sprintf('sample%d.txt', i);
X_average(i) = processfile(filename); % processfileはすでに作成のスクリプトを関数化した想定です。
end
もし個別に変数名を振りたいのであれば、構造体作って保存していくのがいいかと思います(上の方が使いやすいですが)。その場合は
for i = 1:N
filename = sprintf('sample%d.txt', i);
varname = sprintf('X%d_average', i);
output.(varname) = processfile(filename);
end
動作確認までしていませんが、このような感じで作れると思います。

  1 Comment

Kouki
Kouki on 8 Dec 2019
回答ありがとうございます.
参考にさせていただきます.

Sign in to comment.

More Answers (0)

Sign in to answer this question.