在Matlab中创建嵌套单元阵列?
我有两个单元格数组,一个叫做info{},另一个叫做data{} 我正在从一个文本文件中读取信息,并将这些行放入info{}单元格数组中。当程序找到一个空行时,我想用一个新的info{}单元格数组重新开始,并继续插入这些行,直到它找到另一个空行在Matlab中创建嵌套单元阵列?,matlab,nested,cell-array,Matlab,Nested,Cell Array,我有两个单元格数组,一个叫做info{},另一个叫做data{} 我正在从一个文本文件中读取信息,并将这些行放入info{}单元格数组中。当程序找到一个空行时,我想用一个新的info{}单元格数组重新开始,并继续插入这些行,直到它找到另一个空行 global data global tags tags{} data = {}; line = fgets(fid); counter = 1; while ischar(line) if regexp(line,'/locus_tag=','m
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}
我认为这样做会奏效,但如果没有示例数据文件,我无法确定:
%# 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
上面使用的一些函数:,。@Ben:我刚才更新了答案中的代码,因为我发现了相同的错误。我上面的新代码现在应该可以工作了。