0

我正在阅读一个制表符分隔的文件。该文件的五个代表行是:

日期时间属性路径1 路径2 路径3 路径4 路径5 路径6 路径7 路径8
列1 列1 列1 列1 列1 列1 列1 列1

1/1 00:00:00 F1 (sm³/s) -1.3405E-003 -1.1170E-002 -1.0123E-004 9.7769E-003 -8.4673E-004 1.1710E-003 2.6890E-004 2.2413E-003

1/1 01:00:00 F1 (sm³/s) 1.9988E-004 1.6655E-003 2.2252E-004 1.6883E-003 1.8612E-003 2.0221E-004 2.0795E-004 1.7333E-003

1/1 02:00:00 F1 (sm³/s) -4.0722E-004 -3.3931E-003 -4.4324E-004 -2.1177E-003 -3.7075E-003 -2.5364E-004 -3.7330E-004 - 3.1115E-003

当我使用以下格式字符串时,我得到了预期的结果:

test = '1/1 00:00:00    F1 (sm³/s)  -1.3405E-003    -1.1170E-002    -1.0123E-004    9.7769E-003 -8.4673E-004    1.1710E-003 2.6890E-004 2.2413E-003';

textscan(test, '%*s %*s %*s %*s %f %f %f %f %f %f %f %f')

给我:

ans = 

[-0.0013]    [-0.0112]    [-1.0123e-04]    [0.0098]    [-8.4673e-04]    [0.0012]    [2.6890e-04]    [0.0022]

这是我想要的,但是当我尝试时:

    C = textscan(fid,...
             '%*s %*s %*s %*s %f %f %f %f %f %f %f %f',...
             'CollectOutput', false,...
             'Headerlines', 2);

我得到一个 1x8 的空单元格。

格式字符串翻译中的错误是什么?

4

3 回答 3

0

现在,我尝试使用你的代码,它的工作!

file=('d.txt');
fid=fopen(file);
C = textscan(fid,...
         '%*s %*s %*s %*s %f %f %f %f %f %f %f %f',...
         'CollectOutput', false,...
         'Headerlines', 2);

输出:

celldisp(C)

C{1} =

            -0.0013405
            0.00019988
           -0.00040722

C{2} =

              -0.01117
             0.0016655
            -0.0033931

C{3} =

           -0.00010123
            0.00022252
           -0.00044324

C{4} =

             0.0097769
             0.0016883
            -0.0021177

C{5} =

           -0.00084673
             0.0018612
            -0.0037075

C{6} =

              0.001171
            0.00020221
           -0.00025364

C{7} =

             0.0002689
            0.00020795
            -0.0003733

C{8} =

             0.0022413
             0.0017333
            -0.0031115
于 2014-03-17T05:13:20.987 回答
0

我认为您的格式字符串没有任何问题。

尝试使用或类似的方式单独拉入行,fgetl然后检查文件中是否没有您不期望的内容。例如 - 您的代码似乎对我有用,但我可以通过在文件开头添加一个额外的空行来复制您的错误,这会导致textscan尝试将第二个标题行作为一行数据读取(并且失败不雅)。可以通过增加 的值来消除该特定错误HeaderLines

fid = fopen('test.txt');
fgetl(fid)  % repeat until you see your first line of data
于 2014-03-17T11:40:07.920 回答
0

我遇到了一个问题,我的 textscan 只能抓取空单元格数组,谷歌搜索把我带到了这里。我通过使用 fgetl(fid) 几次,然后使用 frewind(fid),(fid 是 fopen 的变量)解决了这个问题,关于读取行的一些东西可以更容易地引入值。

于 2015-12-09T07:18:52.577 回答