Создание вложенных массивов ячеек в Matlab? - PullRequest
2 голосов
/ 23 июня 2010

У меня есть два массива ячеек, один из которых называется info {}, а другой - data {} Я читаю информацию из текстового файла и помещаю строки в массив ячеек info {}. Когда программа находит пустую строку, я хочу начать с нового массива info {} и продолжать вставлять строки, пока не найдет другую пустую строку ...

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 Ответ

1 голос
/ 23 июня 2010

Я думаю, что-то вроде этого будет работать, хотя я не могу знать наверняка без примера файла данных:

%# 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 , DEBLANK , REGEXP , CELLFUN , MAT2CELL .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...