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

19 visualizaciones (últimos 30 días)
周平
周平 el 21 de Oct. de 2022
Comentada: 周平 el 23 de Oct. de 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 comentarios
Atsushi Ueno
Atsushi Ueno el 22 de Oct. de 2022
「データの最後のcell」とは「csvファイル内の最後のデータ」という意味でしょうか?
周平
周平 el 22 de Oct. de 2022
そのことです。わかりにくくてすみません。

Iniciar sesión para comentar.

Respuesta aceptada

Atsushi Ueno
Atsushi Ueno el 22 de Oct. de 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 comentario
周平
周平 el 23 de Oct. de 2022
丁寧にありがとうございます。自動検出されることに気づきませんでした。理解できました。

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre データのインポートと解析 en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!