声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3302|回复: 2

用Matlab整理有限元软件生成的数据文件

[复制链接]
发表于 2005-7-27 08:02 | 显示全部楼层 |阅读模式

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

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

x
<TABLE width="80%" border=0>

<TR>
<TD><B>关于matlab中的文件操作!</B></TD>
<TD align=right><a><B>Copy to clipboard</B></A></TD></TR>
<TR>
<TD colSpan=2><B>Posted by: </B>wolfly<BR><B>Posted on: </B>2004-03-06 12:08<BR><BR>一个数据文件,文件的前面几行是文字说明 <BR>现在想只保存文件中的数据,然后用load命令调用该文件! <BR>请问该怎么做呢? </TD></TR></TABLE>
<HR width="80%" noShade SIZE=2>

<TABLE width="80%" border=0>

<TR>
<TD><B>回复: 关于matlab中的文件操作!</B></TD>
<TD align=right><a><B>Copy to clipboard</B></A></TD></TR>
<TR>
<TD colSpan=2><B>Posted by: </B>qaaqa<BR><B>Posted on: </B>2004-03-15 15:07<BR><BR>笨办法,呵呵,把你要调用的文件前几行的文本删除。 </TD></TR></TABLE>
<HR width="80%" noShade SIZE=2>

<TABLE width="80%" border=0>

<TR>
<TD><B>回复: 关于matlab中的文件操作!</B></TD>
<TD align=right><a><B>Copy to clipboard</B></A></TD></TR>
<TR>
<TD colSpan=2><B>Posted by: </B>土木康西<BR><B>Posted on: </B>2004-04-06 10:41<BR><BR>先空读前面文字, </TD></TR></TABLE>
<HR width="80%" noShade SIZE=2>

<TABLE width="80%" border=0>

<TR>
<TD><B>回复: 关于matlab中的文件操作!</B></TD>
<TD align=right><a><B><FONT color=#0000cf>Copy to clipboard</FONT></B></A></TD></TR>
<TR>
<TD colSpan=2><B>Posted by: </B>hyperelastic<BR><B>Posted on: </B>2004-04-09 10:41<BR><BR>使用下面程序来完成,只需要修改一下文件名tt.dat和要跳过的行数LineClearNo. <BR>============================================= <BR>clear,clc <BR>LineClearNo = 1; % 要跳过的行数 <BR>gross_dat = textread('tt.dat','%s','delimiter','\n','whitespace',''); % 过渡数据 <BR>gross_dat(1:LineClearNo) = []; <BR>net_dat = str2num(cell2mat(gross_dat)); % 最终数据 <BR>============================================= <BR>附件中是程序和试验文件tt.dat </TD></TR></TABLE>
<HR width="80%" noShade SIZE=2>

<TABLE width="80%" border=0>

<TR>
<TD><B>回复: 关于matlab中的文件操作!</B></TD>
<TD align=right><a><B>Copy to clipboard</B></A></TD></TR>
<TR>
<TD colSpan=2><B>Posted by: </B>paolema<BR><B>Posted on: </B>2004-05-23 10:32<BR><BR>刚好,我也有这个困惑。 <BR>输出节点解时,可以用/page命令来控制,这样除了开头和结尾有字母外,中间没有,手工删除字母说明,再用load将列读入到数组中,很容易。 <BR><BR>但是,当输出nlist,节点坐标时,每个20行,就有一行是字母说明。 <BR>如果手工删除,在节点坐标很多的情况下,不够效率。 <BR><BR>对wolfly提供的例子,我看了,想请教这几个命令, <BR><BR>textread('tt.dat','%s','delimiter','\n','whitespace',''); % 过渡数据 <BR>gross_dat(1:LineClearNo) = []; <BR>net_dat = str2num(cell2mat(gross_dat)); <BR>能不能麻烦一下,说说他们的用法,特别是参数。 <BR>我的nlist.txt是字母与浮点数的结合,用你的语句时,提示一下错误: <BR>??? Error using ==&gt; cat <BR>CAT arguments dimensions are not consistent. <BR><BR>Error in ==&gt; C:\MATLAB6p5p1\toolbox\matlab\datatypes\cell2mat.m <BR>On line 88 ==&gt; m = cat(1,m{:}); <BR><BR>Error in ==&gt; C:\MATLAB6p5p1\work\test1.m <BR>On line 20 ==&gt; net_dat = str2num(cell2mat(gross_dat)); % 最终数据 <BR><BR>能不能给解释一下怎么回事。 <BR><BR>另外,我想请教wolfly 兄,能不能用matlab语句,自动检测有字母的行,再将这有字母说明的一行彻底删除,这样再用load时,就很爽了。 <BR>或者,不删除也可以,那么怎么才能跳过有字母的行,同时能够按照列读入呢? </TD></TR></TABLE>
<HR width="80%" noShade SIZE=2>

