4

まず、州、首都、人口で構成される独自のテキストファイルをユーザーに入力させ、次のコードを使用してこれらの値をすべて構造体配列に入れます。

clear
clc
%Part A
textfile=input('What is the name of your text file?\n','s');
fid=fopen(textfile);
file=textscan(fid,'%s %s %f','delimiter',',');
State=file{1}
Capital=file{2}
Population=file{3}
regions=struct('State',State,...
    'Capital',Capital,...
    'Population',Population)
fclose(fid);

私の最初の質問:構造内のすべての値を表示することは可能ですか?構造体配列を表示すると、次のようになります。

50x1 struct array with fields:

    State
    Capital
    Population

そして、私の2番目の質問:たとえば、検索する'California'だけで、この構造の情報にアクセスすることは可能ですか?

4

1 に答える 1

8

すでに発見したように、MATLABの構造体配列のデフォルトの表示では、配列の次元とフィールド名だけがわかります。内容を確認したい場合は、フォーマットされた出力を自分で作成する必要があります。これを行う1つの方法は、STRUCT2CELLを使用してセル配列の構造コンテンツを収集し、次にFPRINTFを使用してセルコンテンツを特定の形式で表示することです。次に例を示します。

>> regions = struct('State',{'New York'; 'Ohio'; 'North Carolina'},...
                    'Capital',{'Albany'; 'Columbus'; 'Raleigh'},...
                    'Population',{97856; 787033; 403892});  %# Sample structure
>> cellData = struct2cell(regions);         %# A 3-by-3 cell array
>> fprintf('%15s (%s): %d\n',cellData{:});  %# Print the data
       New York (Albany): 97856
           Ohio (Columbus): 787033
 North Carolina (Raleigh): 403892

2番目の質問に関しては、セル配列のフィールドからエントリを収集し、STRCMPを使用'State'してそれらを特定の名前と比較して論理インデックスを取得し、対応する構造体配列要素を取得できます。

>> stateNames = {regions.State};            %# A 1-by-3 cell array of names
>> stateIndex = strcmp(stateNames,'Ohio');  %# Find the index for `Ohio`
>> stateData = regions(stateIndex)          %# Get the array element for `Ohio`

stateData = 

         State: 'Ohio'
       Capital: 'Columbus'
    Population: 787033

ノート:

コメントで述べたよう'Population'に、構造体配列の各エントリには、50行1列の母集団データのベクトル全体が含まれることになります。これはfile{3}、サンプルコードにベクトルが含まれているのに対しfile{1}セル配列file{2}が含まれていることが原因である可能性があります。ベクトルの内容を構造体配列の要素全体に適切に分散するには、ベクトルを分割し、各値をNUM2CELLを使用してセル配列の個別のセルに配置してから、 STRUCTに渡す必要があります。このように定義すると、問題が解決するはずです。file{3}Population

Population = num2cell(file{3});
于 2011-05-19T03:10:19.530 に答える