评估外部文件中的字符串变量(Evaluate variables in external file

2019-10-30 07:14发布

问题

我要导入CSV文件,混合数据类型的数字和变量/符号。 进口部分已经讨论与混合数据类型导入CSV文件 。

描述

这里的CSV文件只包含2×2的公式(但一般64×64,我评价它1'000'000倍)。 我面临的问题是细胞的评价。 这不能以同样的方式来完成。

在MATLAB代码是一样的东西

% Parameter initialization
vector1 = ones(1e6);
a=1;
b=2;
c=3;
d=4;

% Formula calculation
vector2(1)=import('input000001.csv');

在我的最小输入文件input000001.csv包含一些公式,作为例如:

a*vector1(1),2*vector1(1)/b
c+vector1(1),3*vector1(1)^d

Answer 1:

尝试这个

[a b c d] = deal(1,2,3,4);

data = strcat(importdata('input.csv', sprintf('\n')), ';');
Matrix = eval(['[' data{:} '[]]']);

编辑:要通过避免放缓eval你可以写在另一间文件中的字符串,并在循环,而不是调用它。 事情是这样的:

[a b c d] = deal(1,2,3,4);

matDef = regexprep(fileread('input.csv'), {'(\r\n|\r|\n)' ';^'}, {';' ''});
f = fopen('inputMatrix.m', 'w');
fwrite(f, ['Matrix = [' matDef '];'])
fclose(f);
rehash

for k=1:100000,
    inputMatrix
end

你需要的rehash问MATLAB到新创建的添加inputMatrix到的已知功能列表。



Answer 2:

一些提示后,我实现恢复过来用以下解决方案。

%% Initialization
a=1;
b=2;
c=3;
d=4;

%% Procedure for input and evaluation
Temp = cell(read_mixed_csv('input.csv',','));
[imax,jmax]=size(Temp);
Matrix = zeros(imax,jmax);
for i = (1:imax)
    for j = (1:jmax)
        Matrix(i,j) = eval(Temp{i,j});
    end
end

其中read_mixed_csv('input.csv',',')是从导入CSV与混合数据类型的文件 。

我打开更好的答案!



文章来源: Evaluate variables in external file strings