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

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

Categories

Find more on 大きなファイルとビッグ データ in Help Center and File Exchange

Products


Release

R2022a

Community Treasure Hunt

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

Start Hunting!