在MATLAB中读取格式化文本

在MATLAB中读取格式化文本,matlab,textscan,Matlab,Textscan,我有一些文本文件,我想在MATLAB工作区中访问它们。MATLAB的帮助说我可以用 fscanf、fgetl和textscan。由于格式化文本,我选择了最后一个。 我写了以下脚本: filename = 'myFile.txt'; fid = fopen(filename); myData = textscan(fid, '%u64 %{dd/MM/yyyy}D %{hh:mm:ss.SSS}T %f64 %f64 %u64 %f64 %f64 %f64\r\n', 'HeaderLines',

我有一些文本文件,我想在MATLAB工作区中访问它们。MATLAB的帮助说我可以用
fscanf
fgetl
textscan
。由于格式化文本,我选择了最后一个。 我写了以下脚本:

filename = 'myFile.txt';
fid = fopen(filename);
myData = textscan(fid, '%u64 %{dd/MM/yyyy}D %{hh:mm:ss.SSS}T %f64 %f64 %u64 %f64 %f64 %f64\r\n', 'HeaderLines', 3)
fclose(fid);
但我得到了一个错误:

使用文本扫描时出错

无法在处分析格式字符向量 位置21==>%{HH:mm:ss.SSS}T%f64%f64%u64%f64%f64%f64%f64%f64

日期格式必须为%T或%{…}T格式

格式文本如下:


--------------------------------------------------------------------------------------------------
Row     Var1        Var2           Var3    Var4         Var5         Var6    Var7        Var8 
--------------------------------------------------------------------------------------------------
1       08/04/2018  09:56:52.790   020.00  019.999570   1999690178   055.00  010.020000  000.00000  
2       08/04/2018  09:56:52.821   020.00  019.999602   1999690178   055.00  010.020000  000.00000  
3       08/04/2018  09:56:52.852   020.00  019.999580   1999690178   055.00  010.020000  000.00000  
4       08/04/2018  09:56:52.883   020.00  019.999623   1999690179   055.00  010.020000  000.00000  
5       08/04/2018  09:56:52.915   020.00  019.999548   1999690179   055.00  010.020000  000.00000  
6       08/04/2018  09:56:52.946   020.00  019.999602   1999690179   055.00  010.020000  000.00000  
7       08/04/2018  09:56:52.993   020.00  019.999548   1999690179   055.00  010.020000  000.00000  
8       08/04/2018  09:56:53.024   020.00  019.999602   1999690179   055.00  010.020000  000.00000  
9       08/04/2018  09:56:53.055   020.00  019.999548   1999690179   055.00  010.020000  000.00000  

使用

我认为没有一个
%t
<代码>%D是日期时间(用于日期和时间)。

使用


我认为没有一个
%t
<代码>%D是日期时间(用于日期和时间)。

我总是倾向于避免使用
fscanf
importdata
textscan
等函数,因为它们可能很难处理,而且我认为它们的输出有时不容易操作。最重要的是,您的文件格式看起来与Matlab用于显示表格数据的格式非常相似。。。我认为这很好地为你指明了正确的方向

我建议您使用,不仅因为上述原因,而且因为表格在Matlab中用途非常广泛:

T = readtable('data.txt', ...
      'Format', '%d %{dd/MM/yyyy}D %{HH:mm:ss.SSS}D %f %f %f %f %f %f', ...
      'HeaderLines', 3)
最终输出为:

T =

  9×9 table

    Var1       Var2           Var3        Var4      Var5          Var6       Var7    Var8     Var9
    ____    __________    ____________    ____    _________    __________    ____    _____    ____

    1       08/04/2018    09:56:52.790    20       19.99957    1999690178    55      10.02    0   
    2       08/04/2018    09:56:52.821    20      19.999602    1999690178    55      10.02    0   
    3       08/04/2018    09:56:52.852    20       19.99958    1999690178    55      10.02    0   
    4       08/04/2018    09:56:52.883    20      19.999623    1999690179    55      10.02    0   
    5       08/04/2018    09:56:52.915    20      19.999548    1999690179    55      10.02    0   
    6       08/04/2018    09:56:52.946    20      19.999602    1999690179    55      10.02    0   
    7       08/04/2018    09:56:52.993    20      19.999548    1999690179    55      10.02    0   
    8       08/04/2018    09:56:53.024    20      19.999602    1999690179    55      10.02    0   
    9       08/04/2018    09:56:53.055    20      19.999548    1999690179    55      10.02    0   

p.S.=
%{…}T
格式可能是由于处理来自Matlab部分的格式错误消息的误导性方法,只有
%{…}D
是有效的日期时间文字格式,至少在Matlab2017a之前。

我总是倾向于避免使用
fscanf
导入数据
textscan
等函数,因为它们可能很难处理,而且我认为它们的输出有时不容易操作。最重要的是,您的文件格式看起来与Matlab用于显示表格数据的格式非常相似。。。我认为这很好地为你指明了正确的方向

我建议您使用,不仅因为上述原因,而且因为表格在Matlab中用途非常广泛:

T = readtable('data.txt', ...
      'Format', '%d %{dd/MM/yyyy}D %{HH:mm:ss.SSS}D %f %f %f %f %f %f', ...
      'HeaderLines', 3)
最终输出为:

T =

  9×9 table

    Var1       Var2           Var3        Var4      Var5          Var6       Var7    Var8     Var9
    ____    __________    ____________    ____    _________    __________    ____    _____    ____

    1       08/04/2018    09:56:52.790    20       19.99957    1999690178    55      10.02    0   
    2       08/04/2018    09:56:52.821    20      19.999602    1999690178    55      10.02    0   
    3       08/04/2018    09:56:52.852    20       19.99958    1999690178    55      10.02    0   
    4       08/04/2018    09:56:52.883    20      19.999623    1999690179    55      10.02    0   
    5       08/04/2018    09:56:52.915    20      19.999548    1999690179    55      10.02    0   
    6       08/04/2018    09:56:52.946    20      19.999602    1999690179    55      10.02    0   
    7       08/04/2018    09:56:52.993    20      19.999548    1999690179    55      10.02    0   
    8       08/04/2018    09:56:53.024    20      19.999602    1999690179    55      10.02    0   
    9       08/04/2018    09:56:53.055    20      19.999548    1999690179    55      10.02    0   

p.S.=
%{…}T
格式可能是由于处理来自Matlab部分的格式错误消息的误导性方法造成的,只有
%{…}D
在至少Matlab 2017A之前是有效的日期时间文字格式。

%T
在最新版本中完全有效。我不记得它是什么时候被添加的。@Milad,MATLAB帮助说
示例:“{hh:mm:ss}t”指定持续时间的格式,例如“10:30:15”,表示10小时、30分钟和15秒。
@GntS您正在阅读哪些文档?网站还是Matlab中的帮助?也许这是你的Matlab不支持的一个新特性。我无法使用
%t
,而是使用了我发送代码的
%d
%t
在最新版本中完全有效。我不记得它是什么时候被添加的。@Milad,MATLAB帮助说
示例:“{hh:mm:ss}t”指定持续时间的格式,例如“10:30:15”,表示10小时、30分钟和15秒。
@GntS您正在阅读哪些文档?网站还是Matlab中的帮助?也许这是你的Matlab不支持的一个新特性。我不能使用
%t
,而是使用了
%d
,我发送了代码。很确定问题在于格式。我认为它需要小写的
h
而不是
h
。很确定问题在于格式。我认为它需要小写的
h
,而不是
h