<TABLE width="80%" border=0>

<TR>
<TD><B>回复: 关于matlab中的文件操作!</B></TD>
<TD align=right><a><B>Copy to clipboard</B></A></TD></TR>
<TR>
<TD colSpan=2><B>Posted by: </B>hyperelastic<BR><B>Posted on: </B>2004-05-23 18:44<BR><BR>下面这个程序可以实现如上功能: <BR>========================================== <BR><B>function ttt(fname1,fname2,sss) <BR>% Find the line including a particular string. <BR>% <BR>% fname1: source file name; <BR>% fname2: destination file name; <BR>% sss : the particular string; <BR>fid=fopen(fname1); <BR>fidnew = fopen(fname2,'w'); <BR>while 1 <BR>[$nbsp][$nbsp][$nbsp][$nbsp]tline = fgetl(fid); <BR>[$nbsp][$nbsp][$nbsp][$nbsp]a = strfind(tline,sss); <BR>[$nbsp][$nbsp][$nbsp][$nbsp]if ~ischar(tline), break, end <BR>[$nbsp][$nbsp][$nbsp][$nbsp]if isempty(a),fprintf(fidnew,tline);fprintf(fidnew,'\n');end <BR>end <BR>fclose(fid);fclose(fidnew); <BR>% end of function <BR>% First created in 2003-07-07 <BR>% Last revised in 2004-05-23</B> <BR>========================================= <BR>用法:<B>ttt('t.dat','tt.dat','length')</B> <BR>这样,新得到的<B>tt.dat</B>文件中就把<B>t.dat</B>中所有包含<B>length字符串</B>的行删掉了。 <BR>附件中是源程序和数据文件。 </TD></TR></TABLE>
<HR width="80%" noShade SIZE=2>

<TABLE width="80%" border=0>

<TR>
<TD><B>回复: 关于matlab中的文件操作!</B></TD>
<TD align=right><a><B>Copy to clipboard</B></A></TD></TR>
<TR>
<TD colSpan=2><B>Posted by: </B>paolema<BR><B>Posted on: </B>2004-05-24 10:28<BR><BR>万分感谢hyperelastic 。 <BR>还要请教,如果不需要的行全部是空格或者是空行,即硬回车,并且不知道多少个空格怎么办? <BR>也或者不需要的字符串有两种选择情况? <BR>望hyperelastic 再次不惜赐教! </TD></TR></TABLE>
<HR width="80%" noShade SIZE=2>

<TABLE width="80%" border=0>

<TR>
<TD><B>回复: 关于matlab中的文件操作!</B></TD>
<TD align=right><a><B>Copy to clipboard</B></A></TD></TR>
<TR>
<TD colSpan=2><B>Posted by: </B>hyperelastic<BR><B>Posted on: </B>2004-05-24 11:01<BR><BR>数据文件中的空行对matlab的load命令没有任何影响,不用考虑。 <BR><BR>如果有两种字符串在原始数据文件中,且两者没有任何相同的字符,哪怕只是一个字母,那就用上面程序两次。或者你对程序中的判断条件稍作修改。 <BR><BR>其实这样的问题,用ultraedit也很简单,摸清原始数据文件中字符串出现行数的规律,采用“录制宏”的方法来自动删除不要的行。 </TD></TR></TABLE>
<HR width="80%" noShade SIZE=2>

<TABLE width="80%" border=0>

<TR>
<TD><B>回复: 关于matlab中的文件操作!</B></TD>
<TD align=right><a><B>Copy to clipboard</B></A></TD></TR>
<TR>
<TD colSpan=2><B>Posted by: </B>paolema<BR><B>Posted on: </B>2004-05-24 11:45<BR><BR>再次感谢hyperelastic编辑。 <BR>空格问题,正如编辑所说,load不管,已经ok了。 <BR>两个不同字母问题也如编辑所说,函数用两次就可以了。 <BR><BR>假如我要判断,只要是字母我就删除,该如何实现呢? <BR>还请hyperelastic 不惜赐教。 <BR>还有啊,’\n‘下的txt文本,不像我们直接硬回车那样的文本排列规则,有没有什么办法使得我们输出的文本象fortran,或者别的软件输出的那样规则。 <BR>我知道,matlab输出的文本,虽然看起来是连在一行行的,实际上中间已有硬回车,就是那个黑黑的方框。这样还是不方便自己手工检查数据。 <BR>不知道有没有什么办法,能够将matlab输出的文本的硬回车'\n'排列得像我们自己手工回车那样有序。 </TD></TR></TABLE>
<HR width="80%" noShade SIZE=2>

