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

32 views (last 30 days)
wataru suzuki
wataru suzuki on 2 Oct 2020
Commented: wataru suzuki on 2 Oct 2020
下記のようなプログラムを書き、文字列[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')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
読み取りテキストファイル

Accepted Answer

Kojiro Saito
Kojiro Saito on 2 Oct 2020
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 Comment
wataru suzuki
wataru suzuki on 2 Oct 2020
できました!ありがとうございます。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!