読み取ったテキストファイル内の文字列に数値を代入する
Show older comments
解決したいこと
MATLABでテキスト内の行列マトリクスを読み取り、行列内に含まれる文字Xの値に10という数値を入れたいです。
記述ソースコード①
①はfor文内にXの数値を入れれば認識するかとプログラミングしました。
p = readmatrix('xyA_8.txt', 'NumHeaderLines', 5);
%行列のサイズの指定、0の空欄を作る
q = zeros(3,3);
%1~合計ピクセルまでfor文で回す
for i = 1:9
q(p(i,2)+1,p(i,1)+1) = p(i,3);
X = str2double('10')
end
disp(q);
①の結果と課題
45 45 45
45 NaN 45
45 45 45
①の場合、行列内のXに数値が入っていませんでした。記述ソースコード②
②はテキスト検索を用い、糸口がつかめるかとプログラミングしました。
%行列の読み取り=readmatrix
%~行目から読み取り=NumHeaderLines
p = readmatrix('xyA_8.txt', 'NumHeaderLines', 5);
%行列のサイズの指定、0の空欄を作る
q = zeros(3,3);
%1~合計ピクセルまでfor文で回す
for i = 1:9
q(p(i,2)+1,p(i,1)+1) = p(i,3);
end
%qの表示
disp(q);
idx = strfind(str,'X')
idx{:,:}
②の結果と課題
45 45 45
45 NaN 45
45 45 45
エラー: strfind
入力の文字列は、1 行でなければなりません。
エラー: colormap10 (line 28)
idx = strfind(str,'X')
こちらでも上手くいきませんでした。お聞きしたいこと
何故これらの場合は上手くいかないのか、目標とするテキスト内を読み込み、その中に存在する文字に対し、数値を代入し行列を完成する為のプログラムや手段をどうしたらよいか教えていただけると幸いです。
2 Comments
wataru suzuki 様
テキストファイルには、数値と文字列Xが含まれているという認識でよろしいでしょうか?
例えば、次のように。
1 2 3
4 X 6
7 8 9
このままですと、異なるデータ型が混在しているデータを読み込もうとしており、Xが数値としてみなされるので、NaNと置き換わってしまっています。
readmatrixを使うのであれば、オプション引数を設定するか、readlcellを使って一旦セルとして読み込むか等の前処理が必要かと思います。
.txtファイルを読み込んだ際、読み込んだデータのデータ型がどの様に影響するのか?を先ずは、インポート ツールを使用したテキスト ファイル データの読み取りを参考にしては如何でしょうか?読み込む方法や、対象データのデータ型によってどの様に読み取り結果が変化するのか?等を試して頂けると、ご理解頂けると思います。
wataru suzuki
on 29 Sep 2020
Accepted Answer
More Answers (1)
wataru suzuki
on 2 Oct 2020
0 votes
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!