2010-06-23 7 views
2

J'ai deux tableaux de cellules un appelé info {} et l'autre s'appelle data {} Je lis des informations dans un fichier texte et je mets les lignes dans le tableau de cellules info {}. Lorsque le programme trouve une ligne vide Je veux recommencer avec une nouvelle information {} réseau de cellules et de garder l'insertion des lignes jusqu'à ce qu'il trouve une autre ligne vide ...Création de tableaux de cellules imbriqués dans Matlab?

global data 
global tags 
tags{} 
data = {}; 
line = fgets(fid); 
counter = 1; 
while ischar(line) 
    if regexp(line,'/locus_tag=','match','once') 
     tags{end+1} = line; 

    else 

     info{counter} = line; 

     if strcmp(newline, line) 
      data{end+1} = info; 
      info{counter+1}{end+1} = line; 
     end 
    end 
    line = fgets(fid); 

fin fin

I J'ai inclus du code, ça ne marche pas, mais c'est ce que j'ai obtenu jusqu'ici. Je pense que je pense comprendre l'algorithme que j'ai besoin d'utiliser pour le faire, mais j'ai du mal à l'implémenter. Des idées?

En fin de compte, je veux quelque chose qui ressemble à

data = { {info1} {info2} {info3}... {infon} 

Répondre

1

Je pense que quelque chose comme cela va fonctionner, même si je ne peux pas en être sûr sans un fichier de données exemple:

%# Load all the lines from the file: 

allLines = {};   %# An empty cell array to store all lines in the file 
fid = fopen('data.txt'); %# Open the file 
nextLine = fgetl(fid); %# Get the next line 
while ischar(nextLine)    %# Check for an end-of-file condition 
    allLines = [allLines; {nextLine}]; %# Add the line to allLines 
    nextLine = fgetl(fid);    %# Get the next line 
end 
fclose(fid);    %# Close the file 

%# Remove any trailing whitespace from the lines: 

allLines = deblank(allLines); 

%# Find tags and remove them: 

index = regexp(allLines,'/locus_tag=','once'); %# Index of matches 
index = ~cellfun(@isempty,index); %# Find where index isn't empty 
tags = allLines(index);   %# Get cells with tags in them 
allLines(index) = [];    %# Remove cells with tags 

%# Find empty lines and group non-empty spans into cells: 

index = cellfun(@isempty,allLines); %# Find empty lines 
allLines(index) = [];    %# Remove cells with empty lines 
counts = diff([0; find(index); numel(index)+1]); %# Get the number of lines 
counts = counts(counts > 1)-1;     %# to put in each group 
data = mat2cell(allLines,counts); %# Group the non-empty lines 

Certains des fonctions utilisées ci-dessus: FGETL, DEBLANK, REGEXP, CELLFUN, MAT2CELL.

+0

@Ben: J'ai mis à jour le code dans ma réponse il y a quelques temps car j'ai trouvé le même bug. Le nouveau code que j'ai ci-dessus devrait fonctionner maintenant. – gnovice

+0

Je viens de remarquer que vous avez mis à jour juste après avoir commenté. Merci –

Questions connexes