<TABLE width="80%" border=0>

<TR>
<TD><B>回复: 关于matlab中的文件操作!</B></TD>
<TD align=right><a><B>Copy to clipboard</B></A></TD></TR>
<TR>
<TD colSpan=2><B>Posted by: </B>hyperelastic<BR><B>Posted on: </B>2004-05-24 13:31<BR><BR>只要是字母我就删除,该如何实现呢? <BR>可以修改前面程序中的判断条件。 <BR><BR>文本排列规则 <BR>估计你是用windows自带的notepad打开的,换个别的文本编辑软件,比如Ultraedit就可以了。没有必要去作mablab的有格式输出,因为前面给的程序只是个“复印”功能,而有限元输出的结果文件都是很整齐的。 </TD></TR></TABLE>
<HR width="80%" noShade SIZE=2>

<TABLE width="80%" border=0>

<TR>
<TD><B>回复: 回复: 关于matlab中的文件操作!</B></TD>
<TD align=right><a><B>Copy to clipboard</B></A></TD></TR>
<TR>
<TD colSpan=2><B>Posted by: </B>paolema<BR><B>Posted on: </B>2004-05-24 15:06<BR><BR>没有必要去作mablab的有格式输出,因为前面给的程序只是个“复印”功能,而有限元输出的结果文件都是很整齐的。 </FONT></I><BR><BR><BR>可是经过我这么一折腾,就不整齐了。 <BR><BR>关于删除字母,我彻底明白了,谢谢编辑。 </TD></TR></TABLE>
<HR width="80%" noShade SIZE=2>

<TABLE width="80%" border=0>

<TR>
<TD><B>回复: 关于matlab中的文件操作!</B></TD>
<TD align=right><a><B>Copy to clipboard</B></A></TD></TR>
<TR>
<TD colSpan=2><B>Posted by: </B>paolema<BR><B>Posted on: </B>2004-05-24 15:21<BR><BR>我换了一个文本打开的软件,正如编辑所说的那样!! <BR>再一次感谢!也感谢okok给另外我们这个交流的平台。 <BR>老实说,这个问题,我昨天就已经闭门造车一整天了。 <BR>听君一席话,胜读十年书啊! <BR>我不得不感叹,网络,利用好了,真是好东西! </TD></TR></TABLE>
<HR width="80%" noShade SIZE=2>

<TABLE width="80%" border=0>

<TR>
<TD><B>回复: 关于matlab中的文件操作!</B></TD>
<TD align=right><a><B>Copy to clipboard</B></A></TD></TR>
<TR>
<TD colSpan=2><B>Posted by: </B>paolema<BR><B>Posted on: </B>2004-05-26 11:29<BR><BR>沿着hyperelastic 提供的函数,和思路 <BR>我编写了一个可以去掉空行,全部是空格的行,还有含有字母的行的函数 <BR>贴出来,大家看看。 <BR>function onlynumber(fname1,fname2) <BR>fid=fopen(fname1); <BR>fidnew = fopen(fname2,'w'); <BR>while feof(fid)==0 <BR>    tline = fgetl(fid); %将行读入tline中 <BR>    if ~ischar(tline), break, end <BR>    temp=abs(tline); <BR>    Nlength=length(tline); <BR>    %第一:首先判断是不是空行 <BR>    isemptyline=0; <BR>    if Nlength==0 <BR>        isemptyline=1; <BR>    end <BR>    %第二:判断是不是全是空格 <BR>    allspace=0; <BR>    isspace=0; <BR>    for i=1:Nlength <BR>        T=temp(i); <BR>        if T==32 <BR>            isspace=isspace+1; <BR>        end <BR>        if isspace==Nlength <BR>            allspace=1; <BR>            break <BR>        end <BR>    end <BR>    %第三:判断行中是不是有字母 <BR>    findalpha=0; <BR>    for j=1:Nlength <BR>        T=temp(j); <BR>        if ((T&gt;=65)&amp;(T&gt;=90))|((T&gt;=97)&amp;(T&gt;=122)) <BR>            findalpha=1; <BR>            break; <BR>        end <BR>    end <BR>    %将不是空行,不全是空格,没有字母的行输出到文件中 <BR>    if (~findalpha)&amp;(~allspace)&amp;(isemptyline==0) <BR>        fprintf(fidnew,tline); <BR>        fprintf(fidnew,'\n'); <BR>    end <BR>end <BR>fclose(fid); <BR>fclose(fidnew); </TD></TR></TABLE>
<HR width="80%" noShade SIZE=2>

