这有什么问题[从Matlab中的文本文件中读取输入]?

时间:2009-09-21 22:14:14

标签: matlab file-io formatting input

我有一个文本文件(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

哪里出错?

2 个答案:

答案 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更容易使用,但根据文档现已过时。