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

조회 수: 7 (최근 30일)
健気 大川
健気 大川 2021년 9월 16일
댓글: 健気 大川 2021년 9월 17일
イメージデータを画像で添付させて頂きました。
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에서 コンピューター ビジョンと Simulink에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!