geophysicswang
2010-12-01, 16:58
目的:读取一个文件
文件结构: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); %关闭文件
文件结构: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); %关闭文件