读取并绘制.txt文件(转换为.mat)

时间:2012-06-30 11:22:10

标签: matlab file-io

我需要将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
.....................................................

之后,我需要绘制这些数据(例如timedata1; timedata2的比较..)

打开和读取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(毫秒)

现在,,.

存在很大问题

1 个答案:

答案 0 :(得分:2)

正如this question之前的回答,你应该使用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