代码之家  ›  专栏  ›  技术社区  ›  Aakash Goel

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

  •  1
  • Aakash Goel  · 技术社区  · 15 年前

    我有一个文本文件(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 回复  |  直到 15 年前
        1
  •  8
  •   Amro    15 年前

    氟利昂 仅用于读取二进制文件!
    文本文件的等效值为 fscanf ,用法如下:

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

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

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


    在Matlab中,有许多其他方法可以从文件中读取文本数据:

        2
  •  2
  •   mtrw    15 年前

    您的文件是文本文件,因此您应该打开它进行文本读取:

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