在 MATLAB 中读取格式化文本
Read formatted text in MATLAB
我有一些文本文件,我想在 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);
但我收到错误消息:
Error using textscan
Unable to parse the format character vector at
position 21 ==> %{HH:mm:ss.SSS}T %f64 %f64 %u64 %f64 %f64 %f64
Date formats must be of the form %T or %{...}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
使用
myData = textscan(fid, '%u64 %{dd/MM/yyyy}D %{hh:mm:ss.SSS}D %f64 %f64 %u64 %f64 %f64 %f64\r\n', 'HeaderLines', 3);
我认为没有 %T
。 %D
是日期时间(日期和时间)。
我总是倾向于避免使用 fscanf
、importdata
、textscan
等函数,因为它们处理起来很棘手,而且我认为它们的输出有时不容易操纵.最重要的是,您的文件格式看起来与 Matlab 用于显示表格数据的文件格式非常相似……我认为这很好地为您指明了正确的方向。
我推荐你使用readtable,不仅因为前面提到的原因,还因为表格在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 部分的格式错误消息的误导方式,至少在 Matlab 2017A 之前只有 %{...}D
是有效的日期时间文字格式。
我有一些文本文件,我想在 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);
但我收到错误消息:
Error using textscan
Unable to parse the format character vector at position 21 ==> %{HH:mm:ss.SSS}T %f64 %f64 %u64 %f64 %f64 %f64
Date formats must be of the form %T or %{...}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
使用
myData = textscan(fid, '%u64 %{dd/MM/yyyy}D %{hh:mm:ss.SSS}D %f64 %f64 %u64 %f64 %f64 %f64\r\n', 'HeaderLines', 3);
我认为没有 %T
。 %D
是日期时间(日期和时间)。
我总是倾向于避免使用 fscanf
、importdata
、textscan
等函数,因为它们处理起来很棘手,而且我认为它们的输出有时不容易操纵.最重要的是,您的文件格式看起来与 Matlab 用于显示表格数据的文件格式非常相似……我认为这很好地为您指明了正确的方向。
我推荐你使用readtable,不仅因为前面提到的原因,还因为表格在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 部分的格式错误消息的误导方式,至少在 Matlab 2017A 之前只有 %{...}D
是有效的日期时间文字格式。