cell配列内のstring配列を文字数で分割して、新たなcell配列を作る方法を教えてください。
28 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
K_S_
am 21 Jul. 2022
Kommentiert: Akira Agata
am 26 Jul. 2022
下記のような10×1のcell配列 cがあります。
cの各要素は16文字で、これを8文字ずつ分割し、
10×2のcell配列 dを作る方法を教えていただきたいです。
よろしくお願いいたします。
a = randn(1,10);
T = numerictype(true,64,60);
F = fimath('OverflowMode', 'saturate',...
'RoundMode', 'round',...
'SumMode', 'FullPrecision',...
'ProductMode', 'FullPrecision',...
'MaxProductWordLength', 256,...
'MaxSumWordLength', 256);
a_fi = fi(a,T,F);
b_fi = hex(a_fi);
c = strsplit(b_fi)'
0 Kommentare
Akzeptierte Antwort
Hernia Baby
am 21 Jul. 2022
a = randn(1,10);
T = numerictype(true,64,60);
F = fimath('OverflowMode', 'saturate',...
'RoundMode', 'round',...
'SumMode', 'FullPrecision',...
'ProductMode', 'FullPrecision',...
'MaxProductWordLength', 256,...
'MaxSumWordLength', 256);
a_fi = fi(a,T,F);
b_fi = hex(a_fi);
c = strsplit(b_fi)'
% 1~8文字だけ抜き出す
c1 = cellfun(@(x) x(1:8),c,'UniformOutput',false)
% 9~最後まで抜き出す
c2 = cellfun(@(x) x(8:end),c,'UniformOutput',false)
% 2つのcellを結合
c3 = [c1, c2]
3 Kommentare
Atsushi Ueno
am 21 Jul. 2022
Bearbeitet: Atsushi Ueno
am 21 Jul. 2022
細かいですが誤記を指摘します。誤記は回答の方だけで、上記コメントの方は正しくなっています。
c2 = cellfun(@(x) x(8:end),c,'UniformOutput',false) % 9~最後まで抜き出す【誤】
c2 = cellfun(@(x) x(9:end),c,'UniformOutput',false) % 9~最後まで抜き出す【正】
あとどうしても「もっと少ない手で出来ないか」とcody脳が疼きます。strsplit 関数は文字ベクトル や string スカラーしか受け付けませんが、文字ベクトルの cell 配列を受け付ける文字列処理関数も多いです。
c = {'0c23f10982cb9580';'1acea553c2c99c00'}; % 2行コピーしました
d = regexp(c,'.{8}','match'); % 任意の8文字にマッチした文字列を出力する
e = vertcat(d{:}) % ネストした cell 配列を1段階ほどく
Akira Agata
am 26 Jul. 2022
この問題、私もcody脳が疼きました。
以下のような方法ではどうでしょう?
c = {'0c23f10982cb9580';'1acea553c2c99c00'}; % 2行コピーしました
c2 = regexprep(c,'(^\w{8})(\w{8}$)','$1,$2'); % 最初の8文字と最後の8文字の間にカンマを入れる
e = split(c2,',') % カンマでスプリット
Weitere Antworten (0)
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!