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

16 Ansichten (letzte 30 Tage)
周平
周平 am 21 Okt. 2022
Kommentiert: 周平 am 23 Okt. 2022
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 Kommentare
Atsushi Ueno
Atsushi Ueno am 22 Okt. 2022
「データの最後のcell」とは「csvファイル内の最後のデータ」という意味でしょうか?
周平
周平 am 22 Okt. 2022
そのことです。わかりにくくてすみません。

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Atsushi Ueno
Atsushi Ueno am 22 Okt. 2022
>データのサイズが異なり、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 Kommentar
周平
周平 am 23 Okt. 2022
丁寧にありがとうございます。自動検出されることに気づきませんでした。理解できました。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu データのインポートと解析 finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!