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

277 次查看(过去 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 个)

产品


版本

R2021b

Community Treasure Hunt

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

Start Hunting!