Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
初级会员
注册日期: 2010-12-01
帖子: 3
声望力: 0 ![]() |
![]()
目的:读取一个文件
文件结构:3200字节ASCII码(卷头)+400字节二进制(文件头)+60*4字节(二进制)(道头1)+采样点数*4字节(二进制)(数据1)+ 道头2+数据2……道头n+数据n【n道数据,采样率已知2毫秒,道数未知,每道样点数未知】 clc clear fopen C:\MATLAB7\work2\D0240_2_shot500IEEE.sgy 'r' 'n'; FID=ans 【这里出现问题1:FID= fopen(C:\MATLAB7\work2\D0240_2_shot500IEEE.sgy,'r','n');这样写居然不行,【不能是任意路径,不能有括号】 错误提示为:??? Error: File: C:\MATLAB7\work2\Untitled2.m Line: 4 Column: 16 Missing variable or function. 】 ns=3000 %每道样点数【问题2:如果每道样点数未知,有没有办法找出来。道数也未知】 total=60+ns; %每道所占四字节个数 frewind(FID); %把位置指针指向文件头 fseek(FID, 0, 'eof'); %值=0是不改变位置的意思啊,此时指针应该还在文件头吧???? position=ftell(FID); %ftell返回当前位置指针【这里得到总的字节数???】【程序在这里实际上是得到了整个文件的字节数,没看懂】【ftell是返回当前指针位置的意思吧??】 trace_num=(position-3600)/(total*4); %如果position是文件总的字节数,这里得到道数,无疑义 frewind(FID); %指针返回文件头 for k=1:trace_num %循环读取各道数据 position=3600+(total*(k-1)+60)*4; %第一道及第n道第一个数据的位置 status=fseek(FID,position,'bof'); %指针指向数据位置 if status==0 D(:,k)=fread(FID,ns,'float'); %读取,float代表32位浮点格式(4字节*8位) else return; end end fclose(FID); %关闭文件 |
![]() |
![]() |
![]() |
#2 |
初级会员
注册日期: 2010-12-01
帖子: 3
声望力: 0 ![]() |
![]()
问题1解决了,需要加引号,作为字符串引用
|
![]() |
![]() |
![]() |
#3 |
初级会员
注册日期: 2010-12-01
帖子: 3
声望力: 0 ![]() |
![]()
问题基本解决了。理解有问题
|
![]() |
![]() |