Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-10, 20:30   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 在MATLAB中导入CSV文件的最快方法

我已经编写了一个脚本,将其输出保存到CSV文件中,以供以后参考,但是用于导入数据的第二个脚本花费大量时间来读回。

数据格式如下:

Item1,val1,val2,val3 Item2,val4,val5,val6,val7 Item3,val8,val9 标头位于最左侧的列上,而数据值占据该行的其余部分。一个主要的困难是,每个测试项目的数据值数组的长度可以不同。我会将其保存为结构,但是我需要能够在MATLAB环境之外进行编辑,因为有时我必须删除未安装MATLAB的计算机上的不良数据行。确实,我的问题之一是:是否应该以其他格式保存数据?

问题的第二部分:我尝试了importdatacsvreaddlmread ,但是我不确定哪个最好,或者是否有更好的解决方案。现在,我正在使用自己的脚本,使用了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

更多&回答...
poster 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 05:13


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.