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

读取文本文件并基于Column Matlab将其保存在多个矩阵中,matlab,Matlab,我能够阅读文本文件,并且能够逐行或全部阅读。但我需要把一些列放在向量中。 例如,如果这是整个文件: 1000011112222 2000011112222 3000011112222 4000011112222 5000011112222 我需要读取每行的第一个数字(第一列是1 2 3 4 5),但它在一个向量中。然后我需要从第二列读到第五列,把它们放在一个矩阵中,从第六列读到第八列,再放到另一个矩阵中,依此类推。有什么简单的办法吗??注:所需列数远大于此示例(每个矩阵中不是4列,而是896列

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

1000011112222
2000011112222
3000011112222
4000011112222
5000011112222
我需要读取每行的第一个数字(第一列是1 2 3 4 5),但它在一个向量中。然后我需要从第二列读到第五列,把它们放在一个矩阵中,从第六列读到第八列,再放到另一个矩阵中,依此类推。有什么简单的办法吗??注:所需列数远大于此示例(每个矩阵中不是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(如示例数据中所列)

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

%// 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 ....
您可以将数据作为单元格数组读入,根据列间距拆分数据,然后像前面的方法一样从中收集特定列。这在下面实现-

%// 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)
设置#1(如示例数据中所列)

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

%// 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 ....
您可以将数据作为单元格数组读入,根据列间距拆分数据,然后像前面的方法一样从中收集特定列。这在下面实现-

%// 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)
设置#1(如示例数据中所列)

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

%// 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 ....
您可以将数据作为单元格数组读入,根据列间距拆分数据,然后像前面的方法一样从中收集特定列。这在下面实现-

%// 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)
设置#1(如示例数据中所列)

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

%// 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 ....
您可以将数据作为单元格数组读入,根据列间距拆分数据,然后像前面的方法一样从中收集特定列。这在下面实现-

%// 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)

谢谢@Divakar。。我现在的主要问题是,每个数字包含多个字符,这是我拥有的数据样本“0.0000000e+0023000000E+012.1660000e+012.0840000e+01”这个问题有解决方案吗?许多的thanks@SMH我不确定你在那里。所以,你有“0.0000000e+002300000e+012.1660000e+012.0840000e+01”“例如,在文本文件的一行中?您能用更接近您实际数据的代表性来编辑您的问题吗?例如,不要将100001112222作为一行。。行是这样的:0.0000000 E+00 2.300000E+01 2.1660000e+01 2.0840000e+01 2.04100000E+01 1.9940000e+01 1.9440000e+01 1.90300000E+01 1.9190000e+01 2.150000E+01 2.225000E+01 2.50000000E+01 2.8310000e+01它给了我一个错误“使用连接矩阵的vertcat维数不一致。”我查看了单元格值,发现每个单元格的开头都有一个额外的空单元格row@SMH用
cell\u data=strtrim(importdata(文件名为“”)修剪它们)
?谢谢@Divakar。。我现在的主要问题是,每个数字包含多个字符,这是我拥有的数据样本“0.0000000e+0023000000E+012.1660000e+012.0840000e+01”这个问题有解决方案吗?许多的thanks@SMH我不确定你在那里。所以,你有“0.0000000e+002300000e+012.1660000e+012.0840000e+01”“例如,在文本文件的一行中?您能用更接近您实际数据的代表性来编辑您的问题吗?例如,不要将100001112222作为一行。。行是这样的:0.0000000 E+00 2.300000E+01 2.1660000e+01 2.0840000e+01 2.04100000E+01 1.9940000e+01 1.9440000e+01 1.90300000E+01 1.9190000e+01 2.150000E+01 2.225000E+01 2.50000000E+01 2.8310000e+01它给了我一个错误“使用连接矩阵的vertcat维数不一致。”我查看了单元格值,发现每个单元格的开头都有一个额外的空单元格row@SMH用
cell\u data=strtrim(importdata(文件名为“”)修剪它们)
?谢谢@Divakar。。我现在的主要问题是,每个数字包含多个字符,这是我拥有的数据样本“0.0000000e+0023000000E+012.1660000e+012.0840000e+01”这个问题有解决方案吗?许多的thanks@SMH我不确定你在那里。所以,你有“0.0000000e+002300000e+012.1660000e+012.0840000e+01”“例如,在文本文件的一行中?您能用更接近您实际数据的代表性来编辑您的问题吗?例如,不要将100001112222作为一行。。行是这样的:0.0000000 E+00 2.300000E+01 2.1660000e+01 2.0840000e+01 2.04100000E+01 1.9940000e+01 1.9440000e+01 1.90300000E+01 1.9190000e+01 2.150000E+01 2.225000E+01 2.50000000E+01 2.8310000e+01它给了我一个错误“使用连接矩阵的vertcat维数不一致。”我查看了单元格值,发现每个单元格的开头都有一个额外的空单元格row@SMH用
cell\u data=strtrim(importdata(文件名为“”)修剪它们)
?谢谢@Divakar。。我现在的主要问题是,每个数字包含多个字符,这是我拥有的数据样本“0.0000000e+0023000000E+012.1660000e+012.0840000e+01”这个问题有解决方案吗?许多的thanks@SMH我不确定你在那里。所以