複数データの結合方法について
27 views (last 30 days)
Show older comments
複数のテキストファイルを結合して一つのテキストファイルにする方法を教えてください。 下記コードのように、ある任意の日付時刻における行列データから特定の要素の値を抽出し、その値をテキストファイルに保存しました。これをすべての日付で行うと大量のファイルがあり、 このファイルの値を一つの列(行)ベクトルにまとめ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 Comments
Kazuya
on 4 Nov 2018
ファイルの数にもよりますが、逐一保存するよりは必要な点だけを変数に確保しておいてプロットする方法がよさそうです。
描画すべき点は各ファイルから1点だけ、それも常に(241,268)の位置にあるものだけですか?その場合プロットの横軸はファイル名に含まれる時刻ですか?
Accepted Answer
Etsuo Maeda
on 5 Nov 2018
上書きしてしまう・・・というところは、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 Comment
Kazuya
on 6 Nov 2018
細かい点ですがハマってしまわないように・・補足だけ。 もともと
U=dlmread(['U_speed',num2str(yyyymmddhh),'.txt'],'',4,0);
で 4行飛ばして読み込んでからの 241行268列目のデータなので、、その点だけピンポイントで読み込むなら
M(k, :) = dlmread([TimeStr(k, :), '.txt'], '', [245 268 245 268]);
ですかね?
> Takaki Fujii さん
細かいところは試してみて修正してみてください。
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!