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

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

Connectez-vous pour commenter.

Réponse acceptée

Hernia Baby
Hernia Baby le 22 Mar 2022
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 commentaires
Hernia Baby
Hernia Baby le 23 Mar 2022
わからなければ、多分すぐ作れますので、別途質問してください
yuta
yuta le 23 Mar 2022
試してみましたが、上手くいきませんでした。
複数のcsvファイルを一度の読み込みたいという質問を上げましたので
お時間ある際にご回答いただけると幸いに存じます。
何卒、よろしくお願いいたします。

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur データのインポートとエクスポート dans Help Center et File Exchange

Produits


Version

R2021b

Community Treasure Hunt

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

Start Hunting!