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

11 visualizaciones (últimos 30 días)
Kouki
Kouki el 29 de Nov. de 2019
Comentada: Kouki el 8 de Dic. de 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,といったようにしたい。

Respuesta aceptada

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

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre 関数の基礎 en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!