我有一个文本文件(c:\ input.txt),其中包含:
2.0 4.0 8.0 16.0 32.0 64.0 128.0 256.0 512.0 1024.0 2048.0 4096.0 8192.0
在Matlab中,我想把它读作:
data = [2.0 4.0 8.0 16.0 32.0 64.0 128.0 256.0 512.0 1024.0 2048.0 4096.0 8192.0]
我试过这段代码:
fid=fopen('c:\\input.txt','rb');
data = fread(fid, inf, 'float');
data
但我得到了一些垃圾值:
data =
1.0e-004 *
0.0000
0.0015
0.0000
0.0000
0.0000
0.0000
0.0000
0.0001
0.0239
0.0000
0.0000
0.0000
0.0000
0.0066
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0016
0.0000
0.0000
0.0276
0.0000
0.3819
0.0000
0.0000
哪里出错?
答案 0 :(得分:8)
fread 仅用于读取二进制文件!
文本文件的等效文件为 fscanf ,用法如下:
fid = fopen('c:\\input.txt','rt');
data = fscanf(fid, '%f', inf)';
fclose(fid);
或者在您的情况下,只需使用 load :
data = load('c:\\input.txt', '-ascii');
MATLAB中有许多其他方法可以从文件中读取文本数据:
答案 1 :(得分:2)
您的文件是一个文本文件,因此您应该打开文本阅读:
fid=fopen('c:\\input.txt','rt');
然后,为了阅读,我发现TEXTSCAN比FREAD / FSCANF更强大(它们之间的差异全部归纳为here
data = textscan(f, '%f')
返回一个单元格数组。您可以使用
获取内容>> data{1}
ans =
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
TEXTREAD比TEXTSCAN更容易使用,但根据文档现已过时。