同じフォルダ内にある​複数のcsvファイル​をインポートしたい

조회 수: 15 (최근 30일)
gs
gs 2022년 11월 26일
댓글: gs 2022년 11월 26일
同じフォルダ内に複数あるcsvファイルのa~b行c列にある数値をインポートし、一つの数値行列にまとめたいです。一つずつインポートすればいいのですがファイルの数が多いため、ご教示いただけますと幸いです。

채택된 답변

Atsushi Ueno
Atsushi Ueno 2022년 11월 26일
for i = 1:100
fileID = fopen(['test' num2str(i) '.csv'], 'w');
nbytes = fprintf(fileID,'%5d,%5d,%5d,%5d,%5d\n',magic(5));
fclose(fileID); % 動作確認用にCSVファイル'test(数字).csv'を100個作成
end
ls
test100.csv test16.csv test22.csv test29.csv test35.csv test41.csv test48.csv test54.csv test60.csv test67.csv test73.csv test7.csv test86.csv test92.csv test99.csv test10.csv test17.csv test23.csv test2.csv test36.csv test42.csv test49.csv test55.csv test61.csv test68.csv test74.csv test80.csv test87.csv test93.csv test9.csv test11.csv test18.csv test24.csv test30.csv test37.csv test43.csv test4.csv test56.csv test62.csv test69.csv test75.csv test81.csv test88.csv test94.csv test12.csv test19.csv test25.csv test31.csv test38.csv test44.csv test50.csv test57.csv test63.csv test6.csv test76.csv test82.csv test89.csv test95.csv test13.csv test1.csv test26.csv test32.csv test39.csv test45.csv test51.csv test58.csv test64.csv test70.csv test77.csv test83.csv test8.csv test96.csv test14.csv test20.csv test27.csv test33.csv test3.csv test46.csv test52.csv test59.csv test65.csv test71.csv test78.csv test84.csv test90.csv test97.csv test15.csv test21.csv test28.csv test34.csv test40.csv test47.csv test53.csv test5.csv test66.csv test72.csv test79.csv test85.csv test91.csv test98.csv
type test1.csv % 簡略化の為全ファイルとも同じデータ
17, 23, 4, 10, 11 24, 5, 6, 12, 18 1, 7, 13, 19, 25 8, 14, 20, 21, 2 15, 16, 22, 3, 9
%同じフォルダ内に複数あるcsvファイルのa~b行c列にある数値をインポートし、一つの数値行列にまとめたい
% 取り出したいのはa~b行c列にある数値即ち4と6
location = uigetdir(pwd); % csvファイルが含まれるフォルダを選択する
ttds = tabularTextDatastore(location,"FileExtensions",".csv","IncludeSubfolders",true); % 表形式テキストファイルのデータストア作成
ttds.SelectedVariableNames = "Var3"; % c列のみ読み取る様に設定する。変数名が設定されている場合は当該変数名を設定する
ds.SelectedFormats = "%f"; % c列の変数を浮動小数点数として読み取る
T = reshape(table2array(readall(ttds)),5,[])
T = 5×100
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22
T(1:2,:)
ans = 2×100
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6

추가 답변 (1개)

Atsushi Ueno
Atsushi Ueno 2022년 11월 26일
for i = 1:100
fileID = fopen(['test' num2str(i) '.csv'], 'w');
nbytes = fprintf(fileID,'%5d,%5d,%5d,%5d,%5d\n',magic(5));
fclose(fileID); % 動作確認用にCSVファイル'test(数字).csv'を100個作成
end
% 取り出したいのはa~b行c列にある数値。a=1,b=2,c=3とすれば4と6を取り出す事になる。
a = 1; b = 2; c = 3;
location = uigetdir(pwd); % CSVファイルが含まれるフォルダを選択する
cd(location)
filelist = dir('**/*.csv'); % CSVファイルのリストを得る
for k = 1:length(filelist)
array = readmatrix([filelist(k).folder filesep filelist(k).name]); % CSVファイルを1つずつインポートする
T(:,k) = array(a:b, c); % 所定の値を取り出し一つの数値行列にまとめる
end
T
T = 2×100
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
  댓글 수: 1
gs
gs 2022년 11월 26일
解決いたしました。
大変助かりました。
ありがとうございました!

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

제품


릴리스

R2022a

Community Treasure Hunt

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

Start Hunting!