我编写了一个matlab函数,它接受excel文档的字符串(名称)作为输入:
http://localhost:4200/abc
excel表格包含以下数据:
名字|姓氏| Subject1 |主题2 | ..(以此为主题n)
对于Excel工作表中的每一列,每个主题中都有特定数量的行(比如说200个)名称和标记。
我需要为上面指定的每个列创建一个结构数组,其中包含每个人的数据(带字段的1x200结构数组)。此外,主题名称随每个excel表格而变化所以我需要结构数组在这个意义上是动态的(例如,Subject1可以是Chemistry,Subject2 Math等)
我该怎么做?
结构中的第一个条目示例应为:
function printOut = modData(inputExcel)
[num,txt,raw]=xlsread(inputExcel)
我目前的尝试如下:
First-Name: {'George'}
Last-Name: {'Henry'}
Chemistry: [55]
Math: [76]
Subject3: ....
上面的for循环不起作用,allFName只包含excel文件中最后一行/条目的名字。
答案 0 :(得分:3)
您可以通过以两种方式首先处理原始数据,在一次调用struct
(无需循环)中执行此操作:
'-'
可以替换为'_'
。struct
。这里有一些示例原始数据(从xlsread
加载后)和执行上述两个步骤的单行代码:
>> raw = {'First-Name' 'Last-Name' 'Chemistry' 'Math' 'Killing'; ...
'George' 'Henry' 55 76 0; 'Krombopulos' 'Michael' 90 90 100}
raw =
3×5 cell array
'First-Name' 'Last-Name' 'Chemistry' 'Math' 'Killing'
'George' 'Henry' [ 55] [ 76] [ 0]
'Krombopulos' 'Michael' [ 90] [ 90] [ 100]
>> cellData = [strrep(raw(1, :), '-', '_'); num2cell(raw(2:end, :), 1)]
cellData =
2×5 cell array
'First_Name' 'Last_Name' 'Chemistry' 'Math' 'Killing'
{2×1 cell} {2×1 cell} {2×1 cell} {2×1 cell} {2×1 cell}
现在您可以轻松地创建结构数组:
>> DataStruct = struct(cellData{:});
>> DataStruct(1)
ans =
struct with fields:
First_Name: 'George'
Last_Name: 'Henry'
Chemistry: 55
Math: 76
Killing: 0
>> DataStruct(2)
ans =
struct with fields:
First_Name: 'Krombopulos'
Last_Name: 'Michael'
Chemistry: 90
Math: 90
Killing: 100