読み取りファイルの文​字列間の空白によるr​eadcellのエラ​ー

조회 수: 32 (최근 30일)
wataru suzuki
wataru suzuki 2020년 10월 2일
댓글: wataru suzuki 2020년 10월 2일
下記のようなプログラムを書き、文字列[No Data]があるファイルからデータを読み込み計算するプログラムを
作りたいと考えています。
しかし文字列のNo と Dataの空白が原因で配列の形が望むものと変わってしまい以下のようなものが発生してしまいます。
エラー: cell2mat (line 45)
入力のセル配列のすべての内容は、同じデータ型でなければなりません。
エラー: colormap12 (line 15)
myMatrix = cell2mat(ret);
今後のプログラムのデータ数が膨大なためMATLABからreadcellで読み込む前に空白の削除を行う、
配列の形状を直せないかをなど考え、strtrimなどを行ってみたのですが私のみでは解決できませんでした。
解決方法を教えていただけないでしょうか
プログラム
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ret = readcell('sanple_8.txt', 'NumHeaderLines', 5);
tmp = find(strcmp('No Data', ret));
ret(tmp) = num2cell(10);
disp(ret(tmp));
myMatrix = cell2mat(ret);
q = zeros(3,3);
for i = 1:9
q(myMatrix(i,2)+1,myMatrix(i,1)+1) = myMatrix(i,3);
end
image(q,'CDataMapping','scaled')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
読み取りテキストファイル

채택된 답변

Kojiro Saito
Kojiro Saito 2020년 10월 2일
importOptionsを使って、読み込む変数を3つだけに絞り込んでみたら良いと思います。
filename = 'sample.txt';
opts = detectImportOptions(filename);
opts.SelectedVariableNames = {'x', 'y', 'A'}; % x,y,Aの3列だけ読み込む
% 列操作が楽なので、一旦tableとして読み取ります
ret = readtable(filename, opts);
% No Dataの部分はA列に「No」として読み取られ、数値でないのでNaNが格納されます
% A列からNaNの行を抽出します
idx = isnan(ret.A);
% NaNのところに10を代入します
ret.A(idx) = 10;
% 配列に変換します
myMatrix = table2array(ret);
  댓글 수: 1
wataru suzuki
wataru suzuki 2020년 10월 2일
できました!ありがとうございます。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!