@cccqwakk (航 鈴木)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

読み取ったテキストファイル内の文字列に数値を代入する

解決したいこと

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')

こちらでも上手くいきませんでした。

お聞きしたいこと

何故これらの場合は上手くいかないのか、目標とするテキスト内を読み込み、その中に存在する文字に対し、数値を代入し行列を完成する為のプログラムや手段をどうしたらよいか教えていただけると幸いです。

0 likes

1Answer

1 の場合

  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')
+     X = str2num('10')
  end
  
  disp(q);

2 の場合、

strfind は 改行が含まれているとエラーになるようですね。
1行づつ読み取っているループ中でstrfindを使うか、containを使うか、

replaceを使うのが良いと思います。

0Like

Your answer might help someone💌