【问题标题】:Whats wrong with this [reading input from a text file in Matlab]?这个[从Matlab中的文本文件读取输入]有什么问题?
【发布时间】:2010-11-30 05:46:51
【问题描述】:

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

哪里出错了?

【问题讨论】:

    标签: matlab file-io formatting input


    【解决方案1】:

    fread 仅用于读取二进制文件!
    文本文件的等价物是 fscanf,用法如下:

    fid = fopen('c:\\input.txt','rt');
    data = fscanf(fid, '%f', inf)';
    fclose(fid);
    

    或者在您的情况下,只需使用 load

    data = load('c:\\input.txt', '-ascii');
    


    MATLAB 中还有许多其他方法可以从文件中读取文本数据:

    【讨论】:

      【解决方案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 更容易使用,但根据文档现在已经过时了。

      【讨论】:

        猜你喜欢
        • 2011-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-13
        • 2011-09-28
        • 2022-12-31
        • 2013-02-17
        相关资源
        最近更新 更多