textscan具有有效格式字符串的意外空单元格

时间:2014-03-17 01:41:28

标签: matlab format textscan

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

  
    

日期时间属性路径1路径2路径3路径4路径5路径6路径7路径8
    Lev 1 Lev 1 Lev 1 Lev 1 Lev 1 Lev 1 Lev 1 Lev 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.2413 E-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 < / p>          

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的空单元格。

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

fid = fopen('test.txt');
fgetl(fid)  % repeat until you see your first line of data

答案 2 :(得分:0)

我遇到了一个问题,我的文本扫描只会抓住空的单元格阵列,谷歌搜索引导我到这里。我通过使用fgetl(fid)几次然后使用frewind(fid)来解决它,(fid是fopen的变量)一些关于读取行的内容使得更容易引入值。