将格式化数据从 .txt 正确读取到 MATLAB
Read formated data from .txt to MATLAB correctly
考虑拥有一个包含数据(2 header 行、5 行和 2050 列数据的 .txt
文件(其名称保存为变量 fName
):第一列是格式 hours:minutes:seconds.miliseconds 的时间,第 2 列是时间戳,所有其余列都是数字数据矩阵。
here 暂时提供文件。文件内容预览(6列2050):
My data
Number of Pixels per Row: 2048
12:23:14.305 1435742594305 -1.39 1.61 0.61 3.61 ...
12:23:14.815 1435742594815 -1.56 -1.56 -1.56 2.44 ...
12:23:15.326 1435742595326 -0.17 0.83 -0.17 4.83 ...
12:23:15.837 1435742595837 -0.22 -0.22 -2.22 0.78 ...
12:23:16.351 1435742596351 -1.17 -0.17 -1.17 4.83 ...
我用下面的代码读取数据:
skipRows = 2;
% # Read file:
fileID = fopen(fName,'r');
RawData = textscan(fileID,['%s\t','%f\t',repmat('%f\t',1, 2048)], 'headerlines',skipRows);
fclose(fileID);
% # Extract data:
Time = RawData{1};
Timestamp = RawData{2};
data = cell2mat(RawData(3:end));
% # Display data:
Time
Timestamp
结果 - 不是 5 行,而是 10 行,每隔一行包含缺失数据:
Time =
'12:23:14.305'
[1x1 char]
'12:23:14.815'
[1x1 char]
'12:23:15.326'
[1x1 char]
'12:23:15.837'
[1x1 char]
'12:23:16.351'
[1x1 char]
Timestamp =
1.0e+12 *
1.4357
NaN
1.4357
NaN
1.4357
NaN
1.4357
NaN
1.4357
NaN
我的代码有错误吗?如何正确读取数据?
我已经针对整个 inout 文件测试了您的代码,但我遇到了同样的错误。
正如@excaza 在其评论中所写,问题似乎与您输入文件的写入方式有关。
您可以通过在 format
字符串末尾添加 \r
来解决问题,如下所示:
RawData = textscan(fileID,['%s\t','%f\t',repmat('%f\t',1, 2048),'\r'], 'headerlines',skipRows);
注意:在您发布的代码中,您写道:
data = cell2mat(Raw(3:end));
我假设是:
data = cell2mat(RawData(3:end));
希望这对您有所帮助。
考虑拥有一个包含数据(2 header 行、5 行和 2050 列数据的 .txt
文件(其名称保存为变量 fName
):第一列是格式 hours:minutes:seconds.miliseconds 的时间,第 2 列是时间戳,所有其余列都是数字数据矩阵。
here 暂时提供文件。文件内容预览(6列2050):
My data
Number of Pixels per Row: 2048
12:23:14.305 1435742594305 -1.39 1.61 0.61 3.61 ...
12:23:14.815 1435742594815 -1.56 -1.56 -1.56 2.44 ...
12:23:15.326 1435742595326 -0.17 0.83 -0.17 4.83 ...
12:23:15.837 1435742595837 -0.22 -0.22 -2.22 0.78 ...
12:23:16.351 1435742596351 -1.17 -0.17 -1.17 4.83 ...
我用下面的代码读取数据:
skipRows = 2;
% # Read file:
fileID = fopen(fName,'r');
RawData = textscan(fileID,['%s\t','%f\t',repmat('%f\t',1, 2048)], 'headerlines',skipRows);
fclose(fileID);
% # Extract data:
Time = RawData{1};
Timestamp = RawData{2};
data = cell2mat(RawData(3:end));
% # Display data:
Time
Timestamp
结果 - 不是 5 行,而是 10 行,每隔一行包含缺失数据:
Time =
'12:23:14.305'
[1x1 char]
'12:23:14.815'
[1x1 char]
'12:23:15.326'
[1x1 char]
'12:23:15.837'
[1x1 char]
'12:23:16.351'
[1x1 char]
Timestamp =
1.0e+12 *
1.4357
NaN
1.4357
NaN
1.4357
NaN
1.4357
NaN
1.4357
NaN
我的代码有错误吗?如何正确读取数据?
我已经针对整个 inout 文件测试了您的代码,但我遇到了同样的错误。
正如@excaza 在其评论中所写,问题似乎与您输入文件的写入方式有关。
您可以通过在 format
字符串末尾添加 \r
来解决问题,如下所示:
RawData = textscan(fileID,['%s\t','%f\t',repmat('%f\t',1, 2048),'\r'], 'headerlines',skipRows);
注意:在您发布的代码中,您写道:
data = cell2mat(Raw(3:end));
我假设是:
data = cell2mat(RawData(3:end));
希望这对您有所帮助。