声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3642|回复: 8

[前后处理] 消除txt数据文件中空行批处理小程序

[复制链接]
发表于 2007-6-24 16:25 | 显示全部楼层 |阅读模式

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

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

x
有限元结果计算完之后,生成的数据文件里面总是有文字或者空行,不便于读入excel里进行处理,我这儿编了个小程序,可以解决这个问题
不是我写的
是我一个朋友刚写的,大家也可以去他博客看看
回复
分享到:

使用道具 举报

 楼主| 发表于 2007-6-24 16:26 | 显示全部楼层
一、消除txt数据文件中空行批处理matlab小程序

%下面这段才是真正的读入数据写出数据的程序
%需要txt原型数据文件,然后可以将所有的字符行消除,空行消除

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

tmpfile='tmp.mat';
fidin=fopen('aaa.txt','r'); % 打开原始数据文件(aaa.txt)
fidtmp=fopen(tmpfile,'w'); % 创建保存数据文件(不含说明文字)
while ~feof(fidin) % 判断是否为文件末尾
tline=fgetl(fidin); % 从文件读入一行文本(不含回车键)
if isempty(tline) | tline==' ' % 判断是否空行
continue
else
[m,n]=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);

转载http://gls-2006-11.blog.sohu.com/51853553.html

[ 本帖最后由 rodge 于 2007-7-23 09:37 编辑 ]
发表于 2008-11-1 13:07 | 显示全部楼层
感觉必要性不大,一般结果文件数量不大,可以不用批量处理。
在EXCEL中添加一辅助列,对原文本分两次排序即可。
发表于 2008-11-3 09:09 | 显示全部楼层
普通的记事本程序不支持按列选择,可以安装一个小软件,UltraEdit,支持按列选择,很方便的

评分

1

查看全部评分

发表于 2008-11-5 10:05 | 显示全部楼层
本帖最后由 wdhd 于 2016-3-9 08:52 编辑

  我的数据有几千行,每隔三十几行就有几句废话,这个程序很好用,首先感谢楼主的分享。
  我还有些问题,不知道这个程序是怎么找到我的数据文件的?我把数据文件更名为aaa.txt,Matlab也不能自己找到这个文件啊,运行不成功。
  楼主能不能解释一下,这个程序具体是怎样应用的?
发表于 2008-11-5 10:58 | 显示全部楼层
这应该是批处理程序,我没有编写过几百行或更多的程序,不过这个程序还是不错的。留下以后或许有用。
发表于 2008-11-5 15:14 | 显示全部楼层
tmpfile='tmp.mat';
fidin=fopen('aaa.txt','r'); % 打开原始数据文件(aaa.txt)
fidout=fopen('bbb.txt','w'); % 创建保存数据文件(不含说明文字)
while ~feof(fidin) % 判断是否为文件末尾
tline=fgetl(fidin); % 从文件读入一行文本(不含回车键)
if isempty(tline) | tline==' ' % 判断是否空行
continue
else
[m,n]=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(fidout,'%s\n',tline);
else
continue
end
end
end
fclose(fidin);
fclose(fidout);
data=textread(tmpfile);

红色部分是我对楼主程序的修改。

将初始数据文件更名为aaa.txt之后,复制到MATLAB的安装目录下名为work的文件夹内,然后在MATLAB里运行改动后的程序,即可在work文件夹内生成一个名为bbb.txt的记事本文件,就是我们需要的删除了多余文字行的数据文件。

生成的bbb.txt文件看起来有点乱,可以选择 打开方式 为excel,用excel打开后再保存为bbb.txt,覆盖原文件,看起来就是很规范的按列排列的数据文件了。

评分

1

查看全部评分

发表于 2008-12-2 16:29 | 显示全部楼层

回复 楼主 xuruikl 的帖子

最好的办法是:在输出的时候设置一下一次输出输出多少行,这样就不会出现30行出现一次了,你想多少行出现一次都可以,然后在UE中使用列选择,后面的就不用我说了吧.QQ群:48626275
发表于 2008-12-14 10:44 | 显示全部楼层
本帖最后由 wdhd 于 2016-3-9 13:31 编辑
原帖由 SCBJ 于 2008-12-2 16:29 发表
最好的办法是:在输出的时候设置一下一次输出输出多少行,这样就不会出现30行出现一次了,你想多少行出现一次都可以,然后在UE中使用列选择,后面的就不用我说了吧.QQ群:48626275

 是的,楼上的这个方法很好。
  不过楼上的朋友说的很不详细,估计大多数朋友还是不明白该怎么办吧?
  我最近无意间在一位朋友的博客里看到了这个ANSYS命令,试了一下,效果很好,跟大家共享一下吧。
  /page,99999,132,99999,240
  在ANSYS输出数据列表之前,先运行该行命令即可。
  最后的结果应该是输出的数据只在最前面和最后面有文字行说明,数据行中间不会有文字行出现。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-30 18:51 , Processed in 0.083266 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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