使用列表重命名数据集

时间:2013-11-15 10:56:51

标签: database matlab naming

我是编程的新手,而且我一直在试图想出这个工作。

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

我附加了以下代码,它旨在提取一个表(我打算在工作时通过300个mysql表循环此代码)。

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

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

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

我有一个包含所有300个表名的列表,我打算将它们存储在名为“name”的列表中...因此,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

1 个答案:

答案 0 :(得分:0)

如果您定义了变量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个命名变量。