使用列表重命名数据集



我是编程新手,我一直在

努力解决这个问题。

我正在尝试将大约 300 个 mysql 表拉入 Matlab 到我的工作区中。

附加了以下代码,该代码旨在拉取一个表(我计划在工作时通过 300 个 mysql 表循环此代码)。

该代码成功地将单个表作为新数据集导入工作区。

当我尝试使用原始 mysql 表的名称重命名这个新数据集时,出现了我的问题。

请参阅下面的代码,了解我搞砸的这部分(%将数据分配给输出变量)

有一个包含所有 300 个表名称的列表,我计划将它们存储在一个名为"name"的列表中......因此,名称(1)...这是正确的方法吗?

例如,最初的 mysql 表被称为"options_20020208"。

运行脚本后,我还需要将 Matlab 导入的新数据集称为"options_20020208"。

这里有什么想法吗?

%Define Query
 name = 'options_20020208'


%Set preferences with setdbprefs.
setdbprefs('DataReturnFormat', 'dataset');
setdbprefs('NullNumberRead', 'NaN');
setdbprefs('NullStringRead', 'null');

%Make connection to database.  
conn = database('', 'root', 'password', 'Vendor', 'MYSQL', 'Server', 'localhost', 'PortNumber', 3306);

%Read data from database.
curs = exec(conn, [['SELECT  ',name,'.UnderlyingSymbol , ']...
 ,  [name,'.UnderlyingPrice  , ']...
 ,  [name,'.Expiration  , ']...
 ,  ['FROM ','PriceMatrix.',name,'   ']... 
]);
curs = fetch(curs);
close(curs);
%Assign data to output variable
name(1) = curs.Data;
%Close database connection.
close(conn);
%Clear variables
clear curs conn

如果你已经定义了一个变量namename(1)的意思是"变量名的第一个元素"(在本例中只是"o")。 无论变量的维度如何,它都返回单个值(即,即使 X 是一些 5-D 怪物,X(50) 也只返回第 50 个元素的值)。 name(1) = data的意思是"将变量name的第一个元素设置为等于data",如果数据大小不正确,则会导致错误,如果数据类型不正确,则会导致错误或意外行为。

例如,在命令行中尝试此操作:

name = 'options_20020208';
name(1) = 1

现在,从技术上讲,你想要的都可以做到,尽管我不推荐它。如果你在某种 300 x(长度)变量中拥有所有名称,那么在 n = 1:300 的循环中,它将是这样的(其中name是你的变量名称列表):

eval([name(n,:) ' = curs.Data;'])

这将返回 300 个名为 'options_20020208' 或类似变量的变量,每个变量包含一组curs.Data。 但是,有更好的方法可以在工作区中存储数据,这样可以更轻松地对数据进行进一步操作,例如,可以使用结构:

myStruct(n).name = name(n,:);
myStruct(n).Data = curs.Data;

例如,如果你想做一些分析,然后以某种格式保存所有这些数据,那么循环结构会容易得多,并将文件名设置为[myStruct(n).name,'.csv'],将文件内容设置为mystruct(n).AdjustedData,等等,然后处理300个命名变量。

最新更新