<TABLE width="80%" border=0>

<TR>
<TD><B>回复: 关于matlab中的文件操作!</B></TD>
<TD align=right><a><B>Copy to clipboard</B></A></TD></TR>
<TR>
<TD colSpan=2><B>Posted by: </B>wanming<BR><B>Posted on: </B>2005-03-31 01:30<BR><BR>请问一下各位大大虾,如何使用LOAD命令把地震波的数据文件导入MATLAB程序当中!(请给出具体操作) 多谢! </TD></TR></TABLE>
回复
分享到:

使用道具 举报

 楼主| 发表于 2005-7-27 08:02 | 显示全部楼层
<TABLE width="80%" border=0>

<TR>
<TD><B>文件中的数据的读入和输出?</B></TD>
<TD align=right><a><B>Copy to clipboard</B></A></TD></TR>
<TR>
<TD colSpan=2><B>Posted by: </B>zhig6371<BR><B>Posted on: </B>2004-10-23 15:58<BR><BR>下边这个文件怎么操作啊 <BR><BR>第一行不要 <BR>想保存成下边这种输出格式的 <BR><BR>输出的文件的格式(text格式) <BR>11 1 11 1 3.318632870D+09 <BR>11 2 11 1 -1.431588951D+09 <BR>11 2 11 2 5.309564581D+09 <BR>11 3 11 3 4.463068789D+08 <BR>11 4 11 3 2.091820605D+08 <BR>11 4 11 4 1.270370282D+08 <BR>。。。。。。。。。。。。。。。。 <BR><BR>要读的文件的格式(text格式) <BR>DMIG KAAX 0 6 2 0 30 <BR>DMIG* KAAX 11 1 <BR>* 11 1 3.318632870D+09 <BR>DMIG* KAAX 11 2 <BR>* 11 1-1.431588951D+09 <BR>* 11 2 5.309564581D+09 <BR>DMIG* KAAX 11 3 <BR>* 11 3 4.463068789D+08 <BR>DMIG* KAAX 11 4 <BR>* 11 3 2.091820605D+08 <BR>* 11 4 1.270370282D+08 <BR>DMIG* KAAX 11 5 <BR>* 11 3 1.807809125D+07 <BR>* 11 4 4.562607035D+06 <BR>* 11 5 3.182159162D+07 <BR>DMIG* KAAX 11 6 <BR>* 11 1-3.418528434D+05 <BR>* 11 2-2.581130935D+05 <BR>* 11 6 5.496088578D+05 <BR>DMIG* KAAX 22 1 <BR>* 11 1-1.926670156D+09 <BR>* 11 2 1.279054797D+09 <BR>* 11 6 3.091393829D+05 <BR>* 22 1 6.641887858D+09 </TD></TR></TABLE>
<HR width="80%" noShade SIZE=2>

<TABLE width="80%" border=0>

<TR>
<TD><B>回复: 文件中的数据的读入和输出?</B></TD>
<TD align=right><a><B>Copy to clipboard</B></A></TD></TR>
<TR>
<TD colSpan=2><B>Posted by: </B>zhig6371<BR><B>Posted on: </B>2004-10-24 15:08<BR><BR>DMIG* KAAX 11 1 <BR>* 11 1 3.318632870D+09 <BR><BR>这是两行! <BR>我要把他写成 <BR>11 1 11 1 3.318632870D+09 <BR><BR>还有 <BR>DMIG* KAAX 11 5 <BR>* 11 3 1.807809125D+07 <BR>* 11 4 4.562607035D+06 <BR>* 11 5 3.182159162D+07 <BR>这是四行 <BR><BR>是要写成 <BR>11 5 11 3 1.807809125D+07 <BR>11 5 11 4 4.562607035D+06 <BR>11 5 11 5 3.182159162D+07 </TD></TR></TABLE>
<HR width="80%" noShade SIZE=2>

