【发布时间】:2016-06-29 02:59:15
【问题描述】:
我正在阅读以下格式的 csv 文件:
Header:,Date,Time,"MC2_Y241_TightnessPressValve","MC2_Y243_PressingValve""
Data,2015-09-16,15:41:52;781,"780.000000","0.0034"
Data,2015-09-16,15:41:52;791,"790.000000","0.1255"
Data,2015-09-16,15:41:52;801,"800.000000","1.5123"
Atm 我正在使用 fgetl(fid) 来查找标题以及所有日期和时间。然后我使用哪些行和列包含双精度的知识,以便能够使用 csvread() 进行快速阅读。但是,要使用 csvread(),我必须先删除引号。我目前正在使用 matlab 中的 powershell 脚本执行此操作,但这太耗时了,因为我需要读取 +200Mb 的文件。
注意:不能使用带有 '%q' 的 textscan 有两个原因: 1)我希望所有双打立即被读取为双打(转换太耗时)。 2) 文件包含不同数量的行和列。
这是一个独立的应用程序。
我非常感谢所有帮助,我花了无数时间来提高效率。
【问题讨论】:
-
各种行数和列数?可以有任意数量的行。但您需要知道列的格式。
-
我可以使用 fgetl 并检查字符串中的分隔符(逗号)的数量并找出我有多少列。但是我该去哪里呢?
-
读取标题行
f = fopen(file,'r'); h = f.getl(f);,用分隔符cols = regexp(h, ',', 'split');分割,然后你会得到一个包含每列名称的单元格字符串数组。你可以通过ncol = length(cols);知道列的数量从cols的每一项的值,你可以知道这个列是什么以及数据类型。然后你可以根据它构造一个格式字符串。 -
读入字符串
s = fileread(you_file);,然后使用textscan(s, format)。如果引用有问题,请使用s = strrep(s,'"','')删除引号。 -
阅读
textscan的帮助文档,尤其是formatSpec部分