2010-06-23 306 views
2

我有两个单元阵列,一个叫做info {},另一个叫做data {} 我正在从文本文件中读取信息,并将行放入info {}单元格数组中。当程序找到一个空行,我想用一个新的信息{}单元阵列重新开始,并保持在插入行,直到它找到另一条黑线...在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); 

末 结束

我包括一些代码,它不起作用,但这是我迄今得到的。我想我认为我理解我需要用来做这个的算法,但是在实现它时遇到了一些麻烦。有任何想法吗?

到底我想要的东西,看起来像

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

回答

1

我觉得这样的事情会的工作,虽然我不能肯定知道没有一个简单的数据文件:

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

一些以上使用的功能:FGETL,DEBLANKREGEXP,CELLFUN,MAT2CELL

+0

@Ben:我之前更新了我的答案中的代码,因为我发现了同样的错误。我上面的新代码现在应该可以工作。 – gnovice 2010-06-23 15:57:19

+0

我刚刚注意到你在我评论后立即更新。谢谢 – 2010-06-23 16:15:25