特定の数字列を取り出す方法

8 次查看(过去 30 天)
健気 大川
健気 大川 2021-9-16
イメージデータを画像で添付させて頂きました。
B列には0と1からなるマーク数列、c列には1から23までの数字があります。これをB列の1となっているところだけ、右のよう(E列以降)に取り出したいです。お時間がある方、助言を教えて頂きたいです。(ただし、実際のデータは1の文字列が何個あるのか分からないものとなっております。また、0と1の並び方は不規則です。)

采纳的回答

Hernia Baby
Hernia Baby 2021-9-16
まずは読み込みます
clear,clc;
A = readmatrix('Sample.xlsx');
■ここがミソ
unique 関数で一位の値をだし、それに該当する2列目の数字を取り出します
idx = unique(A(:,1))
idx = 2×1
0 1
B = A(A(:,1) == idx(2),2)
B = 13×1
3 4 5 7 8 9 13 14 16 17
E2以降に書き込みます
writematrix(B,'Sample.xlsx','Range','E2')
  5 个评论
Hernia Baby
Hernia Baby 2021-9-16
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,[])
row1 = 2×4
3 7 13 16 5 9 14 20
■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
H2 K2 N2 Q2
今回はQ2のセルにまで書くようになっています
もう一度言いますが、row1のセットができないので、
このコードでは1が単体で存在する場合はエラーを起こします
健気 大川
健気 大川 2021-9-17
ありがとうございます。1が単体で存在することなないので解決いたしました。
お忙しい中ありがとうございました。

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!