【问题标题】:Read and plot .txt file (into .mat)读取并绘制 .txt 文件(到 .mat)
【发布时间】:2012-06-30 11:22:09
【问题描述】:

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

之后我需要绘制这些数据(例如time vs.data1time vs.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(毫秒)

,. 现在是个大问题

【问题讨论】:

    标签: matlab file-io


    【解决方案1】:

    正如之前在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    
    

    【讨论】:

    • 是的,我已经尝试过了,但没有任何效果。我知道我必须首先改变所有,到。并在此之后逐行读取;试过这个但不行:fid=fopen('test.txt','rt');而 ~feof(fid) l=fgetl(fid) ; strrep(l,',','.');结束
    • 我会使用fid=fopen('test.txt'); s=textscan(fid,'%s','delimiter','\n'); s=strrep(s{1},',','.'); 加载和删除逗号,然后可能会从那里加载 sscanf,将日期作为字符串拉出,然后使用 datevec 将它们转换为 Matlab 友好的格式。我会在一秒钟内用更完整的解决方案更新我的答案
    • 嗯,谢谢你的想法;更大的问题是在我将数据读入matlab之后..我希望你能找到解决方案,我会等待;非常感谢。
    • 感谢您的解决方案。但是我现在如何绘制例如第三列。 Plot(data(:,3), ??) 我需要绘制数据与时间的关系图。
    • 嘿亚历克斯,实际上我已经在我的答案中添加了一个部分,显示如何在原始文本文件 (Data1) 中绘制第三列。要绘制下一列,您将使用 plot(clean_data(:,1),clean_data(:,3)); datetick;
    猜你喜欢
    • 1970-01-01
    • 2015-07-20
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多