Question

J'ai un fichier texte et que vous souhaitez importer dans Matlab et en faire une liste:

Person1
name = steven
grade = 11
age= 17

Person2
name = mike
grade = 9
age= 15

Person3
name = taylor
grade = 11
age= 17

Il y a quelques centaines d'entrées comme celles-ci ci-dessus. Chaque sont séparées par une ligne vide. Je pensais que je pouvais analyser le texte et rendre l'information entre chaque ligne vide dans un élément de la liste. Je voudrais aussi pouvoir regarder chaque personne par son nom une fois que j'ai une liste comme celle ci-dessous.

Je veux quelque chose comme:

x = [Person1         Person2       Person3      
     name = steven   name = mike   name = taylor
     grade = 11      grade = 9     grade = 11
     age = 17        age = 15      age = 17]

Cela semble très direct mais j'ai eu du mal avec ce jusqu'à présent. Je peux être sur quelque chose. Quelqu'un at-il des idées ou des conseils?

Était-ce utile?

La solution

Il y a plusieurs façons vous pourriez potentiellement faire. En supposant qu'il est censé être un espace entre le age et = dans le fichier de données (comme les autres champs), vous pouvez utiliser textscan :

fid = fopen('people.txt','r');           %# Open the data file
peopleData = textscan(fid,'%s %*s %s');  %# Read 3 columns of strings per row,
                                         %#   ignoring the middle column
fclose(fid);                             %# Close the data file

Vous pouvez ensuite traiter les données de la manière suivante pour créer un tableau de la structure 3 par 1 avec des champs 'name', 'grade' et 'age':

nFields = 3;                                       %# Number of fields/person
fields = peopleData{1}(2:nFields+1);               %# Get the field names
peopleData = reshape(peopleData{2},nFields+1,[]);  %# Reshape the data
peopleData(1,:) = [];                              %# Remove the top row
peopleData(2:nFields,:) = cellfun(@str2double,...  %# Convert strings to numbers
                                  peopleData(2:nFields,:),...
                                  'UniformOutput',false);
x = cell2struct(peopleData,fields,1);              %# Put data in a structure

Les utilisations ci-dessus les fonctions RESHAPE , CELLFUN , STR2DOUBLE et CELL2STRUCT .

Autres conseils

Créer une structure 'personne' avec le nom «champs, de 'qualité' et 'l'âge'

Utilisez ensuite fgetl en combinaison avec regexp presque exactement comme votre question précédente sur les gènes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top