0

我需要将 test.TXT 文件(制表符分隔)读入 MATLAB。

TXT 文件具有以下形式:

Datum Time Data1 Data2 Data3 Data4 Data5
06/28/2012 09:27,3 1,931764 -0,008698 4,151306 33,865424 -44,923096
06/28/2012 09:27,3 1,931764 -0,003662 4,154358 33,865424 -44,831543
06/28/2012 09:27,4 1,928712 -0,001526 4,168701 33,866102 -45,472412
.....................................................

之后我需要绘制这些数据(例如timevs. data1; timevs. data2..)

什么是打开和读取 test.txt 文件的最简单方法,这样我就可以绘制我的数据(将所有数据插入工作区..)。我尝试导入数据,但随后 MATLAB 将数据作为一列导入。:/

谢谢


编辑

我刚刚注意到我将错误的时间格式复制到第一篇文章中:S

Datum Time Data1 Data2 Data3 Data4 Data5
06/28/2012 17:09:27,3 1,931764 -0,008698 4,151306 33,865424 -44,923096
06/28/2012 17:09:27,3 1,931764 -0,003662 4,154358 33,865424 -44,831543
06/28/2012 17:09:27,4 1,928712 -0,001526 4,168701 33,866102 -45,472412
.....................................................

17:09:27,4 -> 17(小时)、09(分钟)、27(秒)、4(毫秒)

,这是现在的大问题.

4

1 回答 1

2

正如前面在这个问题中回答的那样,您应该使用textscanfscanf

仔细研究后,您的问题有一些有趣的细微差别。我采用的解决方案是通过将所有内容读取为字符串来保留柱状结构。这有助于保持一切有序,同时用句点替换逗号,将日期字符串处理为 datenums,最后转换存储为字符串的数字。

fid = fopen('test.txt','rt');
header = textscan(fid,'%s %s %s %s %s %s %s',1); 
data = textscan(fid,'%s %s %s %s %s %s %s');
data = cellfun(@(x) strrep(x,',','.'),data,'UniformOutput',false);
clean_data(:,1) = arrayfun(@(x) datenum([data{1}{x} ' ' data{2}{x}]), 1:length(data{1}) )';
clean_data(:,2:6) = cell2mat(cellfun(@str2num , [data{3:end}],'UniformOutput',false));
fclose(fid);

那里有一些混乱的过渡。但是,只要您的文件不是太长,一般方法就应该是可靠的。结果如下:

>> datestr(clean_data(:,1))
ans =
28-Jun-2012 09:27:18
28-Jun-2012 09:27:18
28-Jun-2012 09:27:24

>> clean_data(:,2:end)
ans =
1.9318   -0.0087    4.1513   33.8654  -44.9231
1.9318   -0.0037    4.1544   33.8654  -44.8315
1.9287   -0.0015    4.1687   33.8661  -45.4724

最后绘制与日期的对比图,这是最初的目标:

>> plot(clean_data(:,1),clean_data(:,2))
>> datetick    
于 2012-06-30T13:03:38.517 回答