csvファイルまたは​テキストファイルから​データを読み込みたい

조회 수: 356 (최근 30일)
yuta
yuta 2022년 3월 22일
댓글: yuta 2022년 3월 23일
question.csvのようなデータを読み込みたいです。
#❶ 文字列を含む読み込まなくて良い行が5行
#① その下に読み込みたい複数行
#❷ 空白の1行と文字列を含む読み込まなくて良い行が5行
#② その下に読み込みたい複数行
#❸ 空白の1行と文字列を含む読み込まなくて良い行が5行
#③ その下に読み込みたい複数行
のような内容で構成されており、①と②と③は独立しているため、別々で読み込みたいと考えています。
またquestion.csvは数十列で作成していますが、実際は行数が多く、読み込むcsvファイルにより行数も異なるため、
行数を指定して読み込むのが難しいです。
B = readmatrix('question.csv', 'NumHeaderLines',5) ;
のようにコードを書くと、最初の5行部分を取り除いた形でimportできるとこまでは理解できたのですが、
このように読み込んでしまうと、#①から#③までが繋がってしまうことや、#❷や#❸を取り除くことができません。
何か良い方法がありましたらご教示いただければと思います。
よろしくお願いします。
  댓글 수: 2
Hernia Baby
Hernia Baby 2022년 3월 22일
32行目1列目の 1 は必要でしょうか?
yuta
yuta 2022년 3월 22일
コメントありがとうございます。
32行目は必要ありません。

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

채택된 답변

Hernia Baby
Hernia Baby 2022년 3월 22일
2列目に余計な数字がないことを利用して抜き出します
■読み込み
clear,clc;
filepath = "question.csv";
question = readmatrix(filepath);
■indexを使う
2列目のNaN(文字や空欄)の判定をし、前後をひきます
すると始まりと終わりの部分だけがtrueになります
idx = isnan(question(:,2));
idx_or =[0;diff(idx)]<0|[diff(idx);0]>0;
disp(idx_or')
Columns 1 through 56 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 Columns 57 through 91 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
■行番号を見つける
find関数で行番号を見つけます
行番号の数が偶数でなければ最後の行がNaNで終わってない証拠です
最後の行番号を付け加えます
num = find(idx_or);
if mod(length(num),2)
num = [num;height(idx_or)];
end
行番号が書かれている変数 num の半分のサイズだけ繰り返し操作します
for ii = 1:length(num)/2
A{ii,1} = question(num(2*ii-1):num(2*ii),:);
end
cell型として A に各行列が入りましたがNaNの列が存在します
cellfunでまとめて消しましょう
B = cellfun(@(x) rmmissing(x,2),A,'UniformOutput',false);
これで求めたい行列を一つのcell型Bに格納できました
cellfun(@size,B,'UniformOutput',false)
ans = 4×1 cell array
{[20 11]} {[20 11]} {[20 32]} {[ 10 8]}
  댓글 수: 5
Hernia Baby
Hernia Baby 2022년 3월 23일
わからなければ、多分すぐ作れますので、別途質問してください
yuta
yuta 2022년 3월 23일
試してみましたが、上手くいきませんでした。
複数のcsvファイルを一度の読み込みたいという質問を上げましたので
お時間ある際にご回答いただけると幸いに存じます。
何卒、よろしくお願いいたします。

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

추가 답변 (0개)

카테고리

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

제품


릴리스

R2021b

Community Treasure Hunt

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

Start Hunting!