<TABLE width="80%" border=0>

<TR>
<TD><B>回复: 文件中的数据的读入和输出?</B></TD>
<TD align=right><a><B>Copy to clipboard</B></A></TD></TR>
<TR>
<TD colSpan=2><B>Posted by: </B>zhig6371<BR><B>Posted on: </B>2004-10-24 15:18<BR><BR>我只想删掉行里边的字符,dmig* kaax 行的数据要,并且保存后两个,和*的行重新构成一行,并且重新排列一下!并且dmig* kaax 行的数据总是重新行的前两个。 </TD></TR></TABLE>
<HR width="80%" noShade SIZE=2>

<TABLE width="80%" border=0>

<TR>
<TD><B>回复: 文件中的数据的读入和输出?</B></TD>
<TD align=right><a><B><FONT color=#0000cf>Copy to clipboard</FONT></B></A></TD></TR>
<TR>
<TD colSpan=2><B>Posted by: </B>hyperelastic<BR><B>Posted on: </B>2004-10-24 18:10<BR><BR>如果也在用matlab的话,可以用下面的程序来整理你的数据文件: <BR><B>使用方法: ttt(‘oldname.dat','newname.dat')</B> <BR>===================================== <BR>
  1. function ttt(fname1,fname2) <BR>% fname1: source file name; <BR>% fname2: destination file name; <BR>% sss : the particular string; <BR>sss = 'DMIG*'; <BR>fid=fopen(fname1); <BR>fidnew = fopen(fname2,'w'); <BR>while 1 <BR>    tline = fgetl(fid); <BR>    a = strfind(tline,sss); <BR>    if ~ischar(tline), break, end <BR>    if ~isempty(a) <BR>        [aux,b] = strtok(tline); <BR>        [aux,b] = strtok(b); <BR>    end <BR>    if isempty(a), <BR>        fprintf(fidnew,strrep(tline,'*',b)); <BR>        fprintf(fidnew,'\n');end <BR>end <BR>fclose(fid);fclose(fidnew); <BR>% end of function <BR>% @ HYPERELASTIC <BR>% First created in 2003-07-07 <BR>% Last revised in 2004-10-24
复制代码
</TD></TR></TABLE>
<HR width="80%" noShade SIZE=2>

<TABLE width="80%" border=0>

<TR>
<TD><B>回复: 文件中的数据的读入和输出?</B></TD>
<TD align=right><a><B>Copy to clipboard</B></A></TD></TR>
<TR>
<TD colSpan=2><B>Posted by: </B>zhig6371<BR><B>Posted on: </B>2004-10-25 12:47<BR><BR>&gt;&gt; ttt('shizijiabu1.dat','shizijiabu.dat') <BR>??? Undefined function or variable 'b'. <BR><BR>Error in ==&gt; d:\matlabwork\ttt.m <BR>On line 17 ==&gt; fprintf(fidnew,strrep(tline,'*',b)); </TD></TR></TABLE>
<HR width="80%" noShade SIZE=2>

<TABLE width="80%" border=0>

<TR>
<TD><B>回复: 文件中的数据的读入和输出?</B></TD>
<TD align=right><a><B>Copy to clipboard</B></A></TD></TR>
<TR>
<TD colSpan=2><B>Posted by: </B>zhig6371<BR><B>Posted on: </B>2004-10-25 14:32<BR><BR>谢谢你!刚开始给b赋值就可以了!! </TD></TR></TABLE>
<HR width="80%" noShade SIZE=2>

<TABLE width="80%" border=0>

<TR>
<TD><B>回复: 文件中的数据的读入和输出?</B></TD>
<TD align=right><a><B>Copy to clipboard</B></A></TD></TR>
<TR>
<TD colSpan=2><B>Posted by: </B>hyperelastic<BR><B>Posted on: </B>2004-10-25 14:33<BR><BR>程序是验证过了的,自己再琢磨琢磨。 <BR>把源数据文件中的DMIG KAAX 0 6 2 0 30先删掉,因为它和后面大部分的诸如DMIG* KAAX 11 5 的语句不一样。</TD></TR></TABLE>
发表于 2005-11-3 21:33 | 显示全部楼层
paolema的程序,我怎么用起来不大灵啊,特别是当第一行就是字母的时候,根本就去不掉。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-8 03:27 , Processed in 0.053083 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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