马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
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 ==> cat <BR>CAT arguments dimensions are not consistent. <BR><BR>Error in ==> C:\MATLAB6p5p1\toolbox\matlab\datatypes\cell2mat.m <BR>On line 88 ==> m = cat(1,m{:}); <BR><BR>Error in ==> C:\MATLAB6p5p1\work\test1.m <BR>On line 20 ==> 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>=65)&(T>=90))|((T>=97)&(T>=122)) <BR> findalpha=1; <BR> break; <BR> end <BR> end <BR> %将不是空行,不全是空格,没有字母的行输出到文件中 <BR> if (~findalpha)&(~allspace)&(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> |