電子書籍の厳選無料作品が豊富!

テストデータをMATLABに取り込んでデータ整理をしたいと思っています.
不要な行を削除するにはどのようにすればいいでしょうか?
取得するデータは下記のような感じで,実際には数千行ぐらいの量になります.

070B 8 F4 01 1C 02 FD 01 7E 05 3.232 R
070C 8 FF 01 03 02 28 00 12 00 3.233 R
070B 8 F8 01 AF 01 FD 01 E4 05 3.237 R
070C 8 00 02 02 02 28 00 13 00 3.238 R
060B 5 43 41 4E 5F 31 3.238 R
070B 8 F3 01 28 02 FD 01 EB 04 3.242 R
070C 8 00 02 04 02 29 00 13 00 3.243 R

070Bと070Cで始まる行が交互にあり,不定期に060Bで始まる行が出てきます.
これらのデータから060Bで始まる行だけを削除するにはどうすればよろしいでしょうか?
060Bの行は他の行に比べて要素数も少ないです.
現時点ではテキストエディタで開いた後,手動で削除しているのですが,データ量が増えてきたので自動化できないかと思っています.
アドバイスよろしくお願いします.

A 回答 (4件)

#2です。


とりあえず2案ほど・・・・相変わらず確認はしてません。
matlabはfor文つかったら負けなので案1の方がお勧めです。


%案1
filename='a.txt';
num_cols = 12;

[fid,message]=fopen(filename,'rt');
if fid ==-1
error(message);
end
text=textscan(fid,repmat('%s',1,num_cols));
fclose(fid);

text_=cat(2,text{:});
text_(strcmp(text{1},'060B'),:)=[]:

%文字列配列として使う
cell2mat(text_(1:end,1))

%数値として扱う
hex2dec(cell2mat(text_(1:end,1)))

%案2
filename='a.txt';
num_cols = 12;

[fid,message]=fopen(filename,'rt');
if fid ==-1
error(message);
end
text=textscan(fid,repmat('%s',1,num_cols));
fclose(fid);

cmp=strcmp(text{1},'060B');
for I=1:num_cols;
text{I}(cmp)=[]:
end

%文字列配列として使う
cell2mat(text(1))

%数値として扱う
hex2dec(cell2mat(text(1)))
    • good
    • 0
この回答へのお礼

ご指導ありがとうございました.
案1をベースにさせていただきました.

お礼日時:2011/06/02 06:57

#2です。



cmpDATA(:)='060B';
は間違いですね。こうかな?
cmpDATA(:)={'060B'};

相変わらず未確認なので、動くかはわかりません。

この回答への補足

取り込む型を間違っていました。
[text] = textread(filename, '%s', -1);
で取り込んだ後、n行1列の配列12個に振り分けています。
現在のプログラムは下記なのですがこのやり方だと'060B'の行を削除するのは難しいでしょうか?
たびたびお手数をおかけしますがアドバイスよろしくお願いします。

[text] = textread(filename, '%s', -1);
num_cols = 12;
lines = round(length(text)/num_cols);

data1 = zeros(lines,1);
...
data12 = zeros(lines,1);

for i = 1:lines
data1 = char(text(num_cols*(i-1)+1));
   ...
data12= char(text(num_cols*(i-1)+12));
end

補足日時:2011/05/31 06:42
    • good
    • 0

matlabでどのような型で取り込んでいるんでしょう?


n行12列のセル配列ですか?

セル配列だとして、これをDATAとすると、こんな感じかな?
lines= size(DATA,1);
cmpDATA = cell(lines,1);
cmpDATA(:)='060B';
DATA(strcmp(DATA(1:end,1),cmpDATA),:)=[];

手元にmatlab無いんで未確認です。

この回答への補足

早速のご回答ありがとうございます.
各列個別に取り込みたいので,取りこむ型はn行1列の配列12個です.

出先のためMatlabですぐに確認はできませんが,戻り次第,トライしたいと思います.

補足日時:2011/05/29 12:33
    • good
    • 0

grep や findstr などのコマンドで除外してみては。

「MATLABでのデータ処理に関して」の回答画像1

この回答への補足

ご回答ありがとうございます.

なるほど.
コマンドラインで出来てしまうのですね.
今回のデータ処理は,PCの操作に慣れていない人間でも出来るようにしておかないと駄目なため
出来ればMatlabでやりたいと思っています.
(グラフを描く作業をMatlabでやるようにM-Fileを使っています)

補足日時:2011/05/29 12:36
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!