如何在Matlab中使用fgetl?

时间:2015-04-18 02:45:56

标签: matlab

我试图了解如何使用fgetl来读取文件。以下是.txt文件示例:

0: 2.14 +++ 1.70 +++ 1.57, 28.2
1: 1.20 +++ 1.44 +++ 2.97, 28.6
2: 1.47 +++ 2.32 +++ 4.01, 29.1
3: 1.41 +++ 4.58 +++ 2.95, 29.0
4: 0.33 +++ 1.28 +++ 0.41, 28.8
5: 0.04 +++ 1.07 +++ 0.00, 28.6
6: 0.03 +++ 1.07 +++ 0.00, 28.4
7: 0.03 +++ 1.07 +++ 0.00, 28.1
8: 0.03 +++ 1.08 +++ 0.00, 27.9
9: 0.03 +++ 1.07 +++ 0.00, 27.8
10: 0.04 +++ 1.07 +++ 0.00, 27.6

这是我的代码:

fid = fopen('test.txt');

tline = fgetl(fid);
while ischar(tline)
    disp(tline)
    A=sscanf(tline,'%d: %f +++ %f +++ %f, %f');
    tline = fgetl(fid);
end

fclose(fid);

但它不起作用(显然我不知道我在做什么)。我希望矩阵A是这样的:

0 2.14 1.70 1.57 28.2
1 1.20 1.44 2.97 28.6
...

请注意,我可以使用其他一些方法执行此操作,但问题的关键是我需要了解如何使用fgetl执行此操作。

1 个答案:

答案 0 :(得分:1)

你已经完成所有工作了。你缺少的是一个索引,用于存储每次调用sscanf的输出,以及它。

这样做,我得到的是:

clear
clc


fid = fopen('Mymatrix.txt');

tline = fgetl(fid);

%// Initialize counter
k = 1;
while ischar(tline)

%// Store in a cell array, just in case the outputs are of different size.
    A{k}=sscanf(tline,'%d: %f +++ %f +++ %f, %f');
    tline = fgetl(fid);
    k = k+1;
end

%// Convert to numeric array. This part would need some tuning if the outputs were of different size

A = cell2mat(A).'

fclose(fid);

最终输出如下:

A =

         0    2.1400    1.7000    1.5700   28.2000
    1.0000    1.2000    1.4400    2.9700   28.6000
    2.0000    1.4700    2.3200    4.0100   29.1000
    3.0000    1.4100    4.5800    2.9500   29.0000
    4.0000    0.3300    1.2800    0.4100   28.8000
    5.0000    0.0400    1.0700         0   28.6000
    6.0000    0.0300    1.0700         0   28.4000
    7.0000    0.0300    1.0700         0   28.1000
    8.0000    0.0300    1.0800         0   27.9000
    9.0000    0.0300    1.0700         0   27.8000
   10.0000    0.0400    1.0700         0   27.6000