Comment puis-je afficher et accéder au contenu d'un tableau de structure dans MATLAB ?

StackOverflow https://stackoverflow.com/questions/6052145

  •  15-11-2019
  •  | 
  •  

Question

Tout d'abord, je demande à l'utilisateur de saisir ses propres fichiers texte composés d'états, de capitales et de populations et je mets toutes ces valeurs dans un tableau de structure en utilisant le code suivant :

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);

Ma première question :est-il possible d'afficher tous les valeurs dans la structure ?Afficher le tableau de structure me donne simplement ceci :

50x1 struct array with fields:

    State
    Capital
    Population

Et ma deuxième question :est-il possible pour moi d'accéder aux informations de cette structure en essayant de trouver, par exemple, 'California' seulement?

Était-ce utile?

La solution

Comme vous l'avez déjà découvert, l'affichage par défaut des tableaux de structure dans MATLAB ne vous dit pas grand-chose, juste les dimensions des tableaux et les noms de champs.Si vous souhaitez voir le contenu, vous devrez créer vous-même une sortie formatée.Une façon de procéder consiste à utiliser STRUCT2CELL pour collecter le contenu de la structure dans un tableau de cellules, puis utilisez FPRINTF pour afficher le contenu de la cellule dans un format particulier.Voici un exemple :

>> 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

Concernant votre deuxième question, vous pouvez récupérer les entrées du 'State' champs dans un tableau de cellules, comparez-les à un nom donné avec STRCMP pour obtenir un index logique, puis récupérez l'élément de tableau de structure correspondant :

>> 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

NOTE:

Comme vous le mentionnez dans un commentaire, chacun 'Population' l'entrée dans votre tableau de structure finit par contenir l'intégralité du vecteur 50 x 1 de données de population.Cela est probablement dû au fait que file{3} dans votre exemple de code contient un vecteur, alors que file{1} et file{2} contenir tableaux de cellules.Afin de distribuer correctement le contenu du vecteur dans file{3} à travers les éléments du tableau de structure, vous devez diviser le vecteur et placer chaque valeur dans une cellule distincte d'un tableau de cellules en utilisant NUM2CELL avant de le transmettre à STRUCTURER.Définir Population comme ça devrait résoudre le problème :

Population = num2cell(file{3});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top