2010-06-15 11 views
3

Je dispose d'un fichier texte et voudrait importer dans Matlab et en faire une liste:Comment puis-je faire ce fichier texte dans une liste dans MATLAB?

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. Chacun est séparé par une ligne vide. Je pensais que je pourrais scanner le texte et faire l'information entre chaque ligne vide dans un article dans la liste. Je voudrais aussi être en mesure de rechercher 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 oublier quelque chose. Quelqu'un at-il des idées ou des conseils?

+0

Est-ce que 'age' est censé avoir un espace entre le' '' et le '=' dans le fichier de données? – gnovice

Répondre

5

Il y a plusieurs façons de faire cela. 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 3 matrice de la structure -en-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.

3

Créer une « personne » avec la structure du nom ', « qualité » des champs, et « âge »

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