Matlab лучший подход для сохранения данных в файлах - PullRequest
0 голосов
/ 13 июня 2018

В моей программе я добавил две кнопки для сохранения и загрузки параметров по умолчанию.Прямо сейчас я сохраняю эти параметры в файле 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, чтобы сэкономить время?В противном случае я мог бы рассмотреть возможность использовать текстовый файл вместо Excel

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

У меня была (слегка) похожая проблема, и я выбрал следующий подход (в моем случае это было потому, что я использовал xlswrite, а затем перешел в систему без нее. pad_to_string берет имя файла и ячейкумассив со смесью числовых и строковых данных.

Не уверен, насколько легко читать файлы в этом формате в 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
0 голосов
/ 13 июня 2018

csvwrite намного быстрее, чем xlswrite.Вы можете использовать csvwrite, чтобы сохранить его как CSV-файл с разделителями-запятыми.которую вы также можете открыть в Excel, но csvwrite не принимает массив cell в качестве входных данных.Поэтому вам нужно сохранить его в виде матрицы:

A = [var1,var2,va3];
csvwrite(filename,A);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...