我试图了解如何使用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
执行此操作。
答案 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