- writecell関数のQuoteStringsオプションをnoneに設定し二重引用符””の出力を抑止してください
- 6行目を書き換える際に文字として読み込んだ二重引用符””はそのまま変更しないでください
- 9行目を書き換える際にセル配列内の型が変わっています。型を変えずに書き換えてください
数値と文字が含まれるcell配列をdatファイルとして出力する際に、文字は””をつけ、数値には前後に何もつけないようにするにはどうすればいいですか?
12 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Kenta
am 15 Jun. 2022
Bearbeitet: Atsushi Ueno
am 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
0 Kommentare
Akzeptierte Antwort
Atsushi Ueno
am 15 Jun. 2022
Bearbeitet: Atsushi Ueno
am 15 Jun. 2022
>元々のサンプルdatファイルと同じように1行目と6行目にだけ””をつけるようにするには、どうすればいいでしょうか。
具体的には下記を変更すれば良いです
% 「"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 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu 大きなファイルとビッグ データ finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!