我是 MATLAB 的新手,想从我从数据库中获得的元胞数组中提取数据:
sensors =
[ 1] [23] [1] [ 0] [0.1000] [1x29 char]
[ 2] [23] [1] [120] [0.1000] [1x43 char]
[ 3] [23] [1] [120] [0.1000] [1x42 char]
[ 4] [23] [1] [ 15] [0.1000] 'Air Temp Grey Box'
[ 5] [23] [1] [120] [0.1000] [1x34 char]
[ 6] [23] [1] [120] [0.1000] [1x33 char]
[ 7] [23] [1] [120] [0.1000] 'Pool Water Temp'
[ 8] [23] [2] [ 0] [0.1000] [1x28 char]
[ 9] [23] [1] [ 30] [0.1000] [1x22 char]
[10] [23] [1] [ 30] [0.1000] [1x22 char]
[11] [23] [1] [ 30] [0.1000] [1x21 char]
[12] [23] [1] [ 15] [0.1000] [1x20 char]
[13] [23] [1] [ 15] [0.1000] [1x23 char]
[14] [23] [1] [ 30] [0.1000] [1x22 char]
[15] [23] [1] [ 15] [0.1000] 'Ground Air '
[16] [23] [1] [ 5] [0.1000] 'Boiler Cold Water'
[17] [23] [1] [ 5] [0.1000] 'Boiler Hot Water'
[18] [23] [1] [ 5] [0.1000] 'Boiler CH Flow'
[19] [23] [1] [ 5] [0.1000] 'Boiler CH Return'
现在我想获取第一列,即数字 1 到 19 以及最后一列中的相应名称,并将它们用于 for 循环,例如:
for ID=xxxx
str = num2str(ID);
SQLcommand = strcat('SELECT FROM data where ID=',str);
answer = database.exec(SQLcommand);
......
end
我尝试了几种不同的尝试,但从未成功地只获得其中一个元素。
感谢您的帮助 :),提前致谢。 轴突
最佳答案
虽然 sage 上面的答案可行,但它并不是真正正确或有效地使用 Matlab 元胞数组。您可以通过使用适当的元胞数组内容索引来消除许多无关的函数调用。您可以通过两种方式寻址元胞数组的任何元素 - ()
或 {}
。 ()
获取单元格,仍然是一个单元格。但是,{}
以其基本类型提取单元格的内容。
所以 sensors(1, end)
是一个 1x1 元胞数组,但是 sensors{1, end}
是一个 1x29 字符串。
针对您的问题:
numRows = size(sensors, 1);
for rowIdx = 1:numRows;
sensorName = sensors{rowIdx, end};
sql = ['select * from data where ID = ' num2str(sensors{rowIdx, 1})];
...
end
如果您将传感器 ID 获取为字符而不是数字,您也可以消除 num2str()
调用 - 即,如果您的原始数据库获取填充的传感器进行了转换。
此外,如果您不从数据库进一步查询,则可以对整个内容进行矢量化,但恐怕我不在我的 Matlab 机器旁,所以我无法在我的头。
关于arrays - for 循环中的 MATLAB 和元胞数组处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4635052/