cellの最後の値の座標を求めたい

조회 수: 16 (최근 30일)
周平
周平 2022년 10월 21일
댓글: 周平 2022년 10월 23일
rangeでデータの範囲を指定したいのですが、データによって得たデータのサイズが異なり、cellの位置が変わるためうまくできません。解決法があるのであれば教えていただきたいです。よろしくおねがいします。 
[file,path] = uigetfile('*.csv');
% ファイル名と拡張子を分割する
[~,name,ext] = fileparts(file);
% ファイルを選択して、切り抜く場所を選んでP1とおく。
C = readcell([path,file],'Range','B42:[データの最後のcellを入れたい]');
%csvとしてフォルダに書き出す
writecell(C,[name ' ttt' ext]);
  댓글 수: 2
Atsushi Ueno
Atsushi Ueno 2022년 10월 22일
「データの最後のcell」とは「csvファイル内の最後のデータ」という意味でしょうか?
周平
周平 2022년 10월 22일
そのことです。わかりにくくてすみません。

댓글을 달려면 로그인하십시오.

채택된 답변

Atsushi Ueno
Atsushi Ueno 2022년 10월 22일
>データのサイズが異なり、cellの位置が変わるためうまくできません。解決法があるのであれば教えていただきたいです。
読み取り終了位置がファイルの最後の場合、終了行および終了列を指定しなくても自動検出機能を使う事が出来ます。
(読み取り終了位置がファイルの最後ではない場合は、必要最小限のデータを一旦読み取って、何らかの認識方法で不要部分を削除する必要があります。)
readcell関数の「Range の指定方法」を「四角形の範囲'B42:最後のcell'」から「開始セル'B42'」に替えれば解決します。
>インポート関数は、インポートを開始セルで開始し、最後の空の行またはフッター範囲で終了することで、データの範囲を自動的に検出します。(readcellー入力引数Range — 読み取るデータの部分ー開始セルの説明より抜粋)
分かり易い様にサイズの小さいサンプルデータを準備しました。B42セルから読み取るとD44まで、即ち3行3列のデータが読み込まれるはずです
%[file,path] = uigetfile('*.csv');
path = [pwd '/'];
file = 'Book2.csv'; % 分かり易い様にサイズの小さいサンプルデータを準備
% ファイル名と拡張子を分割する
[~,name,ext] = fileparts(file);
% ファイルを選択して、切り抜く場所を選んでP1とおく。
C = readcell([path,file],'Range','B42');
size(C) % 期待通り、最後のセルを指定しなくても自動検出によって読み込めた
ans = 1×2
3 3
%csvとしてフォルダに書き出す
writecell(C, [name ' ttt' ext]);
ls -la
total 16 drwxr-xr-x 2 mluser worker 4096 Oct 22 04:18 . drwx------ 1 mluser worker 4096 Oct 22 04:18 .. -rw-r--r-- 1 mluser worker 396 Oct 22 04:18 Book2.csv -rw-r--r-- 1 mluser worker 18 Oct 22 04:18 'Book2 ttt.csv'
  댓글 수: 1
周平
周平 2022년 10월 23일
丁寧にありがとうございます。自動検出されることに気づきませんでした。理解できました。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 データのインポートと解析에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!