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

25 visualizaciones (últimos 30 días)
Takaki Fujii
Takaki Fujii el 1 de Nov. de 2018
Comentada: Kazuya el 6 de Nov. de 2018
複数のテキストファイルを結合して一つのテキストファイルにする方法を教えてください。 下記コードのように、ある任意の日付時刻における行列データから特定の要素の値を抽出し、その値をテキストファイルに保存しました。これをすべての日付で行うと大量のファイルがあり、 このファイルの値を一つの列(行)ベクトルにまとめ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 comentarios
Kazuya
Kazuya el 4 de Nov. de 2018
ファイルの数にもよりますが、逐一保存するよりは必要な点だけを変数に確保しておいてプロットする方法がよさそうです。
描画すべき点は各ファイルから1点だけ、それも常に(241,268)の位置にあるものだけですか?その場合プロットの横軸はファイル名に含まれる時刻ですか?
Takaki Fujii
Takaki Fujii el 6 de Nov. de 2018
コメントありがとうございます。返答が遅くなってすみません。1点だけ常に(241,268)の位置にあります。横軸はファイル名に含まれる時刻になります。

Iniciar sesión para comentar.

Respuesta aceptada

Etsuo Maeda
Etsuo Maeda el 5 de Nov. de 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 comentario
Kazuya
Kazuya el 6 de Nov. de 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 さん
細かいところは試してみて修正してみてください。

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!