Comment puis-je faire de ce fichier texte dans une liste dans Matlab?
-
27-09-2019 - |
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?
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.