How to save each loop data

7 ビュー (過去 30 日間)
Chuanjung Lin
Chuanjung Lin 2019 年 10 月 22 日
コメント済み: Chuanjung Lin 2019 年 10 月 30 日
Hi all,
I have a batch file need to input to workspace for analysis, and the file type is *.csv.
Following is the code that I used, and the output file only show thw last one "P"
I hope each input file cas save as P1, P2, P3,....
May I know how to modify it ? thank you.
%% Open file dir
[filename,filedir] = uigetfile('*.csv','Multiselect','on');
path = fullfile(filedir,filename);
path = path';
file = struct('name',path);
%% Cover struc to cell
c= struct2cell(file);
opts = delimitedTextImportOptions("NumVariables", 9);
% Specify range and delimiter
opts.DataLines = [3, Inf];
opts.Delimiter = [" ", ","];
% Specify column names and types
opts.VariableNames = ["V", "I1V", "I2V", "I3V", "I4V", "I5V", "I6V", "I7V", "I8V"];
opts.VariableTypes = ["double", "double", "double", "double", "double", "double", "double", "double", "double"];
opts.ExtraColumnsRule = "ignore";
opts.EmptyLineRule = "read";
%% Readtable Import the data
for i=1:length(file)
P = table2array(readtable(c{i}, opts));
end
  1 件のコメント
Stephen23
Stephen23 2019 年 10 月 22 日
編集済み: Stephen23 2019 年 10 月 22 日
"I hope each input file cas save as P1, P2, P3,...."
Don't do that. Read this to know why:
You should use indexing, just like the MATLAB documentation shows:
Indexing is simple, easy to debug, and very efficient (unlike what you are trying to do).

サインインしてコメントする。

採用された回答

Subhadeep Koley
Subhadeep Koley 2019 年 10 月 29 日
You defined P as a single variable, therefore it is holding only the last value of the loop. If you want to want to save each loop data to a separate variable, the following code might help you.
Just declare P as an empty cell array and access P using the indexing variable i in every loop.
%% Open file dir
[filename,filedir] = uigetfile('*.csv','Multiselect','on');
path = fullfile(filedir,filename);
path = path';
file = struct('name',path);
%% Cover struc to cell
c= struct2cell(file);
opts = delimitedTextImportOptions("NumVariables", 9);
% Specify range and delimiter
opts.DataLines = [3, Inf];
opts.Delimiter = [" ", ","];
% Specify column names and types
opts.VariableNames = ["V", "I1V", "I2V", "I3V", "I4V", "I5V", "I6V", "I7V", "I8V"];
opts.VariableTypes = ["double", "double", "double", "double", "double", "double", "double", "double", "double"];
opts.ExtraColumnsRule = "ignore";
opts.EmptyLineRule = "read";
% Declare empty cell array P
P = {};
%% Readtable Import the data
for i=1:length(file)
P{i} = table2array(readtable(c{i}, opts));
end
Hope this helps!
  2 件のコメント
Stephen23
Stephen23 2019 年 10 月 29 日
+1 tidy answer.
Using path as a variable name should be avoided, as this shadows the inbuilt path function.
Chuanjung Lin
Chuanjung Lin 2019 年 10 月 30 日
Thank you for your help^_^!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeFile Operations についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by