将单元格转换为数字数组或正确读取带空格作为分隔符的文件

时间:2016-10-18 14:14:37

标签: matlab file delimiter space

我有一个.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?

提前致谢!

2 个答案:

答案 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)
相关问题