我能够阅读文本文件,我可以逐行或全部阅读。但是我需要在向量中添加一些列。 例如,如果这是整个文件:
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
答案 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)