声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

声振论坛 展示 科学计算 matlab 查看内容

也谈在Matlab中读入数字与字符混排的文本数据

2015-10-31 07:06| 发布者: aspen| 查看: 1671| 评论: 0|原作者: mechart|来自: 声振论坛

摘要: 由于实际的数据处理免不了要操作字符与数字混排的文本数据,对于这个问题的Matlab实现坛子里已经有相关的帖子: http://forum.vibunion.com/thread-2029-1-1.html http://forum.vibunion.com/thread-7985-1-1.ht ...
由于实际的数据处理免不了要操作字符与数字混排的文本数据,对于这个问题的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 编辑 ]

考虑到写入数据文件其实并没有什么意义,同时修改数据行中可以包含小数点(.)、-、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));
复制代码

最新评论

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

GMT+8, 2024-5-11 02:55 , Processed in 0.031971 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部