正确地从.txt到MATLAB读取格式化数据

时间:2015-08-13 15:40:37

标签: matlab textscan format-string

考虑将.txt文件(其名称保存为变量fName)与数据(2个标题行,5行和2050列包含数据:第1列为时间格式小时: minutes:seconds.miliseconds,第2列是时间戳,其余所有列都是数字数据矩阵。

文件暂时可从here获取。预览文件内容(2050的6列):

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

我的代码中出现错误吗?如何正确读取数据?

1 个答案:

答案 0 :(得分:2)

我已经对整个inout文件中的代码进行了测试,但我也遇到了同样的错误。

正如@excaza在其评论中所写,问题似乎与输入文件的写入方式有关。

您可以通过在\r字符串末尾添加format来解决问题,如下所示:

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));

希望这有帮助。