在我的程序中,我添加了两个按钮来保存和加载默认参数。现在我将这些参数保存在excel文件中,我认为如果只想通过这种方法看到Matlab外部的默认参数,读取速度会更快
A = {'Variable 1','Variable 2','Variable 3';
var1,var2,var3};
filename = fullfile(folder,'name_file.xlsx');
sheet = 1;
xlRange = 'A1';
xlswrite(filename,A,sheet,xlRange)
但是我看到第一次保存时,需要很长时间(即使文件不存在也是最糟糕的),并且在第一次迭代中将参数加载回我的程序时也是如此。 我在想:有没有其他方法来编写和读取excel文件以节省一些时间?否则我可以考虑使用txt文件而不是excel
答案 0 :(得分:0)
csvwrite
比xlswrite
快得多。您可以使用csvwrite
将其另存为逗号分隔的csv文件。您也可以使用Excel打开它,但csvwrite
不接受cell
数组作为输入。所以你需要将它保存为矩阵:
A = [var1,var2,va3];
csvwrite(filename,A);
答案 1 :(得分:0)
我有一个(稍微)类似的问题,并且敲了下面的方法(在我的情况下,这是因为我使用了xlswrite
然后移动到没有它的系统。pad_to_string
需要一个filename和一个混合了数字和字符串数据的单元格数组。
不确定在Matlab中以这种格式回读文件是多么容易,因为我从未尝试过,但我认为csvread
应该处理它。
function pad_and_write_to_csv(fname, data)
string_data = cellfun(@data_to_string,data,'UniformOutput',0);
size_data = cellfun(@length,data,'UniformOutput',0);
padded_data = cellfun(@(x) pad_string(x),string_data,'uniformoutput',0);
%From the char matrix, you can use the FPRINTF function to properly output strings to a text file, as shown below:
for i = 1:size(padded_data, 1)
lines{i} = horzcat(padded_data{i,:});
lines{i} = lines{i}(1:end-1); % strip trailing comma
end
fid = fopen(fname,'wt');
for i = 1:size(padded_data,1)
fprintf(fid,'%s\n',lines{i});
end
fclose(fid);
在档案pad_string.m
function [ out ] = pad_string( in )
% a = length(in);
% out = [char(32*ones(1,str_length-a)), in];
out = [in, ','];
在档案data_to_string.m
function [ out ] = data_to_string( in )
in_datatype = class(in);
switch in_datatype
case 'char'
out = ['''', in ''''];
case 'double'
out = num2str(in);
end