2017-05-13 16 views
1

엑셀 시트에서 구조체 배열 만들기 이름 | 성 (姓) | 주제 1 | 주제 2 | .. (주제 N도 마찬가지 임)입력으로 엑셀 문서 나 문자열 (이름을) 받아들이는 MATLAB 함수를 작성했습니다

엑셀 시트의 각 열에는 각 주제 n에 특정 수의 행 (예 : 200)의 사람 이름과 기호가 있습니다.

위에서 지정한 각 열에 대해 각 사람 (필드가있는 1x200 구조체 배열)의 데이터가 들어있는 구조체 배열을 만들어야합니다. 또한 이라는 주제 이름이 각 excel 시트으로 바뀌므로 그 의미에서 동적 인 구조체 배열이 필요합니다 (예 : Subject1이 화학, Subject2 수학 등일 수 있음)

어떻게하면됩니까? 구조의 첫 번째 항목의

예는 다음과 같아야합니다

First-Name: {'George'} 
Last-Name: {'Henry'} 
Chemistry: [55] 
Math: [76] 
Subject3: .... 

나의 현재의 시도는 다음과 같습니다 :

[RawRow,RawCol]=size(raw); 
for kk=2:RawRow 
    studentFName = raw(kk,1); 
    allFName = [studentFName]; 
    allFName = [allFName;studentFName]; 
end 

DataStruct = struct(raw{1,1},allFirstNames,raw{1,2},allLastNames,raw{1,3},Subject1,....) 

작동하지 않습니다 루프 위는 allFName 만의 이름을 포함 마지막 행/엑셀 파일의 항목.

답변

3

두 가지 방법으로 원시 데이터를 처리 처음으로 (어떤 루프가 필요하지 않습니다) struct 하나의 호출이 작업을 수행 할 수 있습니다 : 구조 필드 이름을 수행 할 필요가 있기 때문에

  • 는 열 이름에 잘못된 문자를 교체 같은 naming conventions as variables. 이 경우 '-''_'으로 바꿀 수 있습니다.
  • 열 이름 뒤의 모든 행을 다른 셀 배열로 수집하십시오. 이렇게하면 모든 데이터를 struct에 쉽게 comma separated list으로 전달할 수 있습니다. 여기

은 (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 
+0

나는 이것을 복잡하게 만들고있었습니다. 고마워요! :) –