首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取txt文件fscanf vs.fread和textscan

读取txt文件fscanf vs.fread和textscan
EN

Stack Overflow用户
提问于 2012-03-03 03:53:50
回答 2查看 18.5K关注 0票数 2

我有一个从SQL2005生成的.txt文件( ANSI格式)。我试过textscanfscanf。整个txt文件只有numeric数据。

在线资源显示fscanf比文本扫描更快,但我发现情况并非如此。

  • Textscan比

快得多

我也想用fread来尝试这一点,但是我不知道如何使用fread导入数据。请你提出建议/评论好吗?谢谢。

代码语言:javascript
复制
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';
EN

回答 2

Stack Overflow用户

发布于 2012-03-03 06:14:55

理想情况下,您可以将数据转换为二进制格式,然后使用fread直接读取双精度数字。在这种情况下,我希望fread要快得多。(字符串到数字的转换是昂贵的,原始二进制格式将导致一个更小的文件)。

否则,您可以使用fread读取字符,然后对传入的数据执行字符串到数字的转换(sscanf似乎是最好的)。唯一的诀窍是,您需要让您的读批次以行中断结束,否则您的文本到字符串操作可能会产生不可预测的结果。您可以这样做:首先读取大量字符,然后备份直到到达换行,或者以其他字符读取,直到找到行尾。我发现这比任何一种文字扫描都要快.但由于其他原因,我们的数字不匹配;我不知道该相信什么。

第二种方法的示例代码包含在先前的答案中(包括许多与此问题重叠的部分),以及一些计时结果。https://stackoverflow.com/a/9441839/931379

票数 0
EN

Stack Overflow用户

发布于 2012-03-03 09:48:27

还有一个您没有列出的选项:load

代码语言:javascript
复制
   L = load(fName);

它非常简单,并且会自动为您计算出格式。它确实有一些限制-格式应该有相同数量的数字在每一行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9543281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档