連続しない番号での繰り返し計算

2 views (last 30 days)
雅晶
雅晶 on 14 Nov 2022
Commented: 雅晶 on 15 Nov 2022
フォルダに V(1).csv、V(6).csv、V(8).csv、V(20).csv とcsvファイルが入っているとします。
ここで
for i = 1:20
A = csvread(V(i).csv);
B = csvread(V(i+1).csv);
B - A;
end
としてもcsvファイルのかっこの番号が連続していないので、もちろんエラーになります。
そこで、フォルダに入っている隣の番号同士で計算をしたいです。
例えば上記の例だと、
V(6).csv - V(1).csv;
V(8).csv - V(6).csv;
V(20).csv - V(8).csv;
というようにしたいです。
また、隣の番号同士で計算をするときに、その番号の差を記録したいです。
例えば上記の例だと、
V(6).csv - V(1).csv;であれば差は5
V(8).csv - V(6).csv;であれば差は2
V(20).csv - V(8).csv;であれば差は12
というようにしたいです。
以上、2つの事柄についてどのようにスクリプトを作成すればよいか教えていただきたいです。

Accepted Answer

交感神経優位なあかべぇ
一番大きい値が20と分かっているならば、下記でどうでしょうか?
diffCsvList = {};% A - Bを行った答えを格納する変数
diffNumList = [];% 番号の差分を格納する変数
data_prev = [];
for i = 20 : -1 : 1
fileName = ['V(', num2str(i), ').csv'];
if isfile(fileName)
data = csvread(fileName);
if ~isempty(data_prev)
diffCsvList{end + 1, 1} = data_prev - data;
diffNumList(end + 1, 1) = i_prev - i;
end
data_prev = data;
i_prev = i;
end
end
一番大きな番号が分からないのであれば、下記はいかがでしょうか?
files = dir('*.csv');
fileNames = {files.name};% 現在のフォルダにある.csvのファイル名を取得する。
numberCell = regexp(fileNames, '^V((\d+))\.csv$', 'once', 'tokens');%V(番号).csvの番号を抽出する。
isVFile = cellfun(@(x) ~isempty(x), numberCell);
numberCell(~isVFile) = '';%V(番号).csv名以外のファイルがあった場合、それを除外する。
numberStr = cellfun(@(x) x, numberCell);
number = str2double(numberStr);
sortNumber = sort(number, 'descend');% 番号を降順にする。
diffCsvList = cell(length(sortNumber) - 1, 1);% A - Bを行った答えを格納する変数
diffNumList = zeros(length(sortNumber) - 1, 1);% 番号の差分を格納する変数
csvData1 = csvread(['V(', num2str(sortNumber(1)), ').csv']);
for i = 2 : length(sortNumber)
csvData2 = csvread(['V(', num2str(sortNumber(i)), ').csv']);
diffCsvList{i - 1} = csvData1 - csvData2;
diffNumList(i - 1) = sortNumber(i - 1) - sortNumber(i);
csvData1 = csvData2;
end
  2 Comments
雅晶
雅晶 on 15 Nov 2022
参考になりました。
ありがとうございます。

Sign in to comment.

More Answers (1)

Kenji Nakayama
Kenji Nakayama on 14 Nov 2022
n(1)=1,n(2)=6,n(3)=8,n(4)=20として,
for i = 1:3
A = csvread(V(n(i)).csv);
B = csvread(V(n(i+1)).csv);
B - A;
end
としてはどうでしょうか.
  1 Comment
雅晶
雅晶 on 15 Nov 2022
回答していただきありがとうございます。
参考にさせていただきます。

Sign in to comment.

Tags

Products


Release

R2022b

Community Treasure Hunt

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

Start Hunting!