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版本。谢谢旧版本也应该有。也许它的名字不同。