读取文本文件并将其保存在基于Matlab列的多个矩阵中

时间:2015-02-19 04:04:23

标签: matlab

我能够阅读文本文件,我可以逐行或全部阅读。但是我需要在向量中添加一些列。 例如,如果这是整个文件:

1000011112222
2000011112222
3000011112222
4000011112222
5000011112222

我需要读取每行中的第一个数字(第一列是1 2 3 4 5),但是它在向量中。然后我需要从第二列到第五列读取它们并将它们放在一个mtrix中,从第六列到第八列放在另一个矩阵中,依此类推。有什么好主意吗?注意:所需的列数远大于此示例(不是4,而是每个矩阵中的896列)

我的代码:

fid=fopen(filename, 'txt'); 
 tline = fgetl(fid);
while ischar(tline) 
  vnum = sscanf(tline);
  fnum=sscanf(tline, 'f %d %d %d');
  tline = fgetl(fid);
end

1 个答案:

答案 0 :(得分:3)

设置#1(如示例数据中所列)

这可能是一种基于fileread的方法,它将文本文件作为字符串数据读入 -

%// Read in data as a char array
char_data = fileread(file_name)

%// Convert it to a properly formatted char array with `char()` 
%// and then to a numeric array with "- '0'"
num_data = char(strsplit(char_data).') - '0'  %//'

%// Finally, separate out columns as per the set requirements
var1 = num_data(:,1)
var2 = num_data(:,2:5)
var3 = num_data(:,6:8)

代码运行 -

var1 =
     1
     2
     3
     4
     5
var2 =
     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0
var3 =
     1     1     1
     1     1     1
     1     1     1
     1     1     1
     1     1     1

设置#2

根据OP发布的评论,如果您的文本文件设置如此 -

0.0000000e+00 2.3000000e+01 2.1660000e+01 2.0840000e+01 ....
0.2000000e+00 2.3500000e+01 2.1660000e+01 2.0840000e+01 ....
0.3000000e+00 2.3600000e+01 2.1660000e+01 2.0840000e+01 ....

您可以使用importdata作为单元格数组读取数据,根据列间距拆分数据,然后按照前一种方法收集特定列。这在下面实现 -

%// Read in data into a cell array of strings;
%// Trim whitespaces around it, should there be any
cell_data = strtrim(importdata(file_name,''))

%// Separate out columns within each cell of the cell array
cellsep_data = cellfun(@(x) strsplit(x),cell_data,'Uni',0)

%// Concatenate data from all cells into a "single-level" cell array
cellsep_data1 = vertcat(cellsep_data{:})

%// Convert to numeric array
num_data = str2double(cellsep_data1)

%// Finally, separate out columns as per th set requirements
var1 = num_data(:,1)
var2 = num_data(:,2:5)
var3 = num_data(:,6:8)