MATLAB Answers

0

複数データの結合方法について

Takaki Fujii さんによって質問されました 2018 年 11 月 1 日
最新アクティビティ Kazuya
さんによって コメントされました 2018 年 11 月 6 日
複数のテキストファイルを結合して一つのテキストファイルにする方法を教えてください。 下記コードのように、ある任意の日付時刻における行列データから特定の要素の値を抽出し、その値をテキストファイルに保存しました。これをすべての日付で行うと大量のファイルがあり、 このファイルの値を一つの列(行)ベクトルにまとめplotで図化したいと考えています。 色々な方法を試しましたがファイルが上書きされてしまったり、うまくいきません。逐一、値をファイルに保存するやり方でなくとも構いませんので、ご教授いただければ幸いです。
for yyyy = 2012:2012
for mm = 1:1
for dd = 1:31
for hh = 0:6:18%6時間ごとのデータ
yyyymmddhh = (yyyy.')*10^6+(mm.')*10^4+(dd.')*10^2+(hh.');
yyyymmddhh = num2str(yyyymmddhh);%日付時間の計算です
U=dlmread(['U_speed',num2str(yyyymmddhh),'.txt'],'',4,0);%日付時間に対応したファイルの読み込みです
uspeed = U(241,268);%241,268が抽出したい行列の要素です
save('filename',num2str(yyyymmddhh),'.txt','uspeed','-ascii');%任意の日付時間での行列要素をテキストファイルに保存しました
end
end
end
end

  2 件のコメント

Kazuya
2018 年 11 月 4 日
ファイルの数にもよりますが、逐一保存するよりは必要な点だけを変数に確保しておいてプロットする方法がよさそうです。
描画すべき点は各ファイルから1点だけ、それも常に(241,268)の位置にあるものだけですか?その場合プロットの横軸はファイル名に含まれる時刻ですか?
Takaki Fujii 2018 年 11 月 6 日
コメントありがとうございます。返答が遅くなってすみません。1点だけ常に(241,268)の位置にあります。横軸はファイル名に含まれる時刻になります。

サインイン to comment.

1 件の回答

Etsuo Maeda
回答者: Etsuo Maeda
2018 年 11 月 5 日
 採用された回答

上書きしてしまう・・・というところは、saveの使い方を見直す必要がありそうです。
コードを見る限りは読むファイルと同じ名前でsaveしてしまっています。
汎用性を考えると、datetimeで時間を作ったほうが楽だと思います。
clear; close all;
% time duration
T1 = datetime(2012, 1, 1, 0, 0, 0); % 2012/1/1 00:00:00
T2 = datetime(2012, 1, 3, 0, 0, 0); % 2012/1/3 00:00:00
dt = hours(6); % par 6 hours
Times = T1:dt:T2;
% create characters
FormatOut = 'yyyymmddHH';
TimeStr = datestr(Times, FormatOut);
sz = size(TimeStr);
% create dummy data
for k = 1:sz(1)
A = rand(500)*k;
save([TimeStr(k, :), '.txt'], 'A', '-ascii')
end
% read dummy data
for k = 1:sz(1)
M(k, :) = dlmread([TimeStr(k, :), '.txt'], '', [241 268 241 268]);
end
% plot data
plot(Times, M)
くらいの感じでいいんじゃないでしょうか。
HTH

  1 件のコメント

Kazuya
2018 年 11 月 6 日
細かい点ですがハマってしまわないように・・補足だけ。 もともと
U=dlmread(['U_speed',num2str(yyyymmddhh),'.txt'],'',4,0);
で 4行飛ばして読み込んでからの 241行268列目のデータなので、、その点だけピンポイントで読み込むなら
M(k, :) = dlmread([TimeStr(k, :), '.txt'], '', [245 268 245 268]);
ですかね?
> Takaki Fujii さん
細かいところは試してみて修正してみてください。

サインイン to comment.