声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

楼主: mechart

[编程技巧] 也谈在Matlab中读入数字与字符混排的文本数据

 关闭 [复制链接]
发表于 2006-3-28 20:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
由于实际的数据处理免不了要操作字符与数字混排的文本数据,对于这个问题的Matlab实现坛子里已经有相关的帖子:

http://forum.vibunion.com/thread-2029-1-1.html
http://forum.vibunion.com/thread-7985-1-1.html

但是这两种做法都有局限性,为了探求一般性的字符与数字混排的文本数据处理方法,我也不揣浅陋,贡献一点自己的工作。
我的工作主要基于上述2个帖子,改进的地方包括:
1. 增加了对空行的判断;
2. 增加了对首字符为空格的判断;
3. 支持将提取的数据保存在一个数组变量中,同时写入到一个指定的文件中,以便于后续的操作;
4. 写成了函数,可以反复运用。
还存在的问题是:
1. 默认数字与字符是不同行的,对于字符和数字在同一行的情况没有处理;
2. 对于首位为负数的情况没有处理;
3. 没有考虑程序运行的效率。
4. 其他没有想到的问题。

function data=distilldata(infile,outfile)的用法:
infile——原始数据文件名;
outfile——保存纯数据文件的文件名;
data——保存所提取数据的数组变量。

详细说明参见附件。

希望得到高人们的指点。

[ 本帖最后由 eight 于 2007-1-25 20:49 编辑 ]

评分

1

查看全部评分

回复
分享到:

使用道具 举报

发表于 2006-3-28 20:58 | 显示全部楼层
不错不错,又改进了一步
 楼主| 发表于 2006-3-31 17:13 | 显示全部楼层
考虑到写入数据文件其实并没有什么意义,同时修改数据行中可以包含小数点(.)、-、E(科学计数法)等符号。
  1. function [data]=distilldata(infile)
  2. %功能说明:
  3. %将保存数据的原始文件中的数值数据读入到一个data变量中
  4. %使用说明:
  5. % infile——原始数据文件名;
  6. % data=数据变量

  7. tmpfile='tmp.mat';
  8. fidin=fopen(infile,'r'); % 打开原始数据文件(.list)
  9. fidtmp=fopen(tmpfile,'w'); % 创建保存数据文件(不含说明文字)
  10. while ~feof(fidin) % 判断是否为文件末尾
  11. tline=fgetl(fidin); % 从文件读入一行文本(不含回车键)
  12. if isempty(tline) | tline==' ' % 判断是否空行
  13. continue
  14. else
  15. [m,n]=size(tline);
  16. flag=1;
  17. for i=1:n %判断一行中有没有字符(+-.Ee和空格键除外)
  18. if tline(i)==' '|tline(i)=='-'|tline(i)=='.'|tline(i)=='E'...
  19. |tline(i)=='e'|tline(i)=='+'...
  20. |(double(tline(i))>=48&&double(tline(i))<=57)
  21. continue
  22. else
  23. flag=0;
  24. break
  25. end
  26. end
  27. if flag==1 % 如果是数字行,把此行数据写入文件
  28. fprintf(fidtmp,'%s\n',tline);
  29. else
  30. continue
  31. end
  32. end
  33. end
  34. fclose(fidin);
  35. fclose(fidtmp);
  36. data=textread(tmpfile);
  37. delete (tmpfile)
  38. %data=str2num(textread(outfile));
复制代码
发表于 2006-4-21 15:07 | 显示全部楼层
对程序的小小改正
fidin=fopen(infile,'r');
改为:
fidin=fopen(‘infile’,'r');                  
发表于 2006-5-6 13:12 | 显示全部楼层
太有用了,谢谢
发表于 2006-6-7 22:31 | 显示全部楼层
cang~~
发表于 2006-6-30 15:38 | 显示全部楼层
支持原创!!!
发表于 2006-7-27 11:22 | 显示全部楼层
能读什么格式的文本文件?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-29 19:41 , Processed in 0.066951 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表