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

8 Ansichten (letzte 30 Tage)
Kouki
Kouki am 29 Nov. 2019
Kommentiert: Kouki am 8 Dez. 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,といったようにしたい。

Akzeptierte Antwort

Shunichi Kusano
Shunichi Kusano am 1 Dez. 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 Kommentar
Kouki
Kouki am 8 Dez. 2019
回答ありがとうございます.
参考にさせていただきます.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu 関数の基礎 finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!