mechart 发表于 2006-3-28 20:50

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

由于实际的数据处理免不了要操作字符与数字混排的文本数据,对于这个问题的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 编辑 ]

aspen 发表于 2006-3-28 20:58

不错不错,又改进了一步

mechart 发表于 2006-3-31 17:13

考虑到写入数据文件其实并没有什么意义,同时修改数据行中可以包含小数点(.)、-、E(科学计数法)等符号。
function =distilldata(infile)
%功能说明:
%将保存数据的原始文件中的数值数据读入到一个data变量中
%使用说明:
% infile——原始数据文件名;
% data=数据变量

tmpfile='tmp.mat';
fidin=fopen(infile,'r'); % 打开原始数据文件(.list)
fidtmp=fopen(tmpfile,'w'); % 创建保存数据文件(不含说明文字)
while ~feof(fidin) % 判断是否为文件末尾
tline=fgetl(fidin); % 从文件读入一行文本(不含回车键)
if isempty(tline) | tline==' ' % 判断是否空行
continue
else
=size(tline);
flag=1;
for i=1:n %判断一行中有没有字符(+-.Ee和空格键除外)
if tline(i)==' '|tline(i)=='-'|tline(i)=='.'|tline(i)=='E'...
|tline(i)=='e'|tline(i)=='+'...
|(double(tline(i))>=48&&double(tline(i))<=57)
continue
else
flag=0;
break
end
end
if flag==1 % 如果是数字行,把此行数据写入文件
fprintf(fidtmp,'%s\n',tline);
else
continue
end
end
end
fclose(fidin);
fclose(fidtmp);
data=textread(tmpfile);
delete (tmpfile)
%data=str2num(textread(outfile));

baozitj 发表于 2006-4-21 15:07

对程序的小小改正
fidin=fopen(infile,'r');
改为:
fidin=fopen(‘infile’,'r');                  

soluble 发表于 2006-5-6 13:12

太有用了,谢谢

qiuqia17 发表于 2006-6-7 22:31

cang~~

笑石头 发表于 2006-6-30 15:38

支持原创!!!

qfwaterlily 发表于 2006-7-27 11:22

能读什么格式的文本文件?
页: [1]
查看完整版本: 也谈在Matlab中读入数字与字符混排的文本数据