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

조회 수: 9 (최근 30일)
Kouki
Kouki 2019년 11월 29일
댓글: Kouki 2019년 12월 8일
ファイル名が'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,といったようにしたい。

채택된 답변

Shunichi Kusano
Shunichi Kusano 2019년 12월 1일
こんにちは。
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
Kouki
Kouki 2019년 12월 8일
回答ありがとうございます.
参考にさせていただきます.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 関数の基礎에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!