我刚开始编程,我一直在努力想办法解决这个问题。
我正试图将大约300个mysql表放入到我的工作区中。
我附加了以下代码,该代码旨在拉出一个表(我计划在运行时通过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发布于 2013-11-15 13:09:27
如果您已经定义了一个变量name,那么name(1)的意思是“变量名的第一个元素”(在本例中就是"o")。不管变量的维数如何,它都返回一个值(即,即使X是一个5维的怪物,X(50)也只返回第50个元素的值)。name(1) = data的意思是“将变量name的第一个元素设置为等于data”,如果数据大小不合适,则会导致错误;如果数据类型不正确,则会导致错误或意外行为。
例如,在命令行中尝试这样做:
name = 'options_20020208';
name(1) = 1现在,从技术上讲,你想要的都可以完成,尽管我不推荐。如果在某种类型的300x(长度)变量中有所有的名称,那么在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个命名变量。
https://stackoverflow.com/questions/19999464
复制相似问题