Arrays MATLAB:读取文本文件并将其拆分为多维单元数组

Arrays MATLAB:读取文本文件并将其拆分为多维单元数组,arrays,matlab,matrix,split,Arrays,Matlab,Matrix,Split,我有一个大文本文件,其格式如下: M23 I13 C11 D12 A13 K15 I01 L19 D02 O15 我想把文件读入一个矩阵,这样我就可以一个接一个地处理ID了。每一行都是独立的 例如,我想要一个matlab代码,它可以做与以下Perl代码相同的事情: my @AoA = map { chomp; [ split /\t/, $_ ] } <FILE>; 谁能帮帮我吗?谢谢 这里有两个建议,它们都会生成一个末尾有完整行的单元格数组 首先将整个文件加载到内存中,然后将每

我有一个大文本文件,其格式如下:

M23 I13 C11 D12 A13
K15 I01 L19 D02 O15
我想把文件读入一个矩阵,这样我就可以一个接一个地处理ID了。每一行都是独立的

例如,我想要一个matlab代码,它可以做与以下Perl代码相同的事情:

my @AoA = map { chomp; [ split /\t/, $_ ] } <FILE>;

谁能帮帮我吗?谢谢

这里有两个建议,它们都会生成一个末尾有完整行的单元格数组

首先将整个文件加载到内存中,然后将每个变量转换为单元格元素。 这个更紧凑。缺点是它在内存中保留两个dat副本

第二个版本逐行读取文件,并将每个值转换为一个元素。 优点是它需要更少的内存,而且速度似乎更快

时间:

0.0175769秒。 0.00976515秒。 0.0175769-0.00976515=0.0078117

或者版本1是

0.0078117/0.0175769=0.44443较慢

第1版:

tic;
formatSpec = '%s';

fileID = fopen ('datafile.txt');
C = textscan(fileID,formatSpec,...            
                'Delimiter', '\n', ...
                'CollectOutput', true);

B= C{1};
D = cellfun(@(x) textscan(x, '%s'), B);
toc
D


Elapsed time is 0.0175769 seconds.
D =
{
  [1,1] =
  {
    [1,1] = M23
    [2,1] = I13
    [3,1] = C11
    [4,1] = D12
    [5,1] = A13
  }
  [2,1] =
  {
    [1,1] = K15
    [2,1] = I01
    [3,1] = L19
    [4,1] = D02
    [5,1] = O15
  }
}
版本2

tic;
formatSpec = '%s';

fileID = fopen ('datafile.txt');
rowNr = 1;
y=0;
C={};
tline = fgetl(fileID);
while ischar(tline)
   A = textscan(tline,formatSpec);
   C{rowNr} = A{1};

   %Check for end of file
   matches = strfind(tline, '\n');
   num = length(matches);
   if num > 0
      y = y + num;
      fprintf(1,'%d:%s\n',num,tline);
   end

   tline = fgetl(fileID);
   rowNr = rowNr+1;
end
fclose(fileID);

toc
C



Elapsed time is 0.00976515 seconds.
C =
{
  [1,1] =
  {
    [1,1] = M23
    [2,1] = I13
    [3,1] = C11
    [4,1] = D12
    [5,1] = A13
  }
  [1,2] =
  {
    [1,1] = K15
    [2,1] = I01
    [3,1] = L19
    [4,1] = D02
    [5,1] = O15
  }
}

dlmread对你有用吗?没用。每行中的ID数不同。是包含在matlab中的,所以如果您不介意使用它,也许使用它可以解决您的问题。非常酷~我不知道。我使用的R2012b没有perl函数。我会看看是否能找到R2014a版本。谢谢旧版本也应该有。也许它的名字不同。