我有一个从 SQL-2005 生成的 .txt 文件(ANSI 格式)。我努力了textscan
and fscanf
。整个txt文件只有numeric
data.
在线资源表明 fscanf 比 textscan 更快,但我发现并非如此。
我想尝试这个fread
以及,但我不知道如何使用 fread 导入数据。你能建议/评论吗?谢谢。
fName = 'Test.txt' % From SQL in ANSI format, 5million rows, 5 Cols
Numofrows = 1000000 ; %1million
Numcols = 5 ;
fid = fopen(fName, 'r');
C = textscan(fid, '%f %f %f %f %f', Numofrows ) ;
C = cell2mat(C);
fclose(fid); fid = fopen(fName, 'r');
[C, Count] = fscanf(fid, '%f %f %f %f %f', Numofrows * Numcols ) ;
C = reshape(C, Count./Numofrows , Numofrows ) ; C=C';
理想情况下,您将能够将数据转换为二进制格式,然后使用fread
直接读取双精度数。我希望fread
在这种情况下要快得多。 (字符串到数字的转换成本很高,并且原始二进制格式会产生更小的文件)。
否则你可以使用读取字符fread
然后对传入的数据运行字符串到数字的转换(sscanf 似乎是最好的)。唯一的技巧是您需要让读取批次以换行符结束,否则您的文本到字符串操作可能会产生不可预测的结果。您可以首先读取大量字符,然后备份直到到达换行符,或者读取其他字符直到找到行尾。我发现这比 fscanf 的 textscan 稍快一些......但我们的数字由于其他原因不匹配;我不知道该相信什么。
第二种方法的示例代码包含在之前的答案中(包括与这个问题有很多重叠),以及一些计时结果。https://stackoverflow.com/a/9441839/931379 https://stackoverflow.com/a/9441839/931379.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)