Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我已经编写了一个脚本,将其输出保存到CSV文件中,以供以后参考,但是用于导入数据的第二个脚本花费大量时间来读回。
数据格式如下: Item1,val1,val2,val3 Item2,val4,val5,val6,val7 Item3,val8,val9 标头位于最左侧的列上,而数据值占据该行的其余部分。一个主要的困难是,每个测试项目的数据值数组的长度可以不同。我会将其保存为结构,但是我需要能够在MATLAB环境之外进行编辑,因为有时我必须删除未安装MATLAB的计算机上的不良数据行。确实,我的问题之一是:是否应该以其他格式保存数据? 问题的第二部分:我尝试了importdata , csvread和dlmread ,但是我不确定哪个最好,或者是否有更好的解决方案。现在,我正在使用自己的脚本,使用了loop和fgetl ,这对于大型文件来说非常慢。有什么建议么? function [data,headers]=csvreader(filename); %V1_1 fid=fopen(filename,'r'); data={}; headers={}; count=1; while 1 textline=fgetl(fid); if ~ischar(textline), break, end nextchar=textline(1); idx=1; while nextchar~=',' headers{count}(idx)=textline(1); idx=idx+1; textline(1)=[]; nextchar=textline(1); end textline(1)=[]; data{count}=str2num(textline); count=count+1; end fclose(fid); (我知道这可能是编写得很糟糕的代码-我是工程师,而不是程序员,请不要对我大吼-但是,任何改进建议都将受到欢迎。) 回答: 如果在第一个脚本创建文件时可以使用NaN值填充文件,则可能会使数据更易于阅读: Item1,1,2,3,NaN Item2,4,5,6,7 Item3,8,9,NaN,NaN 或者您甚至可以只打印空白字段: Item1,1,2,3, Item2,4,5,6,7 Item3,8,9,, 当然,为了正确填充,您需要事先知道所有项目的最大数值是多少。无论采用上述哪种格式,您都可以使用一种标准的文件读取功能,例如TEXTSCAN : >> fid = fopen('uneven_data.txt','rt'); >> C = textscan(fid,'%s %f %f %f %f','Delimiter',',','CollectOutput',1); >> fclose(fid); >> C{1} ans = 'Item1' 'Item2' 'Item3' >> C{2} ans = 1 2 3 NaN %# TEXTSCAN sets empty fields to NaN anyway 4 5 6 7 8 9 NaN NaN 更多&回答... |
![]() |
![]() |