一般来说,我需要处理许多具有混合数据类型的文本文件,包括数字和文本。对于数字数据,我需要对它们进行质量处理,因为我处理的数据源很多,并且没有我可以严格执行的标准。数据可能是整数、浮点数或某种复杂格式,我需要清理这些文件。
使用 textscan 将输入数据快速转换为数字,但是,尝试将新创建的数字转换回字符串似乎花费的时间太长(比将输入文本转换为数字长 6 倍)。
我目前正在使用 sprintf 和 textscan 的组合将双精度数值数组转换为字符串元胞数组,而不会丢失精度。
numstr = sprintf(sprntffrmtstr, num);
vlnmcllnst = textscan(numstr,txtscnfrmtstr,'delimiter',' ');
vlcll = vlnmcllnst{1};
第 1 行和第 2 行在分析器中占用了大量时间。我在 for 循环中使用此方案来处理将输入文本转换为数字的 textscan 的输出。每个循环都是数字的列向量,并且 numstr 和 vlnmcllnst 都是在循环之前预先分配的。
有人可以加快速度吗?
编辑:此处上传的文件(2014-04-29 仍可访问!):http ://www.2shared.com/file/ztVrvE0K/exampledata.html
这只是说明 1 个文件。我可能一次处理和分析几千个这样的文件,它们的大小通常在 0-7MB(4000 行)之间变化,尽管没有严格的大小上限。数据通道仅按列松散地组织,某些文件中可能缺少通道,添加了新通道等。我当然预见到在使用文件可能更改的任何标准时需要保持灵活性,因为它们来自不同的来源。我不需要只适用于这个文件的解决方案。我的最终解决方案应该能够处理几乎任何“合法”的 .csv 类型文件。如果没有本地 MATLAB 代码可以提供足够的速度,我不排除使用可以从 MATLAB 调用的用 perl、C 等编写的辅助类型函数的可能性。