读取文本文件并基于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我不确定你在那里。所以