找回密码
 注册
Simdroid-非首页
查看: 114|回复: 4

Matlab 文本文件跨行读取数据并保存为一新文件

[复制链接]
发表于 2011-1-17 02:12:22 | 显示全部楼层 |阅读模式 来自 辽宁大连
请教一个问题,我有一个数据文件,想跨行(每隔56行)读取其中的数据(也就是读取每一步的第一行数据)然后另外保存一个文件。请问如何处理?

下面是我的一个文件,但不能解决此问题

function dataout=dataread(filein,fileout,line)
fidin=fopen(filein,'r');
fidout=fopen(fileout,'w');
nline=4;
while ~feof(fidin) % 判断是否为文件末尾
    tline=fgetl(fidin); % 从文件读行
    nline=nline+56;
    if nline==line
        fprintf(fidout,'%s\n',tline);
        dataout=tline;
    end
end
fclose(fidin);
fclose(fidout);

数据文件见附件。数据文件格式如下:
Step: 1 -- StepInStep: 1
Element NO   Shear      Max. Principal Stress       Min. Principal Stress    X Displacement Y Displacement X Stress Y Stress ShearXY Defined Direction StressX Defined Direction StressY
44823 +6.267834E+000 +2.245420E+001 +9.918529E+000 +2.172119E+000 +4.172312E+000 +9.927624E+000 +2.244510E+001 -3.375355E-001 +2.244477E+001 +3.436076E-001
44824 +3.762848E+000 +1.767494E+001 +1.014924E+001 +2.166249E+000 +4.177538E+000 +1.072767E+001 +1.709651E+001 -2.004614E+000 +1.709457E+001 +2.007703E+000
44825 +1.520540E+000 +1.107283E+001 +8.031747E+000 +2.152855E+000 +4.177492E+000 +8.838231E+000 +1.026634E+001 +1.342448E+000 +1.026764E+001 -1.341755E+000
44826 +3.106459E+000 +1.678536E+001 +1.057244E+001 +2.137351E+000 +4.168683E+000 +1.139954E+001 +1.595826E+001 +2.110593E+000 +1.596031E+001 -2.108380E+000
44827 +1.898087E+000 +1.208295E+001 +8.286776E+000 +2.125059E+000 +4.162297E+000 +8.351341E+000 +1.201838E+001 +4.908511E-001 +1.201886E+001 -4.890720E-001
44828 +3.055173E+000 +1.696725E+001 +1.085690E+001 +2.114675E+000 +4.160532E+000 +1.086343E+001 +1.696073E+001 +1.995019E-001 +1.696092E+001 -1.965439E-001
......

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2011-1-17 08:31:06 | 显示全部楼层 来自 河北廊坊
Simdroid开发平台
  1. importdata(filename,' ',56)
复制代码
用这个试一试
回复 不支持

使用道具 举报

 楼主| 发表于 2011-1-17 09:34:29 | 显示全部楼层 来自 辽宁大连
试了,不行呀。
我需要的是上面数据文件中的第4行、第60行、第116行、第172行....一直到第1740行(行的增量为56,即每隔56行读取数据)
我用上面的那个函数dataread('Text.text', 'new.text', 1740)
结果读取的第31行的数据
>> dataread('Text.text','xu.text',1740)
ans =
44850 +1.861956E+000 +1.184861E+001 +8.124703E+000 +1.834925E+000 +4.175747E+000 +8.642744E+000 +1.133057E+001 -1.288709E+000 +1.132932E+001 +1.290012E+000
回复 不支持

使用道具 举报

发表于 2011-1-17 10:10:13 | 显示全部楼层 来自 河北廊坊
3# xukyle
应该仔细看看我的答复,在下结论,你都没有用我说的办法,……

  1. clear;clc;close all
  2. [FP{1:2}] = uigetfile('*.text','Select the Text file');
  3. headlers=3:56:1740;
  4. file=arrayfun(@(y)feval(@(x)x.data(1,:),importdata(fullfile(FP{[2 1]}),...
  5.     ' ',headlers(y))),1:length(headlers),'UniformOutput',0);
  6. data=cell2mat(file');
复制代码

评分

2

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-1-17 21:54:46 | 显示全部楼层 来自 辽宁大连
4# qibbxxt

qibbxxt  版主 你实在是太厉害了,佩服佩服!

通过你的简洁的语句让我进一步认识到matlab在数据处理等方面的强大之处。当然也让我认识到了向量函数的神奇功能。

thanks a lot!
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-5 03:31 , Processed in 0.033641 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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