2026-04-10 06:38:45 +08:00
|
|
|
|
#pragma warning( push ,0)
|
|
|
|
|
|
#include"LisConvertor.h"
|
|
|
|
|
|
#include <QFileDialog>
|
|
|
|
|
|
#include <QTextStream>
|
|
|
|
|
|
|
|
|
|
|
|
#include "CStringType.h"
|
|
|
|
|
|
#include "MemRdWt.h"/*..\..\Slfio\*/
|
|
|
|
|
|
#include "BaseFun.h"
|
|
|
|
|
|
// #include "WellBaseInfo.h"
|
|
|
|
|
|
#include "DepthProgress.h"
|
|
|
|
|
|
#include "sub.h"
|
|
|
|
|
|
#include "qdir.h"
|
|
|
|
|
|
#define IREEL 0x0084
|
|
|
|
|
|
#define ITAPE 0x0082 //130
|
|
|
|
|
|
#define IFILE 0x0080 //128
|
|
|
|
|
|
#define IFORM 0x0040 //64
|
|
|
|
|
|
#define IDATA 0x0000
|
|
|
|
|
|
#define IFAIL 0x0081 //129
|
|
|
|
|
|
#define ITRAIL 0x0083 //131
|
|
|
|
|
|
#define IRAIL 0x0085 //133
|
|
|
|
|
|
#define ISL 0x42FF //17151
|
|
|
|
|
|
#define IDEP1 0x4954 //18772
|
|
|
|
|
|
#define IDEP2 0x454D // 17741
|
|
|
|
|
|
|
|
|
|
|
|
//20201216 GZL add
|
|
|
|
|
|
#define EACHCALNUM 1
|
|
|
|
|
|
//132 Vol.(REEL)_HEADER information
|
|
|
|
|
|
//133 Vol.(REEL)_TRAIL information
|
|
|
|
|
|
//130 TAPE_HEADER information
|
|
|
|
|
|
//131 TAPE_TRAIL information
|
|
|
|
|
|
//128 FILE_HEADER information
|
|
|
|
|
|
//129 FILE_TRAIL information
|
|
|
|
|
|
//232 COMMENT record information
|
|
|
|
|
|
//34 INFORMATION record information
|
|
|
|
|
|
//64 FORMAT SPECIFICATION record information
|
|
|
|
|
|
//0 data
|
|
|
|
|
|
float rlev,dep,sdep,edep;
|
|
|
|
|
|
char curvnms[3000][5],units[3000][5],depunit[5],levunit[5];
|
|
|
|
|
|
int ircodes[3000],npoints[3000],nsamps[3000],ipost[3000],iexst[3000],ndim[3000];
|
|
|
|
|
|
int ncurvs,lframe,nframe,modep;
|
|
|
|
|
|
FILE *fp;
|
|
|
|
|
|
int Numlog;
|
|
|
|
|
|
int skip,TapeRlev;
|
|
|
|
|
|
int neofbyte,ngapbyte;
|
|
|
|
|
|
unsigned char buff[400000];
|
|
|
|
|
|
float value[100000];
|
|
|
|
|
|
WELL_DYNAMIC_INFO *mWellDynamicInfo;
|
|
|
|
|
|
#pragma warning( pop)
|
|
|
|
|
|
BEGIN_OSGGRAPHICS_NAMESPACE;
|
|
|
|
|
|
#define GetLisConvertorTypeID() "{75B4CBA4-AF9D-4FEF-AA81-49CE697E158C}"
|
|
|
|
|
|
|
|
|
|
|
|
Slf_FILE_MESSAGE FILE_MESSAGE={};
|
|
|
|
|
|
|
|
|
|
|
|
BEGIN_REGISTER_ID_DESCRIPTION()
|
|
|
|
|
|
ID_ITEM_DATA(GetLisConvertorTypeID(),"LisConvertor")
|
|
|
|
|
|
END_REGISTER_ID_DESCRIPTION();
|
|
|
|
|
|
|
|
|
|
|
|
int intMax(int *arr, int arrnum){
|
|
|
|
|
|
int maxTemp = 0;
|
|
|
|
|
|
for(int i; i < arrnum; i++)
|
|
|
|
|
|
if (maxTemp < arr[i])
|
|
|
|
|
|
maxTemp = arr[i];
|
|
|
|
|
|
return maxTemp;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
template<typename T1, typename T2>
|
|
|
|
|
|
void removeRedunant(T1& r_v, const T2 Re_v)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(Re_v == 0) return;
|
|
|
|
|
|
bool isNeg = (r_v < 0) ? true : false;
|
|
|
|
|
|
r_v = float(int(abs(r_v) * Re_v + 0.5)) / Re_v;
|
|
|
|
|
|
r_v = (isNeg) ? -r_v : r_v;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
template<typename OT1, typename IT2>
|
|
|
|
|
|
bool cal_SaveNumInf(const OT1 outsdep,const OT1 outedep,const OT1 outrlev, OT1 eachStartDep,IT2& value2Index,IT2& realSaveNum,OT1& saveStartDep)
|
|
|
|
|
|
{
|
|
|
|
|
|
removeRedunant(eachStartDep, 1000);
|
|
|
|
|
|
|
|
|
|
|
|
if(eachStartDep >outsdep-outrlev && eachStartDep <outedep+outrlev) //处于输出范围内
|
|
|
|
|
|
{
|
|
|
|
|
|
const int temp_MaxSaveNum = abs((outedep - eachStartDep) / outrlev) + 1.5; //最大容纳点数
|
|
|
|
|
|
realSaveNum = (realSaveNum > temp_MaxSaveNum) ? temp_MaxSaveNum : realSaveNum; //本轮可容纳点数
|
|
|
|
|
|
value2Index = 0; //从起始位置即可
|
|
|
|
|
|
saveStartDep = eachStartDep;
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(eachStartDep < outsdep) //处于输出范围前侧
|
|
|
|
|
|
{
|
|
|
|
|
|
value2Index = abs((outsdep - eachStartDep) / outrlev); //范围内位置
|
|
|
|
|
|
|
|
|
|
|
|
if(value2Index <= realSaveNum) //包含有效数据
|
|
|
|
|
|
{
|
|
|
|
|
|
realSaveNum = realSaveNum - value2Index;
|
|
|
|
|
|
saveStartDep = outsdep;
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
else //不包含有效数据
|
|
|
|
|
|
{
|
|
|
|
|
|
realSaveNum = 0;
|
|
|
|
|
|
saveStartDep = outsdep;
|
|
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CLisConvertor::CLisConvertor()
|
|
|
|
|
|
{
|
|
|
|
|
|
m_thisModuleName="LisConvertor";
|
|
|
|
|
|
isSpLis = false;
|
|
|
|
|
|
m_CurveData.Curve_Num=0;
|
|
|
|
|
|
m_CurveData.Curve_Step=0.0;
|
|
|
|
|
|
m_CurveData.Curve_StartDepth=0.0;
|
|
|
|
|
|
m_CurveData.Curver_EndDepth=0.0;
|
|
|
|
|
|
m_CurveData.Curver_MaxDim=0;
|
|
|
|
|
|
InitFormatSuffixName();
|
|
|
|
|
|
}
|
|
|
|
|
|
CLisConvertor::~CLisConvertor()
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
QVector<QString> CLisConvertor::GetSupportFileExtensions()
|
|
|
|
|
|
{
|
|
|
|
|
|
return m_vFileFormatSuffixName;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CLisConvertor::InitFormatSuffixName()
|
|
|
|
|
|
{
|
|
|
|
|
|
m_vFileFormatSuffixName.clear();
|
|
|
|
|
|
m_vFileFormatSuffixName.push_back("lis");
|
|
|
|
|
|
m_vFileFormatSuffixName.push_back("dat");
|
|
|
|
|
|
m_vFileFormatSuffixName.push_back("nti");
|
|
|
|
|
|
QVector<QString> suffixname=InterIConvertor::GetSupportFileExtensions();
|
|
|
|
|
|
m_vFileFormatSuffixName+=suffixname;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int CLisConvertor::ScanLogFile(char *FileName,char *Message,char **CurveName,char **CurveUnit)
|
|
|
|
|
|
{
|
|
|
|
|
|
isSpLis = false;
|
|
|
|
|
|
char szTemp[128];
|
|
|
|
|
|
strcpy(szTemp, "[LIS]");
|
|
|
|
|
|
int pos1=GetBeginPosit(FileName,szTemp);
|
|
|
|
|
|
mWellDynamicInfo=&WellDynamicInfo;
|
|
|
|
|
|
if((fp=fopen(FileName,"rb"))==NULL) {
|
2026-04-15 10:16:43 +08:00
|
|
|
|
QMessageBox::information(NULL,FileName,"Open Not File:",QMessageBox::Ok);
|
2026-04-10 06:38:45 +08:00
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
char path[256];
|
|
|
|
|
|
//CString TempPath=GetBinDir(path);;
|
|
|
|
|
|
CString TempPath=GetLogdataPath();
|
|
|
|
|
|
TempPath=TempPath+"\\Temp";
|
|
|
|
|
|
|
|
|
|
|
|
QDir *temp=new QDir;
|
|
|
|
|
|
bool bWorking=temp->exists(TempPath.GetString());
|
|
|
|
|
|
if(!bWorking)
|
|
|
|
|
|
{
|
|
|
|
|
|
bWorking=temp->mkdir(TempPath.GetString());
|
|
|
|
|
|
CString aaa;
|
|
|
|
|
|
aaa.Format("创建临时文件路径%s失败",TempPath);
|
|
|
|
|
|
if(!bWorking)
|
|
|
|
|
|
{
|
|
|
|
|
|
AfxMessageBox(aaa);
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
delete temp;
|
|
|
|
|
|
CString te="\\";
|
|
|
|
|
|
TempPath+=te;
|
|
|
|
|
|
char filename[128];
|
|
|
|
|
|
sprintf(filename,"%stemp",TempPath.GetString());
|
|
|
|
|
|
//FILE *out;
|
|
|
|
|
|
//out=fopen(filename,"w+t");
|
|
|
|
|
|
int maxrl=8196 ;
|
|
|
|
|
|
float abstrv=-999.25;
|
|
|
|
|
|
|
|
|
|
|
|
char mbuf[5000];
|
|
|
|
|
|
//float value[100000];
|
|
|
|
|
|
int len=maxrl,idrt,lrtype;
|
|
|
|
|
|
//whp add 2019.8.6 for:后缀为dat的数据很多,首先根据LIS数据特征精确判断是否为LIS数据
|
|
|
|
|
|
QString ext;
|
|
|
|
|
|
ext=QString(QLatin1String(FileName));
|
|
|
|
|
|
ext=ext.toUpper();
|
|
|
|
|
|
if(ext.endsWith(".DAT"))
|
|
|
|
|
|
{
|
|
|
|
|
|
len=fread(buff,336,1,fp);
|
|
|
|
|
|
if(len<=0){
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
int i1=-1,i2=-1,i3=-1;
|
|
|
|
|
|
for(int i=0;i<336;i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(buff[i]=='\/')
|
|
|
|
|
|
{
|
|
|
|
|
|
i1=i;break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if(i1<30){
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
for(int i=0;i<336;i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(buff[i]>=48&&buff[i]<=57)
|
|
|
|
|
|
{
|
|
|
|
|
|
i2=i;break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if(i2<0){
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
for(int i=i1-30;i<336;i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(buff[i]==128)
|
|
|
|
|
|
{
|
|
|
|
|
|
i3=i;break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if(i3<0){
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
if(((buff[4] >= 65 && buff[4] <= 122) ||buff[4]==32) && ((buff[5] >= 65 && buff[5] <= 122)||buff[5]==32))
|
|
|
|
|
|
{
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
fseek(fp,0L,0);
|
|
|
|
|
|
}
|
|
|
|
|
|
BOOL HaveFileTailRec=0;//有的文件没有文件尾记录
|
|
|
|
|
|
//add end
|
|
|
|
|
|
int istat=fread(buff,len,1,fp);
|
|
|
|
|
|
for(int i=0;i<maxrl-5;i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
int lprl=buff[i]*256+buff[i+1];
|
|
|
|
|
|
int k=i+4;
|
|
|
|
|
|
lrcls(buff[k],&idrt,&lrtype);
|
|
|
|
|
|
if(lrtype==132||lrtype==130||lrtype==128)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(lprl<=maxrl&&lprl>0)
|
|
|
|
|
|
{
|
|
|
|
|
|
//特殊lis检查
|
|
|
|
|
|
int lrtypeSp;
|
|
|
|
|
|
lrcls(buff[k+2],&idrt,&lrtypeSp);
|
|
|
|
|
|
if(lrtype==128 && lrtypeSp == 128){
|
|
|
|
|
|
i+=2;
|
|
|
|
|
|
ngapbyteSpFirst = i;
|
|
|
|
|
|
isSpLis = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ngapbyte=i;
|
|
|
|
|
|
neofbyte=ngapbyte;
|
|
|
|
|
|
goto L10;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
L10:skip=0,TapeRlev=0;
|
|
|
|
|
|
if(neofbyte==22)//&&strstr(buff,"FORWARD TAPE IMAGE")) this is FORWARD TAPE IMAGE
|
|
|
|
|
|
{
|
|
|
|
|
|
TapeRlev=8;
|
|
|
|
|
|
skip=22-8;
|
|
|
|
|
|
ngapbyte=TapeRlev;
|
|
|
|
|
|
}
|
|
|
|
|
|
//for 进度条
|
|
|
|
|
|
fseek(fp,0,SEEK_END);
|
|
|
|
|
|
DWORD fl=ftell(fp);
|
|
|
|
|
|
DWORD FileLength=fl;
|
|
|
|
|
|
//MyDepthProgress.CreatProgress(0,fl/100000,"扫描LIS格式文件");
|
|
|
|
|
|
|
|
|
|
|
|
if(m_pDepthProgress) m_pDepthProgress->SetShowName("格式类型:LIS",0);
|
|
|
|
|
|
if(m_pDepthProgress) {
|
|
|
|
|
|
m_pDepthProgress->CreatProgress(0,100,"信息提取..",1);//m_pDepthProgress->CreatProgress(0,fl,"信息提取..",1);
|
|
|
|
|
|
m_pDepthProgress->SetDepth(0,1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fseek(fp,skip,0);//跳过字节数,如forward下载的lis文件就有22个字符的说明信息
|
|
|
|
|
|
int ntbyte=0;
|
|
|
|
|
|
int lrtype0=-99;
|
|
|
|
|
|
int nlr=0;
|
|
|
|
|
|
int nfile=0;
|
|
|
|
|
|
// read a logical record (many physical record).
|
|
|
|
|
|
int lbuff,istats,nbyte;
|
|
|
|
|
|
float rlevfc,depfc,rlevd,vsdep,vedep;
|
|
|
|
|
|
int ifged=0,ifgst=0,irec=0,nlrdat=0;
|
|
|
|
|
|
CString str;
|
|
|
|
|
|
strcpy(Message,"\r\n---------------------SCHLUMBERGER LIS 格式文件信息---------------------------\r\n");
|
|
|
|
|
|
ncurvs=0;
|
|
|
|
|
|
int rec=0;
|
|
|
|
|
|
while(1)
|
|
|
|
|
|
{
|
|
|
|
|
|
rec++;
|
|
|
|
|
|
int f=ftell(fp);
|
|
|
|
|
|
if(f<0) break;
|
|
|
|
|
|
rdbuf(fp,buff,&lbuff,&lrtype,&istats,maxrl,&nbyte,ngapbyte);
|
|
|
|
|
|
|
|
|
|
|
|
//20210115 GZL ADD
|
|
|
|
|
|
if(isSpLis)ngapbyte=8;
|
|
|
|
|
|
int percent=(float)f*100./(float)FileLength;
|
|
|
|
|
|
if(m_pDepthProgress)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!(m_pDepthProgress->SetDepth(percent,1))) {
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
return -1;//if(!(m_pDepthProgress->SetDepth(f,1))) return -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if(istats<=0)break;
|
|
|
|
|
|
if(lrtype!=lrtype0)
|
|
|
|
|
|
{
|
|
|
|
|
|
//str.Format("lbuff,lrtype,nrecs=%d,%d,%d\r\n",lbuff,lrtype,nlr);
|
|
|
|
|
|
//sprintf(Message,"%s%s",Message,str);
|
|
|
|
|
|
//AfxMessageBox(str);
|
|
|
|
|
|
str="";
|
|
|
|
|
|
}
|
|
|
|
|
|
lrtype0=lrtype;
|
|
|
|
|
|
// write vol.(reel)_header information.
|
|
|
|
|
|
if(lrtype==132)
|
|
|
|
|
|
{
|
|
|
|
|
|
str=reelhd((char *)buff);
|
|
|
|
|
|
}
|
|
|
|
|
|
// write vol.(reel)_trail information.
|
|
|
|
|
|
else if(lrtype==133)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
strncpy(mbuf,(char *)&buff[2],lbuff-3+1);
|
|
|
|
|
|
mbuf[lbuff-3+1]=0;
|
|
|
|
|
|
str.Format("*** reel trail *** %s",mbuf);
|
|
|
|
|
|
// skip vol.(reel) trail bytes (2 eof)
|
|
|
|
|
|
len=neofbyte*2;
|
|
|
|
|
|
if(len>0)
|
|
|
|
|
|
{
|
|
|
|
|
|
istat=fread(buff,len,1,fp);
|
|
|
|
|
|
if(istat<=0) break;
|
|
|
|
|
|
}
|
|
|
|
|
|
ntbyte=ntbyte+neofbyte*2;
|
|
|
|
|
|
sprintf(mbuf,"ntbytes = %d\r\n two eof \r\n",ntbyte);
|
|
|
|
|
|
str+=CharToCstring(mbuf,strlen(mbuf));
|
|
|
|
|
|
}
|
|
|
|
|
|
// write tape_header information.
|
|
|
|
|
|
else if(lrtype==130)
|
|
|
|
|
|
{
|
|
|
|
|
|
str=tapehd((char *)buff);
|
|
|
|
|
|
// skip eof(file end) bytes(a eof).
|
|
|
|
|
|
len=neofbyte;
|
|
|
|
|
|
if(len>0) {
|
|
|
|
|
|
istat=fread(buff,len,1,fp);
|
|
|
|
|
|
if(istat<=0)break;
|
|
|
|
|
|
}
|
|
|
|
|
|
ntbyte=ntbyte+neofbyte;
|
|
|
|
|
|
str.Format(str.GetString(),"ntbytes = %d\r\n a eof \r\n",str,ntbyte);
|
|
|
|
|
|
}
|
|
|
|
|
|
// write tape_trail information.
|
|
|
|
|
|
else if(lrtype==131)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
strncpy(mbuf,(char *)&buff[2],lbuff-3+1);
|
|
|
|
|
|
mbuf[lbuff-3+1]=0;
|
|
|
|
|
|
str.Format("*** tape trail *** %s\r\n",mbuf);
|
|
|
|
|
|
}
|
|
|
|
|
|
// write file_header information.
|
|
|
|
|
|
else if(lrtype==128)
|
|
|
|
|
|
{
|
|
|
|
|
|
nfile=nfile+1;
|
|
|
|
|
|
str.Format("\r\n *** file number:%d\r\n",nfile);
|
|
|
|
|
|
str+=CString("\r\n *** file header ***\r\n\r\n-----------------------------------\r\n")+filehd((char *)buff,&maxrl);
|
|
|
|
|
|
// str.Format("%s maxrl=%d\r\n",str,maxrl) ;
|
|
|
|
|
|
// AfxMessageBox(str);
|
|
|
|
|
|
}
|
|
|
|
|
|
// write file_trail information.
|
|
|
|
|
|
else if(lrtype==129)
|
|
|
|
|
|
{
|
|
|
|
|
|
HaveFileTailRec=1;
|
|
|
|
|
|
rlev=rlev*rlevfc;
|
|
|
|
|
|
rlevd=(vedep-vsdep)/float(ifged-ifgst);
|
|
|
|
|
|
if(fabs(rlev-rlevd)>0.0001&&fabs(rlev)<0.0001)
|
|
|
|
|
|
{
|
|
|
|
|
|
rlev=rlevd;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//20220815
|
|
|
|
|
|
if(rlev<0)
|
|
|
|
|
|
rlev=float(int((rlevd-0.000005)*100000))/100000;
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
float temp_rlev = float(int((rlevd+0.000005)*100000))/100000;
|
|
|
|
|
|
if(temp_rlev != float(int(rlevd*100000)/100000) && temp_rlev > rlev)
|
|
|
|
|
|
{
|
|
|
|
|
|
rlev = temp_rlev;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//3???modep=0时,space没赋值,rlev就不能满足条件if(fabs(rlev-rlevd)>0.0001&&fabs(rlev)<0.0001),所以得到的rlev值是不正确的
|
|
|
|
|
|
//whp add
|
|
|
|
|
|
if(modep==0&&rlev<-9999)
|
|
|
|
|
|
{
|
|
|
|
|
|
rlev=rlevd;
|
|
|
|
|
|
float del=fabs(fabs(rlev)-0.1);
|
|
|
|
|
|
if(del<0.001)rlev=0.1;
|
|
|
|
|
|
}//add end
|
|
|
|
|
|
sdep=vsdep;
|
|
|
|
|
|
edep=vedep;
|
|
|
|
|
|
// str.Format(("irec,nlrdat=%d %d\r\nvsdep,vedep=%f% f\r\nifgst,ifged=%d %d\r\nsdep,edep,rlev=%f %f %f\r\n"),irec,nlrdat,vsdep,vedep,ifgst,ifged,sdep,edep,rlev);
|
|
|
|
|
|
|
|
|
|
|
|
strncpy(mbuf,(char *)&buff[2],lbuff-3+1);
|
|
|
|
|
|
|
|
|
|
|
|
str+=CString("\r\n\r\n*** file trail ***\r\n\r\n----------------------------------\r\n");
|
|
|
|
|
|
str+=filehd((char *)buff,&maxrl);
|
|
|
|
|
|
// skip eof (file end) bytes(a eof).
|
|
|
|
|
|
len=neofbyte;
|
|
|
|
|
|
if(len>0)
|
|
|
|
|
|
{
|
|
|
|
|
|
istat=fread(buff,len,1,fp);
|
|
|
|
|
|
if(istat<=0)break;
|
|
|
|
|
|
}
|
|
|
|
|
|
ntbyte=ntbyte+neofbyte;
|
|
|
|
|
|
str+=CString("\r\na eof !\r\na eof !\r\n");
|
|
|
|
|
|
}
|
|
|
|
|
|
// write comment record information.
|
|
|
|
|
|
else if(lrtype==232)
|
|
|
|
|
|
{
|
|
|
|
|
|
//strncpy(mbuf,(char *)&buff[2],lbuff-3+1);
|
|
|
|
|
|
//str.Format("*** comment: ***%s",mbuf);
|
|
|
|
|
|
}
|
|
|
|
|
|
// write information record information.
|
|
|
|
|
|
else if(lrtype==34)
|
|
|
|
|
|
{
|
|
|
|
|
|
//iswinft=1;
|
|
|
|
|
|
// infrec(nu,buff,lbuff,iswinft);
|
|
|
|
|
|
str=infrec((char *)buff,lbuff,0);
|
|
|
|
|
|
str="";
|
|
|
|
|
|
}
|
|
|
|
|
|
// write format specification record information.
|
|
|
|
|
|
else if(lrtype==64)
|
|
|
|
|
|
{
|
|
|
|
|
|
str=formsp((char*)buff,lbuff,1);
|
|
|
|
|
|
depfc=unitfactor(depunit,4);
|
|
|
|
|
|
rlevfc=unitfactor(levunit,4);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(lrtype==0)
|
|
|
|
|
|
{
|
|
|
|
|
|
nlrdat=nlrdat+1;
|
|
|
|
|
|
int nfrm=(lbuff-2)/lframe;
|
|
|
|
|
|
if(nfrm!=nframe)
|
|
|
|
|
|
{
|
|
|
|
|
|
nframe=nfrm;
|
|
|
|
|
|
CString ss;
|
|
|
|
|
|
ss.Format(("nrecs,lbuff,nframe=%d %d %d\r\n"),lrtype,lbuff-2,nframe);
|
|
|
|
|
|
str+=ss;
|
|
|
|
|
|
}
|
|
|
|
|
|
else str="";
|
|
|
|
|
|
float dep0;//whp add
|
|
|
|
|
|
for(int i=0;i<nframe;i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(modep==1) //无深度曲线
|
|
|
|
|
|
{
|
|
|
|
|
|
int ips=3;
|
|
|
|
|
|
int nsamp=1;
|
|
|
|
|
|
int icode=ircodes[ncurvs];
|
|
|
|
|
|
convrt(&value[0],(unsigned char *)buff,lbuff,ips,icode,nsamp);
|
|
|
|
|
|
dep=value[0]*depfc+rlev*(i)*rlevfc;
|
|
|
|
|
|
}
|
|
|
|
|
|
else //有深度曲线
|
|
|
|
|
|
{
|
|
|
|
|
|
int ips=2+ipost[ncurvs]+i*lframe;
|
|
|
|
|
|
int nsamp=1;
|
|
|
|
|
|
int icode=ircodes[ncurvs] ;
|
|
|
|
|
|
convrt(&value[0],(unsigned char *)buff,lbuff,ips,icode,nsamp);
|
|
|
|
|
|
dep=value[0]*depfc ;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
irec=irec+1;
|
|
|
|
|
|
if(abs(dep+abstrv)>0.01&&ifgst==0&&fabs(dep+9999.)>0.01)
|
|
|
|
|
|
{
|
|
|
|
|
|
ifgst=irec;
|
|
|
|
|
|
vsdep=dep;
|
|
|
|
|
|
if(irec!=1)
|
|
|
|
|
|
{
|
|
|
|
|
|
CString ss;
|
|
|
|
|
|
ss.Format("irec=%d,warning! depth track value error.",irec);
|
|
|
|
|
|
AfxMessageBox(ss);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if(abs(dep+abstrv)>0.01&&abs(dep+9999.)>0.01)
|
|
|
|
|
|
{
|
|
|
|
|
|
ifged=irec ;
|
|
|
|
|
|
vedep=dep;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
sprintf(Message,"%s%s",Message,str.GetString());
|
|
|
|
|
|
}
|
|
|
|
|
|
Numlog=ncurvs;//+1;
|
|
|
|
|
|
sprintf(&Message[strlen(Message)],"\r\n曲线条数:%d\r\n\r\n起始深度:%g 终止深度:%g \r\n采样间隔:%g\r\n\r\n",Numlog,sdep,edep,rlev);
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
//whp add 2019.8.8 for 有的文件没有文件尾记录
|
|
|
|
|
|
if(HaveFileTailRec==0)//如果没有文件尾记录
|
|
|
|
|
|
{
|
|
|
|
|
|
AfxMessageBox("该文件没有文件尾记录");
|
|
|
|
|
|
rlev=rlev*rlevfc;
|
|
|
|
|
|
rlevd=(vedep-vsdep)/float(ifged-ifgst);
|
|
|
|
|
|
double gg=fabs(rlev-rlevd);
|
|
|
|
|
|
if(fabs(rlev-rlevd)>0.0000000001&&fabs(rlev)<0.1)
|
|
|
|
|
|
{
|
|
|
|
|
|
rlev=rlevd;
|
|
|
|
|
|
}
|
|
|
|
|
|
//20210115 GZL ADD
|
|
|
|
|
|
if(1)
|
|
|
|
|
|
if(rlev<0)
|
|
|
|
|
|
rlev=float(int((rlevd-0.000005)*100000))/100000;
|
|
|
|
|
|
else
|
|
|
|
|
|
rlev=float(int((rlevd+0.000005)*100000))/100000;
|
|
|
|
|
|
|
|
|
|
|
|
//modep=0时,space没赋值,rlev就不能满足条件if(fabs(rlev-rlevd)>0.0001&&fabs(rlev)<0.0001),所以得到的rlev值是不正确的
|
|
|
|
|
|
if(modep==0&&rlev<-9999)
|
|
|
|
|
|
{
|
|
|
|
|
|
rlev=rlevd;
|
|
|
|
|
|
float del=fabs(fabs(rlev)-0.1);
|
|
|
|
|
|
if(del<0.001)rlev=0.1;
|
|
|
|
|
|
}
|
|
|
|
|
|
sdep=vsdep;
|
|
|
|
|
|
edep=vedep;
|
|
|
|
|
|
if(sdep>edep)
|
|
|
|
|
|
{
|
|
|
|
|
|
float temp=sdep;
|
|
|
|
|
|
sdep=edep;
|
|
|
|
|
|
edep=temp;
|
|
|
|
|
|
}
|
|
|
|
|
|
str.Format(("\r\n\r\n曲线条数=%d\r\n起始深度:%g 终止深度:%g \r\n采样间隔:%g\r\n\r\n"),ncurvs,sdep,edep,rlev);
|
|
|
|
|
|
str+="\r\na eof !\r\na eof !\r\n";
|
|
|
|
|
|
sprintf(Message,"%s%s",Message,str.GetString());
|
|
|
|
|
|
for(int i=0;i<ncurvs;i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
strcpy(CurveName[Numlog+i],curvnms[i]);
|
|
|
|
|
|
strcpy(CurveUnit[Numlog+i],units[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
//add end
|
|
|
|
|
|
//调用该函数,向解编信息中压入深度信息
|
|
|
|
|
|
|
|
|
|
|
|
for(int i=0;i<Numlog;i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
strcpy(CurveName[i],curvnms[i]);
|
|
|
|
|
|
strcpy(CurveUnit[i],units[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
if(sdep>edep)
|
|
|
|
|
|
{
|
|
|
|
|
|
float temp=sdep;
|
|
|
|
|
|
sdep=edep;
|
|
|
|
|
|
edep=temp;
|
|
|
|
|
|
rlev=-1*fabs(rlev);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
PutScanDepthMes(Message,sdep,edep);
|
|
|
|
|
|
//fclose(out);
|
|
|
|
|
|
return Numlog;
|
|
|
|
|
|
}
|
|
|
|
|
|
bool CLisConvertor::Transfer(char *FileName,char *outfile,int *OutCurveNo,char **OutCurve,char **strChineseName,char **strUnit,int dCurveNum)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(HaveSameCurve(Numlog,OutCurveNo,OutCurve))
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
|
|
removeRedunant(rlev, int(10000));
|
|
|
|
|
|
|
|
|
|
|
|
float xCoord = 0, yCoord = 0, outsdep = -99999, outedep = -99999, outrlev = rlev;
|
|
|
|
|
|
char *p;
|
|
|
|
|
|
p = outfile;
|
|
|
|
|
|
int len = strlen(p) + 1;
|
|
|
|
|
|
p += len;
|
|
|
|
|
|
GetTranMes(p, &xCoord, &yCoord, &outsdep, &outedep);
|
|
|
|
|
|
|
|
|
|
|
|
outsdep = (outsdep == -99999.) ? sdep : outsdep;
|
|
|
|
|
|
outedep = (outedep == -99999.) ? edep : outedep;
|
|
|
|
|
|
if(outsdep > outedep)
|
|
|
|
|
|
{
|
|
|
|
|
|
swap(outsdep, outedep);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CMemRdWt m_SlfFile(outfile);
|
|
|
|
|
|
if(m_SlfFile.mFile == NULL) return 0;
|
|
|
|
|
|
|
|
|
|
|
|
Slf_CURVE myCurve;
|
|
|
|
|
|
Slf_WAVE myWave;
|
|
|
|
|
|
Slf_CHANNEL m_Channel;
|
|
|
|
|
|
Slf_WAVE **tslfwave = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
if(xCoord != -99999 && yCoord != -99999)
|
|
|
|
|
|
{
|
|
|
|
|
|
char buf[256];
|
|
|
|
|
|
QString strWellInfo= "井基本信息";
|
|
|
|
|
|
strcpy(buf, strWellInfo.toLocal8Bit().data());
|
|
|
|
|
|
int index = m_SlfFile.FindObjectIndex(buf);
|
|
|
|
|
|
int indexSTable = m_SlfFile.OpenSTATIC(buf);
|
|
|
|
|
|
|
|
|
|
|
|
m_SlfFile.WriteTable(indexSTable, 1, &WellStaticInfo);
|
|
|
|
|
|
m_SlfFile.CloseTable(indexSTable);
|
|
|
|
|
|
int indexDTable=m_SlfFile.OpenDYNAMIC(buf);
|
|
|
|
|
|
m_SlfFile.WriteTable(indexDTable, 1, &WellDynamicInfo);
|
|
|
|
|
|
m_SlfFile.CloseTable(indexDTable);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int pointnum = 0;
|
|
|
|
|
|
|
|
|
|
|
|
for(int i = 0; i < ncurvs; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(OutCurveNo[i] > -1)
|
|
|
|
|
|
{
|
|
|
|
|
|
#pragma region 获取name
|
|
|
|
|
|
char name[20];
|
|
|
|
|
|
strncpy(name, OutCurve[i], 16);
|
|
|
|
|
|
for(int ij = 1; ij < 16; ij++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(name[ij] == ' ')
|
|
|
|
|
|
name[ij] = '\0';
|
|
|
|
|
|
else
|
|
|
|
|
|
name[ij] = toupper(name[ij]);
|
|
|
|
|
|
}
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
|
|
|
|
|
|
#pragma region 初始化曲线进slf
|
|
|
|
|
|
if(ndim[i] <= 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
int index = m_SlfFile.OpenCurve(name);
|
|
|
|
|
|
if(index < 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
strcpy(myCurve.Name,name);
|
|
|
|
|
|
strcpy(myCurve.AliasName,strChineseName[i]);
|
|
|
|
|
|
strcpy(myCurve.Unit,strUnit[i]);
|
|
|
|
|
|
strcpy(myCurve.AliasUnit,strUnit[i]);
|
|
|
|
|
|
|
|
|
|
|
|
if(ircodes[i]==79) myCurve.RepCode=REPR_SHORT;
|
|
|
|
|
|
else if(ircodes[i]==73) myCurve.RepCode=REPR_INT;
|
|
|
|
|
|
else myCurve.RepCode=REPR_FLOAT;
|
|
|
|
|
|
|
|
|
|
|
|
myCurve.CodeLen=RepSize[myCurve.RepCode];
|
|
|
|
|
|
myCurve.MinValue=99999.0;
|
|
|
|
|
|
myCurve.MaxValue=-99999.0;
|
|
|
|
|
|
myCurve.DefVal=-9999;
|
|
|
|
|
|
myCurve.StartDepth=outsdep;
|
|
|
|
|
|
myCurve.EndDepth =outedep;
|
|
|
|
|
|
myCurve.DepLevel =fabs(rlev)/npoints[i];
|
|
|
|
|
|
strcpy(myCurve.DepthUnit,"m");
|
|
|
|
|
|
|
|
|
|
|
|
OutCurveNo[i] = m_SlfFile.OpenCurve((Slf_CURVE *)&myCurve);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
OutCurveNo[i] = m_SlfFile.OpenCurve(name);
|
|
|
|
|
|
|
|
|
|
|
|
//pointnum 所需数据点个数
|
|
|
|
|
|
pointnum = (myCurve.EndDepth - myCurve.StartDepth) / myCurve.DepLevel + 1.5;
|
|
|
|
|
|
|
|
|
|
|
|
//仅为该曲线开空间 --> curvebuf
|
|
|
|
|
|
char *curvebuf = new char[myCurve.CodeLen * pointnum + 1];
|
|
|
|
|
|
memset(curvebuf, 0, myCurve.CodeLen * pointnum);
|
|
|
|
|
|
|
|
|
|
|
|
//先写假cur值0
|
|
|
|
|
|
if(OutCurveNo[i] > -1)
|
|
|
|
|
|
m_SlfFile.WriteCurve(OutCurveNo[i], outsdep, pointnum, (void *)curvebuf);
|
|
|
|
|
|
|
|
|
|
|
|
delete curvebuf;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
else //ndim > 1
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!tslfwave) {
|
|
|
|
|
|
tslfwave=new Slf_WAVE*[ncurvs];
|
|
|
|
|
|
for(int k=0;k<ncurvs;k++) tslfwave[k]=NULL;
|
|
|
|
|
|
}
|
|
|
|
|
|
tslfwave[i]=new Slf_WAVE;
|
|
|
|
|
|
memset(tslfwave[i],0,sizeof(Slf_WAVE));
|
|
|
|
|
|
int index = m_SlfFile.OpenWave(name);
|
|
|
|
|
|
if(index < 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
strcpy(myWave.Name,name);
|
|
|
|
|
|
strcpy(myWave.AliasName,strChineseName[i]);
|
|
|
|
|
|
strcpy(myWave.Unit,strUnit[i]);
|
|
|
|
|
|
strcpy(myWave.AliasUnit,strUnit[i]);
|
|
|
|
|
|
myWave.CodeLen=lbytes(ircodes[i]);
|
|
|
|
|
|
|
|
|
|
|
|
if(ircodes[i]==79) myWave.RepCode=REPR_SHORT;
|
|
|
|
|
|
else if(ircodes[i]==73) myWave.RepCode=REPR_INT;
|
|
|
|
|
|
else myWave.RepCode=REPR_FLOAT;
|
|
|
|
|
|
|
|
|
|
|
|
myWave.MinValue=99999.0;
|
|
|
|
|
|
myWave.MaxValue=-99999.0;
|
|
|
|
|
|
myWave.DefVal=-9999;
|
|
|
|
|
|
myWave.StartDepth= outsdep;
|
|
|
|
|
|
myWave.EndDepth = outedep;
|
|
|
|
|
|
myWave.DepLevel = fabs(rlev) / (npoints[i] / ndim[i]);
|
|
|
|
|
|
strcpy(myWave.DepthUnit,"m");
|
|
|
|
|
|
myWave.StartTime=0;//从哪儿得到该信息?
|
|
|
|
|
|
myWave.TimeLevel=2;
|
|
|
|
|
|
myWave.TimeSamples=ndim[i];
|
|
|
|
|
|
strcpy(myWave.TimeUnit,"us");
|
|
|
|
|
|
|
|
|
|
|
|
OutCurveNo[i] = m_SlfFile.OpenWave((Slf_WAVE *)&myWave);
|
|
|
|
|
|
|
|
|
|
|
|
pointnum = (myWave.EndDepth - myWave.StartDepth) / myWave.DepLevel + 1.5;
|
|
|
|
|
|
memmove(tslfwave[i],&myWave,sizeof(Slf_WAVE));
|
|
|
|
|
|
char *curvebuf = new char[myWave.CodeLen * myWave.TimeSamples * pointnum + 1];
|
|
|
|
|
|
memset(curvebuf, 0, myWave.CodeLen * myWave.TimeSamples * pointnum);
|
|
|
|
|
|
if(OutCurveNo[i] > -1)
|
|
|
|
|
|
m_SlfFile.WriteWave(OutCurveNo[i], outsdep, pointnum, (void *)curvebuf);
|
|
|
|
|
|
|
|
|
|
|
|
delete curvebuf;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
OutCurveNo[i] = m_SlfFile.OpenWave(name);
|
|
|
|
|
|
}
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//char cchans[10000],tcurvnm[48];
|
|
|
|
|
|
char mbuf[5000];
|
|
|
|
|
|
// idir=0 orgin depth direction(decoded data depth)
|
|
|
|
|
|
// =1 up[small] - bottom[large] [depth]
|
|
|
|
|
|
//float sdepob[40],edepob[40],rlevob[40],nchans[40],lchanv[1000];
|
|
|
|
|
|
//int norg[1000],ncopy[1000],
|
|
|
|
|
|
int nele[6], lrecf[40], npfrmob[40];
|
|
|
|
|
|
float rlevfc,depfc,rlevd,vsdep,vedep;
|
|
|
|
|
|
//unsigned char buff[40000];
|
|
|
|
|
|
//float value[100000];
|
|
|
|
|
|
int idrt,lrtype,lbuff,istats,nbyte;;
|
|
|
|
|
|
int istat;
|
|
|
|
|
|
int idir=1;
|
|
|
|
|
|
int maxrl=1024;
|
|
|
|
|
|
float abstrv=-999.25;
|
|
|
|
|
|
int maxcurv=100;
|
|
|
|
|
|
// format spcification number
|
|
|
|
|
|
int nfmsp=0 ,nfrmob;
|
2026-04-15 10:16:43 +08:00
|
|
|
|
|
2026-04-10 06:38:45 +08:00
|
|
|
|
if((fp=fopen(FileName,"rb")) == NULL) {
|
2026-04-15 10:16:43 +08:00
|
|
|
|
QMessageBox::information(NULL,FileName,"Open Not File:",QMessageBox::Ok);
|
2026-04-10 06:38:45 +08:00
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
char path[256];
|
|
|
|
|
|
|
|
|
|
|
|
//CString TempPath=GetBinDir(path);
|
|
|
|
|
|
CString TempPath = GetLogdataPath();
|
|
|
|
|
|
TempPath = TempPath+"Temp";
|
|
|
|
|
|
QDir *temp=new QDir;
|
|
|
|
|
|
bool bWorking=temp->exists(TempPath.GetString());
|
|
|
|
|
|
if(!bWorking)
|
|
|
|
|
|
{
|
|
|
|
|
|
bWorking=temp->mkdir(TempPath.GetString());
|
|
|
|
|
|
CString aaa;
|
|
|
|
|
|
aaa.Format("创建临时文件路径%s失败",TempPath);
|
|
|
|
|
|
if(!bWorking)
|
|
|
|
|
|
{
|
|
|
|
|
|
AfxMessageBox(aaa);
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
delete temp;
|
|
|
|
|
|
TempPath+=CString("\\");
|
|
|
|
|
|
char filename[128];
|
|
|
|
|
|
sprintf(filename,"%slistraninfo.txt",TempPath.GetString());
|
|
|
|
|
|
// FILE *out;
|
|
|
|
|
|
// out=fopen(filename,"w+t");
|
|
|
|
|
|
int ntbyte=0;
|
|
|
|
|
|
int lrtype0=-99;
|
|
|
|
|
|
int nlr=0;
|
|
|
|
|
|
int nlrdat=0;
|
|
|
|
|
|
int irec=0;
|
|
|
|
|
|
int ifgst=0;
|
|
|
|
|
|
int ifged=0;
|
|
|
|
|
|
int ipfile=0;
|
|
|
|
|
|
int iprdfl=1;
|
|
|
|
|
|
fseek(fp, skip, 0);//跳过字节数,如forward下载的lis文件就有22个字符的说明信息
|
|
|
|
|
|
// CString str;
|
|
|
|
|
|
|
|
|
|
|
|
//当前仅适用于处理常规曲线
|
|
|
|
|
|
float **value2 = new float*[ncurvs];
|
|
|
|
|
|
for(int value2ColNum = 0; value2ColNum < ncurvs; value2ColNum++){
|
|
|
|
|
|
if(OutCurveNo[value2ColNum]>-1)
|
|
|
|
|
|
{
|
|
|
|
|
|
value2[value2ColNum] = new float [EACHCALNUM * npoints[value2ColNum] * 2+1000];
|
|
|
|
|
|
memset(value2[value2ColNum],0,EACHCALNUM * npoints[value2ColNum] * 2*sizeof(float));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
char **value2forWave = new char*[ncurvs];
|
|
|
|
|
|
for(int value2ColNum = 0; value2ColNum < ncurvs; value2ColNum++){
|
|
|
|
|
|
if(ndim[value2ColNum] > 1&&OutCurveNo[value2ColNum]>-1)
|
|
|
|
|
|
{
|
|
|
|
|
|
value2forWave[value2ColNum] = new char [tslfwave[value2ColNum]->CodeLen * EACHCALNUM * (npoints[value2ColNum] + 1)];
|
|
|
|
|
|
memset(value2forWave[value2ColNum],0,tslfwave[value2ColNum]->CodeLen * EACHCALNUM * (npoints[value2ColNum] + 1));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
int *eachCurdataNum = new int[ncurvs]; //记录每轮各个曲线保存在value2中的数值个数
|
|
|
|
|
|
for(int i = 0; i < ncurvs; i++){
|
|
|
|
|
|
eachCurdataNum[i] = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
float firstDep;
|
|
|
|
|
|
float eachStartDep;
|
|
|
|
|
|
float lastStartDep;
|
|
|
|
|
|
int rNum = 0;
|
|
|
|
|
|
|
|
|
|
|
|
DepthProgress MyDepthProgress;
|
|
|
|
|
|
MyDepthProgress.CreatProgress(outsdep,outedep,"解编LIS数据");
|
|
|
|
|
|
|
|
|
|
|
|
if(isSpLis)ngapbyte = ngapbyteSpFirst;
|
|
|
|
|
|
int nn=0;
|
|
|
|
|
|
while(1)
|
|
|
|
|
|
{
|
|
|
|
|
|
// read a logical record (many physical record).
|
|
|
|
|
|
DWORD f = ftell(fp);
|
|
|
|
|
|
rdbuf(fp,buff,&lbuff,&lrtype,&istats,maxrl,&nbyte,ngapbyte);
|
|
|
|
|
|
|
|
|
|
|
|
if(isSpLis)ngapbyte=8;
|
|
|
|
|
|
|
|
|
|
|
|
f = ftell(fp);
|
|
|
|
|
|
if(f < 0) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
ntbyte = ntbyte + nbyte;
|
|
|
|
|
|
if(istats<=0) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
// if(lrtype!=lrtype0) write(0,*) "lbuff,lrtype,nrecs=",lbuff,lrtype,nlr;
|
|
|
|
|
|
lrtype0=lrtype;
|
|
|
|
|
|
|
|
|
|
|
|
#pragma region write vol.(reel)_header information.
|
|
|
|
|
|
if(lrtype == 132)
|
|
|
|
|
|
{
|
|
|
|
|
|
// str=reelhd((char *)&buff[0]);
|
|
|
|
|
|
}
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
#pragma region write vol.(reel)_trail information.
|
|
|
|
|
|
else if(lrtype==133)
|
|
|
|
|
|
{
|
|
|
|
|
|
strncpy(mbuf,(char *)&buff[2],lbuff-3+1);
|
|
|
|
|
|
mbuf[lbuff-3+1]=0;
|
|
|
|
|
|
// str.Format("*** reel trail *** %s",mbuf);
|
|
|
|
|
|
// skip vol.(reel) trail bytes (2 eof)
|
|
|
|
|
|
len = neofbyte * 2;
|
|
|
|
|
|
if(len > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
istat = fread(buff, len, 1, fp);
|
|
|
|
|
|
if(istat<=0) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
ntbyte=ntbyte+neofbyte*2;
|
|
|
|
|
|
sprintf(mbuf,"ntbytes = %d\r\n two eof \r\n",ntbyte);
|
|
|
|
|
|
// str+=CharToCstring(mbuf,strlen(mbuf));
|
|
|
|
|
|
// skip vol.(reel) trail bytes (2 eof)
|
|
|
|
|
|
len=neofbyte*2;
|
|
|
|
|
|
if(len>0)
|
|
|
|
|
|
{
|
|
|
|
|
|
istat=fread(buff,len,1,fp);
|
|
|
|
|
|
|
|
|
|
|
|
if(istat<=0) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
ntbyte=ntbyte+neofbyte*2;
|
|
|
|
|
|
}
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
#pragma region write tape_header information.
|
|
|
|
|
|
else if(lrtype==130)
|
|
|
|
|
|
{
|
|
|
|
|
|
// str=
|
|
|
|
|
|
tapehd((char *)buff);
|
|
|
|
|
|
// skip eof(file end) bytes(a eof).
|
|
|
|
|
|
len=neofbyte;
|
|
|
|
|
|
if(len > 0) {
|
|
|
|
|
|
istat = fread(buff,len,1,fp);
|
|
|
|
|
|
|
|
|
|
|
|
if(istat<=0) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
ntbyte=ntbyte+neofbyte;
|
|
|
|
|
|
// str.Format(str.GetString(),"ntbytes = %d\r\n a eof \r\n",str,ntbyte);
|
|
|
|
|
|
}
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
#pragma region write tape_trail information.
|
|
|
|
|
|
else if(lrtype == 131)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(lbuff-3+1<5000)
|
|
|
|
|
|
{
|
|
|
|
|
|
strncpy(mbuf, (char *)&buff[2], lbuff - 3 + 1);
|
|
|
|
|
|
// str.Format("*** tape trail *** %s",mbuf);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
#pragma region write file_header information.
|
|
|
|
|
|
else if(lrtype == 128)
|
|
|
|
|
|
{
|
|
|
|
|
|
ipfile = ipfile + 1;
|
|
|
|
|
|
if(ipfile > iprdfl)
|
|
|
|
|
|
break;
|
|
|
|
|
|
//str=CString(" *** file header ***\r\n-----------------------------------\r\n")+
|
|
|
|
|
|
filehd((char *)buff, &maxrl);
|
|
|
|
|
|
//str.Format("%s maxrl=%d\r\n",str,maxrl) ;
|
|
|
|
|
|
}
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
#pragma region write file_trail information.
|
|
|
|
|
|
else if(lrtype==129)
|
|
|
|
|
|
{//whp add
|
|
|
|
|
|
if(ipfile==iprdfl)
|
|
|
|
|
|
{
|
|
|
|
|
|
filehd((char *)buff,&maxrl);
|
|
|
|
|
|
}
|
|
|
|
|
|
// skip eof (file end) bytes(a eof).
|
|
|
|
|
|
len=neofbyte;
|
|
|
|
|
|
if(len>0)
|
|
|
|
|
|
{
|
|
|
|
|
|
istat=fread(buff,len,1,fp);
|
|
|
|
|
|
|
|
|
|
|
|
if(istat<=0) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
ntbyte=ntbyte+neofbyte;
|
|
|
|
|
|
if(ipfile==iprdfl)break;
|
|
|
|
|
|
}
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
#pragma region write comment record information.
|
|
|
|
|
|
else if(lrtype==232)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(ipfile!=iprdfl)continue;
|
|
|
|
|
|
if(lbuff-3+1<5000)
|
|
|
|
|
|
{
|
|
|
|
|
|
strncpy(mbuf,(char *)&buff[2],lbuff-3+1);
|
|
|
|
|
|
// str.Format("*** comment: ***%s",mbuf);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
#pragma region write information record information.
|
|
|
|
|
|
else if(lrtype==34)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(ipfile!=iprdfl)continue;
|
|
|
|
|
|
infrec((char *)buff,lbuff,0);
|
|
|
|
|
|
}
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
#pragma region write format specification record information.
|
|
|
|
|
|
else if(lrtype==64)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(ipfile!=iprdfl) continue;
|
|
|
|
|
|
nfmsp=nfmsp+1;
|
|
|
|
|
|
if(nfmsp>1)continue;// goto L119;
|
|
|
|
|
|
int iswfmtb=0;
|
|
|
|
|
|
iswfmtb=1;
|
|
|
|
|
|
for(int i=0;i<ncurvs+1;i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(nsamps[i]<=0) nsamps[i]=1;
|
|
|
|
|
|
}
|
|
|
|
|
|
// write channel object information.
|
|
|
|
|
|
nfrmob=0;
|
|
|
|
|
|
npfrmob[nfrmob]=nsamps[0];
|
|
|
|
|
|
for(int i=0;i<ncurvs;i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
int infg=1;
|
|
|
|
|
|
for(int j=0;j<=nfrmob;j++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(nsamps[i]==npfrmob[j]) infg=0;
|
|
|
|
|
|
}
|
|
|
|
|
|
if(infg==1)
|
|
|
|
|
|
{
|
|
|
|
|
|
nfrmob=nfrmob+1;
|
|
|
|
|
|
npfrmob[nfrmob]=nsamps[i] ;
|
|
|
|
|
|
}
|
|
|
|
|
|
//if(iexst[i]==1)
|
|
|
|
|
|
{
|
|
|
|
|
|
int ivorg=0;
|
|
|
|
|
|
int ivcopy=0 ;
|
|
|
|
|
|
int ndim=1;
|
|
|
|
|
|
nele[0]=npoints[i]/nsamps[i];
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
depfc=unitfactor(depunit,4);
|
|
|
|
|
|
rlevfc=unitfactor(levunit,4);
|
|
|
|
|
|
strcpy(depunit,"m");
|
|
|
|
|
|
int ip=0;
|
|
|
|
|
|
int nn=0;
|
|
|
|
|
|
for(int i=0;i<=nfrmob;i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
lrecf[i]=4*npfrmob[i];
|
|
|
|
|
|
for(int ioc=0;ioc<ncurvs;ioc++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(iexst[ioc]==1&&nsamps[ioc]==npfrmob[i])
|
|
|
|
|
|
{
|
|
|
|
|
|
int nsamp=npoints[ioc];
|
|
|
|
|
|
lrecf[i]=lrecf[i]+lwbytes(ircodes[ioc])*nsamp;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
#pragma region lrtype==0
|
|
|
|
|
|
else if(lrtype == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
int ips, nsamp, icode, npbyte;
|
|
|
|
|
|
|
|
|
|
|
|
if(ipfile != iprdfl)
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
|
|
nlrdat = nlrdat + 1;
|
|
|
|
|
|
int nfrm = (lbuff - 2) / lframe;
|
|
|
|
|
|
if(nfrm>255) nfrm=255;
|
|
|
|
|
|
if(nfrm != nframe)
|
|
|
|
|
|
nframe = nfrm;
|
|
|
|
|
|
// nframe=buff[0]*0x100+buff[1];
|
|
|
|
|
|
for(int i = 0; i < nframe; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
#pragma region 深度值dep更新
|
|
|
|
|
|
if(modep == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
ips=3;
|
|
|
|
|
|
nsamp=1;
|
|
|
|
|
|
icode=ircodes[ncurvs] ;
|
|
|
|
|
|
convrt(&value[0], buff, lbuff, ips, icode, nsamp);
|
|
|
|
|
|
dep = value[0] * depfc + outrlev * i;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
ips=2+ipost[ncurvs]+(i)*lframe;
|
|
|
|
|
|
nsamp=1;
|
|
|
|
|
|
icode=ircodes[ncurvs];
|
|
|
|
|
|
convrt(&value[0],buff,lbuff,ips,icode,nsamp);
|
|
|
|
|
|
dep=value[0]*depfc ;
|
|
|
|
|
|
}
|
|
|
|
|
|
irec=irec+1;
|
|
|
|
|
|
|
|
|
|
|
|
if(abs(dep + abstrv) > 0.01 && ifgst == 0 && abs(dep + 9999.) > 0.01)
|
|
|
|
|
|
{
|
|
|
|
|
|
ifgst = irec;
|
|
|
|
|
|
vsdep = dep;
|
|
|
|
|
|
if(irec != 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
// CString ss;
|
|
|
|
|
|
// ss.Format("irec=d,warning! depth track value error.",irec);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(abs(dep + abstrv) > 0.01 && abs(dep + 9999.) > 0.01)
|
|
|
|
|
|
{
|
|
|
|
|
|
ifged = irec;
|
|
|
|
|
|
vedep = dep;
|
|
|
|
|
|
}
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
|
|
|
|
|
|
if(outrlev < 0){
|
|
|
|
|
|
if(rNum == 0)
|
|
|
|
|
|
firstDep = dep;
|
|
|
|
|
|
rNum++;
|
|
|
|
|
|
if(rNum == EACHCALNUM)
|
|
|
|
|
|
eachStartDep = dep; //更新一次起始深度值
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(outrlev > 0){
|
|
|
|
|
|
if(rNum == 0)
|
|
|
|
|
|
eachStartDep = dep;
|
|
|
|
|
|
rNum++;
|
|
|
|
|
|
if(rNum == EACHCALNUM)
|
|
|
|
|
|
firstDep = dep;
|
|
|
|
|
|
}
|
|
|
|
|
|
lastStartDep = dep;
|
|
|
|
|
|
|
|
|
|
|
|
for(int l = 0; l <= nfrmob; l++)
|
|
|
|
|
|
{
|
|
|
|
|
|
int ipw=4;
|
|
|
|
|
|
#pragma region write curve value to buft.
|
|
|
|
|
|
for(int j = 0; j < ncurvs; j++) //针对于每个曲线
|
|
|
|
|
|
{
|
|
|
|
|
|
if(OutCurveNo[j] > -1 && npfrmob[l] == nsamps[j])
|
|
|
|
|
|
{
|
|
|
|
|
|
if(modep==1)
|
|
|
|
|
|
ips = 6 + ipost[j] + (i) * lframe;
|
|
|
|
|
|
else
|
|
|
|
|
|
ips=2+ipost[j]+(i)*lframe;
|
|
|
|
|
|
|
|
|
|
|
|
nsamp=npoints[j];
|
|
|
|
|
|
icode=ircodes[j];
|
|
|
|
|
|
convrt(&value[0],buff,lbuff,ips,icode,nsamp);
|
|
|
|
|
|
nn++;
|
|
|
|
|
|
for(int k = 0; k < nsamp; k++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(abs(value[k]+9999.) < 0.001||
|
|
|
|
|
|
value[k]>=1.312924e+030||
|
|
|
|
|
|
fabs(value[k]+431602048.0)==0
|
|
|
|
|
|
||
|
|
|
|
|
|
value[0]>=1.1424783e+009
|
|
|
|
|
|
)
|
|
|
|
|
|
{
|
|
|
|
|
|
value[k]=-999.25;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if(nsamp > 1 && outrlev < 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
#pragma region 存放curdata --> value[]
|
|
|
|
|
|
if(ndim[j]<=1)//curve
|
|
|
|
|
|
{
|
|
|
|
|
|
float *temp;
|
|
|
|
|
|
temp = new float[nsamp];
|
|
|
|
|
|
memcpy(&temp[0], &value[0], nsamp*sizeof(float));
|
|
|
|
|
|
for(int k = 0; k < nsamp; k++)
|
|
|
|
|
|
{
|
|
|
|
|
|
value[k] = temp[nsamp-k-1];
|
|
|
|
|
|
}
|
|
|
|
|
|
delete temp;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(ndim[j] > 1)//wave
|
|
|
|
|
|
{
|
|
|
|
|
|
int num = nsamp / ndim[j];
|
|
|
|
|
|
if(num > 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
float *temp;
|
|
|
|
|
|
temp = new float[nsamp];
|
|
|
|
|
|
memcpy(&temp[0], &value[0], nsamp * sizeof(float));
|
|
|
|
|
|
for(int m=0;m<num;m++)
|
|
|
|
|
|
{
|
|
|
|
|
|
memcpy(&value[ndim[j] * m], &temp[nsamp-ndim[j]*(m+1)], ndim[j]*sizeof(float));
|
|
|
|
|
|
}
|
|
|
|
|
|
delete temp;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(ndim[j]<1)
|
|
|
|
|
|
ndim[j] = 1;
|
|
|
|
|
|
|
|
|
|
|
|
float mrlev = outrlev / (npoints[j]/ndim[j]);
|
|
|
|
|
|
|
|
|
|
|
|
if(dep > edep || dep < sdep)
|
|
|
|
|
|
{
|
|
|
|
|
|
//sdep--edep在输出深度段外,无需操作
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if(ndim[j] <= 1) //常规曲线
|
|
|
|
|
|
{
|
|
|
|
|
|
float StartDep = dep;
|
|
|
|
|
|
int NumPoint = nsamp, StartPoint = 0;
|
|
|
|
|
|
|
|
|
|
|
|
if(dep < sdep)
|
|
|
|
|
|
{
|
|
|
|
|
|
#pragma region 起始深度在段外
|
|
|
|
|
|
for(int m = 0; m < nsamp; m++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(dep + m * mrlev >= sdep)
|
|
|
|
|
|
{
|
|
|
|
|
|
StartDep += m * mrlev;
|
|
|
|
|
|
StartPoint = m;
|
|
|
|
|
|
NumPoint -= m;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
}
|
|
|
|
|
|
if(dep + (nsamp - 1) * mrlev > edep)
|
|
|
|
|
|
{
|
|
|
|
|
|
#pragma region 终止深度在段外
|
|
|
|
|
|
for(int m = 0; m < nsamp; m++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(dep + m * mrlev >= edep)
|
|
|
|
|
|
{
|
|
|
|
|
|
NumPoint = m + 1;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
}
|
|
|
|
|
|
//int po = (StartDep - myCurve.StartDepth) / myCurve.DepLevel + 0.5;
|
|
|
|
|
|
|
|
|
|
|
|
if(outrlev < 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
for (int NumPointn = 0; NumPointn < NumPoint; NumPointn++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(NumPoint > 1)
|
|
|
|
|
|
value2[j][(EACHCALNUM - eachCurdataNum[j] - 1) * NumPoint + NumPointn] = value[StartPoint + NumPointn];
|
|
|
|
|
|
else
|
|
|
|
|
|
value2[j][EACHCALNUM - eachCurdataNum[j] - NumPointn - 1] = value[StartPoint + NumPointn];
|
|
|
|
|
|
}
|
|
|
|
|
|
eachCurdataNum[j] ++;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
for (int NumPointn = 0; NumPointn < NumPoint; NumPointn++)
|
|
|
|
|
|
value2[j][ eachCurdataNum[j] * NumPoint + NumPointn ] = value[StartPoint + NumPointn];
|
|
|
|
|
|
|
|
|
|
|
|
eachCurdataNum[j] ++;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else //波列数据
|
|
|
|
|
|
{
|
|
|
|
|
|
int num = nsamp / ndim[j];
|
|
|
|
|
|
|
|
|
|
|
|
int lb=lbytes(ircodes[j]);
|
|
|
|
|
|
float StartDep=dep;
|
|
|
|
|
|
|
|
|
|
|
|
int po=(StartDep-myWave.StartDepth)/myWave.DepLevel+0.5;
|
|
|
|
|
|
|
|
|
|
|
|
int NumPoint=num,StartPoint=0;
|
|
|
|
|
|
if(dep<sdep)//起始深度在段外
|
|
|
|
|
|
{
|
|
|
|
|
|
for(int m=0;m<num;m++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(dep+m*mrlev>=sdep)
|
|
|
|
|
|
{
|
|
|
|
|
|
StartDep+=m*mrlev;
|
|
|
|
|
|
StartPoint=m;
|
|
|
|
|
|
NumPoint-=m;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if(dep + (num - 1) * mrlev > edep)//终止深度在段外
|
|
|
|
|
|
{
|
|
|
|
|
|
for(int m = 0; m < num; m++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(dep + m * mrlev >= edep)
|
|
|
|
|
|
{
|
|
|
|
|
|
NumPoint = m + 1;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(outrlev < 0){
|
|
|
|
|
|
for (int NumPointn = 0; NumPointn < num * ndim[j]; NumPointn++)
|
|
|
|
|
|
m_SlfFile.SetData(tslfwave[j]->RepCode,&value2forWave[j][tslfwave[j]->CodeLen*((EACHCALNUM - eachCurdataNum[j] - 1) * nsamp + NumPointn)],&value[StartPoint * ndim[j] + NumPointn]);
|
|
|
|
|
|
|
|
|
|
|
|
eachCurdataNum[j]++;
|
|
|
|
|
|
}
|
|
|
|
|
|
else{
|
|
|
|
|
|
for (int NumPointn = 0; NumPointn < num * ndim[j]; NumPointn++)
|
|
|
|
|
|
m_SlfFile.SetData(tslfwave[j]->RepCode,&value2forWave[j][tslfwave[j]->CodeLen*(eachCurdataNum[j] * nsamp + NumPointn) ],&value[StartPoint * ndim[j] + NumPointn]);
|
|
|
|
|
|
|
|
|
|
|
|
eachCurdataNum[j]++;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
|
|
|
|
|
|
int iprec = irec - ifgst + 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
rNum=0;
|
|
|
|
|
|
if(rNum != EACHCALNUM);
|
|
|
|
|
|
// continue;
|
|
|
|
|
|
|
|
|
|
|
|
#pragma region 完成一轮次的数据获取,进行一轮次的录入
|
|
|
|
|
|
for(int j = 0; j < ncurvs; j++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(OutCurveNo[j] > -1 && ndim[j] <= 1) //常规数据
|
|
|
|
|
|
{
|
|
|
|
|
|
//实际所需录入个数计算
|
|
|
|
|
|
int realSaveNum = abs((firstDep - eachStartDep) / outrlev) + 1.5;
|
|
|
|
|
|
realSaveNum += 1; //补一个临点
|
|
|
|
|
|
/*
|
|
|
|
|
|
//补差
|
|
|
|
|
|
int cNum = realSaveNum - eachCurdataNum[j];
|
|
|
|
|
|
for(int c = 0; c < cNum; c++)
|
|
|
|
|
|
{
|
|
|
|
|
|
for(int cnpoints = 0; cnpoints < npoints[j]; cnpoints++)
|
|
|
|
|
|
{
|
|
|
|
|
|
int temp_newIndex = abs(eachCurdataNum[j] * npoints[j] + c * npoints[j] + cnpoints);
|
|
|
|
|
|
int temp_oldIndex = abs(eachCurdataNum[j] * npoints[j] - npoints[j] + cnpoints);
|
|
|
|
|
|
value2[j][temp_newIndex] = value2[j][temp_oldIndex];
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
*/
|
|
|
|
|
|
//录入
|
|
|
|
|
|
int value2Index = 0;
|
|
|
|
|
|
float saveStartDep = 0.0;
|
|
|
|
|
|
//if(cal_SaveNumInf(outsdep, outedep, outrlev, eachStartDep, value2Index, realSaveNum, saveStartDep))
|
|
|
|
|
|
{
|
|
|
|
|
|
if(npoints[j]>1)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_SlfFile.WriteCurve(OutCurveNo[j], dep-rlev+rlev/npoints[j], npoints[j], &value2[j][value2Index * npoints[j]]);
|
|
|
|
|
|
}
|
|
|
|
|
|
else m_SlfFile.WriteCurve(OutCurveNo[j], dep, npoints[j], &value2[j][value2Index * npoints[j]]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(OutCurveNo[j] > -1 && ndim[j] > 1) //波形数据
|
|
|
|
|
|
{
|
|
|
|
|
|
int num = npoints[j] / ndim[j];
|
|
|
|
|
|
int value2Index = 0;
|
|
|
|
|
|
float saveStartDep = 0.0;
|
|
|
|
|
|
int realSaveNum = eachCurdataNum[j];
|
|
|
|
|
|
|
|
|
|
|
|
//if(cal_SaveNumInf(outsdep, outedep, outrlev, eachStartDep, value2Index, realSaveNum, saveStartDep))
|
|
|
|
|
|
{
|
|
|
|
|
|
if(num>1)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_SlfFile.WriteCurve(OutCurveNo[j], dep-rlev+rlev/num,eachCurdataNum[j] * num, &value2[j][value2Index * npoints[j]]);
|
|
|
|
|
|
}
|
|
|
|
|
|
else m_SlfFile.WriteWave(OutCurveNo[j], dep, eachCurdataNum[j] * num, (void*)&value2forWave[j][0]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 初始化
|
|
|
|
|
|
for(int i = 0; i < ncurvs; i++)
|
|
|
|
|
|
eachCurdataNum[i] = 0;
|
|
|
|
|
|
rNum = 0;
|
|
|
|
|
|
|
|
|
|
|
|
//进度条刷新
|
|
|
|
|
|
if(outrlev < 0)
|
|
|
|
|
|
MyDepthProgress.SetDepth(outedep - eachStartDep + outsdep);
|
|
|
|
|
|
else
|
|
|
|
|
|
MyDepthProgress.SetDepth(dep);
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
|
|
|
|
|
|
nlr = nlr + 1; // skip vol trail
|
|
|
|
|
|
}
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
|
|
|
|
|
|
// 剩余数据录入
|
|
|
|
|
|
if(rNum != 0 && outrlev < 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
for(int j = 0; j < ncurvs; j++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(OutCurveNo[j] <= -1) continue;
|
|
|
|
|
|
if(ndim[j] <= 1) //curve
|
|
|
|
|
|
{
|
|
|
|
|
|
int value2Index = 0, realSaveNum = eachCurdataNum[j];
|
|
|
|
|
|
float saveStartDep = 0.0;
|
|
|
|
|
|
|
|
|
|
|
|
if(cal_SaveNumInf(outsdep, outedep, outrlev, lastStartDep, value2Index, realSaveNum, saveStartDep))
|
|
|
|
|
|
{
|
|
|
|
|
|
value2Index = abs(EACHCALNUM - realSaveNum);
|
|
|
|
|
|
m_SlfFile.WriteCurve(OutCurveNo[j], saveStartDep, realSaveNum * npoints[j], &value2[j][value2Index * npoints[j]]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
else //wave
|
|
|
|
|
|
{
|
|
|
|
|
|
int num = npoints[j] / ndim[j];
|
|
|
|
|
|
int value2Index = 0, realSaveNum = eachCurdataNum[j];
|
|
|
|
|
|
float saveStartDep = 0.0;
|
|
|
|
|
|
|
|
|
|
|
|
if(cal_SaveNumInf(outsdep, outedep, outrlev, eachStartDep, value2Index, realSaveNum, saveStartDep))
|
|
|
|
|
|
{
|
|
|
|
|
|
value2Index = abs(EACHCALNUM - realSaveNum);
|
|
|
|
|
|
m_SlfFile.WriteWave(OutCurveNo[j], saveStartDep, realSaveNum * num, (void*)&value2forWave[j][tslfwave[j]->CodeLen * (value2Index * npoints[j])] );
|
|
|
|
|
|
}
|
|
|
|
|
|
//m_SlfFile.WriteWave(OutCurveNo[j], lastStartDep, eachCurdataNum[j]*num,(void*)&value2forWave[j][tslfwave[j]->CodeLen*((EACHCALNUM - eachCurdataNum[j]) * npoints[j])]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(rNum != 0 && outrlev > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
for(int j = 0; j < ncurvs; j++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(OutCurveNo[j] <= -1) continue;
|
|
|
|
|
|
if(ndim[j] <= 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
int value2Index = 0, realSaveNum = eachCurdataNum[j];
|
|
|
|
|
|
float saveStartDep = 0.0;
|
|
|
|
|
|
if(cal_SaveNumInf(outsdep, outedep, outrlev, eachStartDep, value2Index, realSaveNum, saveStartDep))
|
|
|
|
|
|
{
|
|
|
|
|
|
m_SlfFile.WriteCurve(OutCurveNo[j], saveStartDep, realSaveNum * npoints[j], &value2[j][value2Index * npoints[j]]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
int num = npoints[j] / ndim[j];
|
|
|
|
|
|
int value2Index = 0;
|
|
|
|
|
|
float saveStartDep = 0.0;
|
|
|
|
|
|
int realSaveNum = eachCurdataNum[j];
|
|
|
|
|
|
|
|
|
|
|
|
if(cal_SaveNumInf(outsdep, outedep, outrlev, eachStartDep, value2Index, realSaveNum, saveStartDep))
|
|
|
|
|
|
m_SlfFile.WriteWave(OutCurveNo[j], saveStartDep, realSaveNum * num, (void*)&value2forWave[j][value2Index * npoints[j]]);
|
|
|
|
|
|
|
|
|
|
|
|
//m_SlfFile.WriteWave(OutCurveNo[j], eachStartDep, eachCurdataNum[j] * num, (void*)&value2forWave[j][0]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
delete eachCurdataNum;
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < ncurvs; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(OutCurveNo[i]>-1)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(tslfwave&&tslfwave[i]) delete tslfwave[i];
|
|
|
|
|
|
delete[] value2[i];
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
delete[] value2;
|
|
|
|
|
|
if(tslfwave) delete[] tslfwave;
|
|
|
|
|
|
for (int i = 0; i < ncurvs; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(OutCurveNo[i] > -1 && ndim[i] > 1)
|
|
|
|
|
|
delete[] value2forWave[i];
|
|
|
|
|
|
}
|
|
|
|
|
|
delete[] value2forWave;
|
|
|
|
|
|
|
|
|
|
|
|
for(int j = 0; j < ncurvs; j++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(OutCurveNo[j] > -1)
|
|
|
|
|
|
if(ndim[j] <= 1)
|
|
|
|
|
|
m_SlfFile.CloseCurve(OutCurveNo[j]);
|
|
|
|
|
|
else
|
|
|
|
|
|
m_SlfFile.CloseWave(OutCurveNo[j]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_SlfFile.Close();
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BEGIN_REGISTER_ICONVERTOR(CLisConvertor)
|
|
|
|
|
|
sConvertorKey(GetLisConvertorTypeID(),"Lis Well Log Convertor")
|
|
|
|
|
|
END_REGISTER_ICONVERTOR(CLisConvertor );
|
|
|
|
|
|
|
|
|
|
|
|
END_OSGGRAPHICS_NAMESPACE
|