特定の数字列を取り出す方法
9 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
イメージデータを画像で添付させて頂きました。
B列には0と1からなるマーク数列、c列には1から23までの数字があります。これをB列の1となっているところだけ、右のよう(E列以降)に取り出したいです。お時間がある方、助言を教えて頂きたいです。(ただし、実際のデータは1の文字列が何個あるのか分からないものとなっております。また、0と1の並び方は不規則です。)
0 commentaires
Réponse acceptée
Hernia Baby
le 16 Sep 2021
まずは読み込みます
clear,clc;
A = readmatrix('Sample.xlsx');
■ここがミソ
unique 関数で一位の値をだし、それに該当する2列目の数字を取り出します
idx = unique(A(:,1))
B = A(A(:,1) == idx(2),2)
E2以降に書き込みます
writematrix(B,'Sample.xlsx','Range','E2')
5 commentaires
Hernia Baby
le 16 Sep 2021
1が単体で存在すると非常に難しいです
ここからここまでを抜き出すといった物はできるんですが、1が連続しないとなるとそれが通用しません
一応コードを書きましたので以下に示します
■読み込み
clear,clc;
file = 'Sample.xlsx';
A = readmatrix(file,"OutputType","double"');
■1のインデックスを抜き出す
[row,~,~] = find(A(:,1));
■1の開始と終了を抜き出す
idxs = [0; diff(row)] ~= 1;
idxs(end) = 1;
idxe = [diff(row); 0] ~=1;
idxe(end) = 0;
idx = logical(idxs + idxe);
■開始&終了をセットにする
row1 = reshape(row(idx),2,[])
■1つずつ追加していく
この時AZを超えるとエラーを吐き出す
for i = 1:length(row1(1,:))
chart = char('E' + 3*i);
if chart > 'Z'
chart = ['A', char('A' + chart - 'Z')];
end
if chart > 'AZ'
disp('分割数がAZより大きいです')
break
end
disp([chart,'2'])
writematrix(A(row1(1,i):row1(2,i),:),file,'Range',[chart,'2']);
end
今回はQ2のセルにまで書くようになっています
もう一度言いますが、row1のセットができないので、
このコードでは1が単体で存在する場合はエラーを起こします
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Logical dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!