フォルダ内のファイルを「1日分」読み込み、グラフを作るには?
6 views (last 30 days)
Show older comments
以下のように一つのフォルダに1分ごとに作成されたファイルがあります。①
このフォルダ内のファイルを「1日分」読み込み、グラフを作成したいです。
下記のプログラムはエラーが出ます。③ また、下記プログラムはフォルダ内の全てのファイル読み込みになっているが、「1日分」指定して読み込む方法にしたいです。
以前の質問に補足しました。 一人で詰まってしまい大変困っています。よろしくお願い致します。
----①フォルダ内
ファイル名 作成日時
e16A0319.272413 2016/10/03 19:26
e16A0319.272413 2016/10/03 19:27
・
・
----②一つのファイル内構造
e16A0319.272413
03/10/2016 19:26:23 03/10/2016 19:27:24 0000 0000.0 0000.0 00
0000000 0010 0018952 0010 04
1 0 2 00512 1 0000 0015 00829.o 0 0 00 000 12 150024 0.020 BT1
1 1 2 00512 1 0000 0015 00829.o 0 0 00 000 00 150024 3.1746 BC1
1 0 2 00512 1 0000 0015 00829.o 0 0 00 000 12 150023 0.020 BT1
1 1 2 00512 1 0000 0015 00829.o 0 0 00 000 00 150023 3.1746 BC1
邪ラ。ラシゥラOォラそラa泰ラL釐!TリラヨZラョェラ㌘ラtKラTxラ%rラ晗o蹟( ラ・ラュラソCラ 碩>槞遞ラM泰%ャラキラCコラdコラ・ラマララララ=・"ョfリツリタリリVリN/リコ4リ6DリDHリVリリDリヒ_リラaリjリYnリヲyリ|リ>リヲ筋X筋ト娩壓s」リ。「リgゥリッリyッリ┝リクチリソリ捨リ橆リH籀 ゚リチ袙、毖・リハ."ルYル-ルナル ルア'ルI2ルト6ル・ル・ルカ@ル'Jル祟ルxVル輯ル(cルjdルナiルHlルjルoルョtルモgルミpルnル+uル`pル綠ル2・ツEj\MソMS・果_ッ・Xオ・T-適・A」・s=FC>輅筋フfヘナシk・u%dロ0ヨа4ヒセ・ヲ ・・・・・・・・・・・・・・・・
-----③簡単なデータ構造
固定ヘッダ行1
固定ヘッダ行2
固定ヘッダ行3
データセットヘッダ行1
データセットヘッダ行2
データセットヘッダ行3
データセットヘッダ行4
データセット1 (512x4バイト)
データセット2 (512x4バイト)
データセット3 (512x4バイト)
データセット4 (512x4バイト)
------④プログラム
DebugFiles = 'C:\Users\ken\Documents\MATLAB\161004';
%ファイル名をフルパスごと取得 「161004」というフォルダ
D = dir(DebugFiles);
%フォルダ内のファイルの名前を全取得
for k = 1:length(D)
% ファイルオープン
fid = fopen('D(k).name');
% ヘッダー読み込み
for i = 1:3
headers{i} = fgetl(fid);
end
% データセットの数を取り出し
third_header = sscanf(headers{3},'%f');
num_datasets = third_header(end); %データセット数
% データセットのヘッダーを読み込み
datasetheader = {};
for i = 1:num_datasets
datasetheader{i} = fgetl(fid);
end
%fread(fid,2,'uint8') % Read CRLF=13d 10d
% データセットのヘッダーに記載されたデータ分バイナリデータを読み込む
data = {};
for i = 1:num_datasets
dataheader_parsed = sscanf(datasetheader{i},'%d');
num_read = dataheader_parsed(4); %1つのデータセットのデータ数
[data{i},cout] = fread(fid,num_read,'long');
fread(fid,2,'uint8') % Read CRLF=13d 10d
end
% データファイルのクローズ
fclose(fid);
% 行列に整形(各データの数が同じ場合は成功)
DataMat = [data{:}];
plot(DataMat);
hold on
end
Accepted Answer
michio
on 31 Jul 2017
Edited: michio
on 31 Jul 2017
「1日分」をどこまで厳密に指定されるか次第ですが・・・少なくとも計測開始日はファイル名だけで絞り込めそうです。計測終了までとなると・・ファイル中身(2行目)を見て行く必要がありますね。
03/10/2016 19:26:23 03/10/2016 19:27:24 0000 0000.0 0000.0 00
ファイル名で絞り込む場合は、いま
D = dir(DebugFiles);
と実行している所を
D = dir(DebugFiles, '*16A03*');
と変更すると、2016年10月3日に計測開始されたファイルだけが選ばれますので、その日のデータだけを読み取ることになる・・かと思いますが、いかがでしょう?
ファイルフォーマット を確認するとファイル名の命名規則が冒頭で説明されています。例えば e16A0319.272413 を例に取ると
(略) the filename, which begins with
- a letter -> e (意味はわかりませんが・・)
- two digits showing the years in the century -> 16 (2016年)
- the month (hexadecimal, one digit) -> A (16進数なので10月)
- the day (decimal, two digits) -> 03 (3日)
- the hour (decimal, 24 hours per day, two digits) -> 19 (19時)
といった感じです。
7 Comments
More Answers (0)
See Also
Categories
Find more on 低水準ファイル I/O in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!