使用fscanf在Matlab中读取制表符分隔的文本文件

时间:2017-03-27 05:55:18

标签: matlab

我有一个.txt文件,如下所示:

   Value1   Value2   Value3   Value4
    0.558    0.834    0.521    0.125
    0.543    0.800    0.231    0.222
 1.85E-01  8.0E-01  1.3E-01    0.521
 1.23E-01    0.777    0.232    0.552
  .......    .....    .....    .....

文件继续使用未知行数。我想使用fscanf排除标题来阅读所有值。到目前为止,我已尝试过以下内容:

fscanf(fid, '%9f %9f %9f %9f %9f %9f %9f %9f %9f %9f')
fscanf(fid, '%9f %9f %9f %9f %9f %9f %9f %9f %9f %9f',[Inf 4])

所有结果都是:

ans =

     []

我对这个命令的使用相对较新,但感觉这应该是给我我想要的结果。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

假设您的值以单个空格分隔,您可以使用dlmread来读取此类文件。

>> dlmread('data.txt',' ', 2, 1)

ans =

    0.8000    0.2310    0.2220
    0.8000    0.1300    0.5210
    0.7770    0.2320    0.5520

第二个参数是分隔符,这里我使用了一个空格。它可以是制表符(\t)或其他内容。最后一个参数指定要从哪个行和列开始。在这里,我们通过设置R=2跳过标题。

答案 1 :(得分:1)

我得到了它。这些命令可以解决问题。需要记住的重要一点是fscanf(有点令人困惑)按行读取值,但是按列填充sizeA指定的数组(请参阅doc)。还需要将打开文件的当前地址移动到第二行(因为第一行包含标题)。我确信有更优雅的方法可以做到这一点,但我使用了fgetl。如果您知道更好的方法(即实际上不输出下一行的那个),请发表评论。

>> fid = fopen('textfile.txt')

fid =

     5

>> fgetl(fid)

ans =

   Value1   Value2   Value3   Value4

>> Array = fscanf(fid, '%f', [4, Inf])

Array =

    0.5580    0.5430    0.1850    0.1230
    0.8340    0.8000    0.8000    0.7770
    0.5210    0.2310    0.1300    0.2320
    0.1250    0.2220    0.5210    0.5520



>> ArrayT = Array'

ArrayT =

0.5580    0.8340    0.5210    0.1250
0.5430    0.8000    0.2310    0.2220
0.1850    0.8000    0.1300    0.5210
0.1230    0.7770    0.2320    0.5520