将文本文件中的数据读入Matlab数组

时间:2014-06-09 16:53:01

标签: matlab parsing matlab-figure text-parsing string-parsing

我在使用Matlab从.txt文件中读取数据时遇到了困难。

我必须使用.txt文件中的数据在Matlab中创建一个200x128维度数组。这是一项重复性任务,需要自动化。

.txt文件的每一行都是一个复数形式的a + ib,形式为[space] b。我的文本文件示例:

链接到文本文件:Click Here

  

(0)

     

1.2 2.32222

     

2.12 3.113

     

     

     

     

3.2 2.22

     

(1)

     

4.4 3.4444

     

2.33 2.11

     

2.3 33.3

     

     

     

     

(2)

     

     

     

(3)

     

     

     

(199)

     

     

我在括号内的.txt文件中有多行(X)。我的最终矩阵应该是200x128。在每个(X)之后,恰好有128个复数。

2 个答案:

答案 0 :(得分:1)

这是我要做的。首先,从文本文件中删除“(0)”类型的行(甚至可以使用简单的shell脚本)。我把它放在名为post2.txt的文件中。

# First, load the text file into Matlab:
A = load('post2.txt');

# Create the imaginary numbers based on the two columns of data:
vals = A(:,1) + i*A(:,2);

# Then reshape the column of complex numbers into a matrix
mat = reshape(vals, [200,128]);

mat将是200x128复杂数据的矩阵。显然,在这一点上你可以绕过这个循环多次这样做。

希望有所帮助。

答案 1 :(得分:1)

您可以使用以下功能读取数据:

function data = readData(aFilename, m,n)

% if no parameters were passed, use these as defaults:
if ~exist('aFilename', 'var')
    m = 128;
    n = 200;
    aFilename = 'post.txt';
end

% init some stuff:
data= nan(n, m);
formatStr = [repmat('%f', 1, 2*m)];

% Read in the Data:
fid = fopen(aFilename);
for ind = 1:n
    lineID = fgetl(fid);
    dataLine = fscanf(fid, formatStr);
    dataLineComplex = dataLine(1:2:end) + dataLine(2:2:end)*1i;
    data(ind, :) = dataLineComplex;
end
fclose(fid);

(编辑)可以通过在格式字符串中包含(1)部分并将其丢弃来改进此功能:

function data = readData(aFilename, m,n)

% if no parameters were passed, use these as defaults:
if ~exist('aFilename', 'var')
    m = 128;
    n = 200;
    aFilename = 'post.txt';
end

% init format stuff:
formatStr = ['(%*d)\n' repmat('%f%f\n', 1, m)];

% Read in the Data:
fid = fopen(aFilename);

data = fscanf(fid, formatStr);
data = data(1:2:end) + data(2:2:end)*1i;
data = reshape(data, n,m);

fclose(fid);