【问题标题】:Renaming a Dataset using a list使用列表重命名数据集
【发布时间】:2013-11-15 10:56:50
【问题描述】:

我是编程新手,我一直在努力解决这个问题。

我正在尝试将大约 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

【问题讨论】:

    标签: database matlab naming


    【解决方案1】:

    如果您定义了变量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'] 并将文件内容设置为 @ 会容易得多987654332@等,然后处理300个命名变量。

    【讨论】:

    • 感谢 NKJT,这对您有很大帮助。你让我省了几个小时的挫败感!
    猜你喜欢
    • 2022-08-09
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多