繰り返し処理と変数の作成
9 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
ファイル名が'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 Commenti
Risposta accettata
Shunichi Kusano
il 1 Dic 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
動作確認までしていませんが、このような感じで作れると思います。
Più risposte (0)
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!