読み取りファイルの文字列間の空白によるreadcellのエラー
7 views (last 30 days)
Show older comments
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')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
読み取りテキストファイル
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/369604/image.png)
0 Comments
Accepted Answer
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);
More Answers (0)
See Also
Categories
Find more on スプレッドシート 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!