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

조회 수: 12 (최근 30일)
Kenta
Kenta 2022년 6월 15일
편집: Atsushi Ueno 2022년 6월 15일
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

채택된 답변

Atsushi Ueno
Atsushi Ueno 2022년 6월 15일
편집: Atsushi Ueno 2022년 6월 15일
>元々のサンプル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');

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 大きなファイルとビッグ データ에 대해 자세히 알아보기

제품


릴리스

R2022a

Community Treasure Hunt

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

Start Hunting!