我有一个.txt文件,里面有一个矩阵,作为分隔符,它使用空格,我无法改变文件的格式。
它看起来像这样:
2 1 5 -0.92765441D+00 0.00000000D+00
3 1 5 0.36786029D+00 0.00000000D+00
14 1 -7 0.64312576D-01 0.00000000D+00
1 2 7 0.64312576D-01 0.22737368D-12
12 2 -5 0.36786029D+00 0.22737368D-12
我真正想做的事情:
以某种方式导入该数据,并将其存储在34x5矩阵中。
发生了什么事?
目前我使用的是importdata(),但是将数据存储在n * 1单元格向量中,如下所示:
' 2 1 5 -0.92765441D+00 0.00000000D+00'
' 3 1 5 0.36786029D+00 0.00000000D+00'
' 14 1 -7 0.64312576D-01 0.00000000D+00'
' 1 2 7 0.64312576D-01 0.22737368D-12'
' 12 2 -5 0.36786029D+00 0.22737368D-12'
有没有办法让它被转换成矩阵,或者另一种方式来读取那个output.txt?
提前致谢!
答案 0 :(得分:2)
我认为导入失败的主要原因是您的文件使用字符'D'
来表示MATLAB本身不支持的科学记数法。相反,您希望将其替换为'E'
或'e'
,以便MATLAB知道如何正确处理最后两列。
您可以将整个文件作为包含importdata
的字符串读入,而不是使用fread
,然后使用textread
(或任何其他数据导入功能)将其实际转换为数字。
% Read in the file contents as a string
fid = fopen(filename, 'rb');
stringData = fread(fid, '*char')';
fclose(fid)
% Replace 'D' with 'e' to be able to parse scientific notation properly
stringData = strrep(stringData, 'D', 'e');
% Convert this string to a numeric array
data = textscan(stringData, '%f');
data = reshape(data{1}, 5, []).';
% 2.0000 1.0000 5.0000 -0.9277 0
% 3.0000 1.0000 5.0000 0.3679 0
% 14.0000 1.0000 -7.0000 0.0643 0
% 1.0000 2.0000 7.0000 0.0643 0.0000
% 12.0000 2.0000 -5.0000 0.3679 0.0000
答案 1 :(得分:0)
为什么不使用readtable
?
在帮助files中,可以选择指定分隔符。
T = readtable('mySpaceDelimTable.txt','Delimiter',' ','ReadVariableNames',false)
之后,如果您愿意,可以使用table2array
将项目转换回矩阵。
编辑您是否尝试过使用importdata的分隔符?
A = importdata(___,delimiterIn)