数値と文字が含まれる​cell配列をdat​ファイルとして出力す​る際に、文字は””を​つけ、数値には前後に​何もつけないようにす​るにはどうすればいい​ですか?

5 views (last 30 days)
Kenta
Kenta on 15 Jun 2022
Edited: Atsushi Ueno on 15 Jun 2022
cell配列の出力に関する質問です。
下記のようなサンプルdatファイルをcell配列で読み込み、6、9行目を書き換えた後、新たなdatファイルとして保存したいと考えています。
datファイルを読み込み、6,9行目を書き換えることはできたのですが、cell配列の中身がすべて文字ベクトルのため、datファイルとして出力した際に、カンマが入っている行に""がついています。
これを元々のサンプルdatファイルと同じように1行目と6行目にだけ””をつけるようにするには、どうすればいいでしょうか。
コード、出力されたdatファイル、出力したいdatファイルの形の順で載せておきます。
サンプルdatファイル
"ex1"
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18
1, 10.0, 1.0, 0.5, 1, 1
0, 1.0e-8,
1, 1, 1, 1, 1
"exi.rst"
1, 1, 1, 2, 1
10
1
0.05
2.00
コード
% datファイル 読み込み
clear;clc
N1 = 1;
s1 = 1;
k = 0.05;
fid = fopen('ex1.dat');
k = 1;
a = cell(11,1);
while (~feof(fid))
tline = fgetl(fid);
a{k,:} = tline;
k = k + 1;
end
case_name = "ex_";
rst_number_N = num2str(0);
underber = "_";
number_steps = num2str(0);
exs_rst = ".rst";
% datファイル内、リスタートファイル書き換え
str1 = append(case_name,rst_number_N,underber,number_steps,exs_rst);
a(6,1) = cellstr(str1);
a(9,1) = num2cell(k);
% datファイル名 作成
datnumber_N = num2str(N1);
datnumber_steps = num2str(s1);
exs_dat = ".dat";
dat_name = append(case_name,datnumber_N,underber,datnumber_steps,exs_dat);
% datファイルへ書き出し
writecell(a,dat_name);
出力datファイル
"""ex1"" "
"1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 "
"1, 10.0, 1.0, 0.5, 1, 1 "
"0, 1.0e-8 "
"1, 1, 1, 1, 1 "
ex_0_0.rst
"1, 1, 1, 2, 1"
10
1
5
2.00
出力したいdatファイルの形
"ex1"
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18
1, 10.0, 1.0, 0.5, 1, 1
0, 1.0e-8
1, 1, 1, 1, 1
"ex_0_0.rst"
1, 1, 1, 2, 1
10
1
5
2.00

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 15 Jun 2022
Edited: Atsushi Ueno on 15 Jun 2022
>元々のサンプルdatファイルと同じように1行目と6行目にだけ””をつけるようにするには、どうすればいいでしょうか。
  • writecell関数のQuoteStringsオプションをnoneに設定し二重引用符””の出力を抑止してください
  • 6行目を書き換える際に文字として読み込んだ二重引用符””はそのまま変更しないでください
  • 9行目を書き換える際にセル配列内の型が変わっています。型を変えずに書き換えてください
具体的には下記を変更すれば良いです
% 「"exi.rst"」を「ex_0_0.rst」に変更した為、二重引用符が失われています。
% 20行目のappend関数の最初と最後に""""を追加し、読み込んだ二重引用符を維持してください
str1 = append("""",case_name,rst_number_N,underber,number_steps,exs_rst,"""");
% セル配列内の文字{'1'}が、セル配列内の数値{[12]}に変わってしまっています。
% 22行目のnum2cell(k)をcellstr(num2str(k))に変更し、セル配列内の文字{'12'}としてください
a(9,1) = cellstr(num2str(k));
%30行目のwritecell関数にオプション'QuoteStrings','none'を追加してください
writecell(a,dat_name,'QuoteStrings','none');

More Answers (0)

Community Treasure Hunt

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

Start Hunting!