#include "LogIO.h" #include #include #include #include #pragma execution_character_set("utf-8") char* GetDescription(LAYER_DATA &m_Result,char *buf) { buf[0]=0; if(m_Result.Zone[0]!=' '&&m_Result.Zone[0]!='\0') { int n=strlen(m_Result.Zone); if(n>16) n=16; strncpy(buf,m_Result.Zone,n); buf[n]=0; } else { int n=strlen(m_Result.Description1); if(n>48) n=48; strncpy(buf,m_Result.Description1,n); buf[n]=0; if(strlen(m_Result.Description2)){ if(strlen(buf))strcat(buf,"-"); strcat(buf,m_Result.Description2); } if(strlen(m_Result.Description3)){ if(strlen(buf))strcat(buf,"-"); strcat(buf,m_Result.Description3); } if(strlen(m_Result.Description4)){ if(strlen(buf))strcat(buf,"-"); strcat(buf,m_Result.Description4); } if(strlen(m_Result.Description5)){ if(strlen(buf))strcat(buf,"-"); strcat(buf,m_Result.Description5); } if(strlen(m_Result.Description6)){ if(strlen(buf))strcat(buf,"-"); strcat(buf,m_Result.Description6); } if(strlen(m_Result.Description7)){ if(strlen(buf))strcat(buf,"-"); strcat(buf,m_Result.Description7); } if(strlen(m_Result.Description8)){ if(strlen(buf))strcat(buf,"-"); strcat(buf,m_Result.Description8); } if(strlen(m_Result.Description9)){ if(strlen(buf))strcat(buf,"-"); strcat(buf,m_Result.Description9); } /* if(strlen(m_Result.Description10)){ if(strlen(buf))strcat(buf,"-"); strcat(buf,m_Result.Description10); } */ } return buf; } void ComputeH(QString zonename,LAYER_DATA &tempRes,float h,float total) { h=QString::number(h+0.0001,'f',1).toFloat(); if(zonename=="干层") { tempRes.Tt-=h; } if(strcmp(zonename.toStdString().c_str(),"油层")==0|| strcmp(zonename.toStdString().c_str(),"偏干油层")==0|| strcmp(zonename.toStdString().c_str(),"含水油层")==0|| strcmp(zonename.toStdString().c_str(),"含气油层")==0 ) { if(total) h=total-tempRes.Oil; tempRes.Oil+=h; } else if(zonename=="差油层") { if(total) h=total-tempRes.PoorOil; tempRes.PoorOil+=h; } else if(zonename=="油水同层") { if(total) h=total-tempRes.OilWater; tempRes.OilWater+=h; } else if(zonename=="含油水层") { if(total) h=total-tempRes.WaterOil; tempRes.WaterOil+=h; } else if(zonename=="气层") { if(total) h=total-tempRes.Gas; tempRes.Gas+=h; } else if(zonename=="差气层") { if(total) h=total-tempRes.PoorGas; tempRes.PoorGas+=h; } else if(zonename=="气水同层") { if(total) h=total-tempRes.GasWater; tempRes.GasWater+=h; } else if(zonename=="含气水层") { if(total) h=total-tempRes.WaterGas; tempRes.WaterGas+=h; } } void GetWellNameAndPath(QString slf,QString &wellname,QString &path)//,QString &slffilename) { QString slffilename=QString(""); int ind=slf.lastIndexOf('\\'); int ind2=slf.lastIndexOf('/'); if(ind2>ind) ind=ind2; if(ind>-1) { slffilename=slf.mid(ind+1); path=slf.left(ind); ind=slffilename.lastIndexOf('.'); if(ind>0) wellname=slffilename.left(ind); } } void ComputeTT(LAYER_DATA &m_Result, QString &result, QString &result1, QString &result2, QString &result3, QString &result4, QString &result5, QString &result6, QString &result7, QString &result8, QString &result9, QString &result10 ) { float d1=QString::number(m_Result.StartDepth+0.0001,'f',1).toFloat(); float d2=QString::number(m_Result.EndDepth+0.0001,'f',1).toFloat(); m_Result.Thick=d2-d1+0.000001; m_Result.Tt=m_Result.Thick; QStringList strs; strs.append("油层"); strs.append("偏干油层"); strs.append("含水油层"); strs.append("含气油层"); strs.append("差油层"); strs.append("油水同层"); strs.append("含油水层"); strs.append("气层"); strs.append("差气层"); strs.append("气水同层"); strs.append("含气水层"); int ind=0; int fc=0; int isw=0; float tt=0; if(m_Result.MDepth10){ fc=1; float h=m_Result.EndDepth-m_Result.MDepth10; QString path,zonename; GetWellNameAndPath(result10,zonename,path); ComputeH(zonename,m_Result,h); if(strs.indexOf(zonename)<0) isw=1; else tt+=QString::number(h+0.0001,'f',1).toFloat(); ind=10; } if(m_Result.MDepth9){ fc=1; float h=0; if(!ind) h=m_Result.EndDepth-m_Result.MDepth9; else h=m_Result.MDepth10-m_Result.MDepth9; QString path,zonename; GetWellNameAndPath(result9,zonename,path); ComputeH(zonename,m_Result,h); if(!ind)ind=9; if(strs.indexOf(zonename)<0) isw=1; else tt+=QString::number(h+0.0001,'f',1).toFloat(); } if(m_Result.MDepth8){ fc=1; float h=0; if(!ind) h=m_Result.EndDepth-m_Result.MDepth8; else h=m_Result.MDepth9-m_Result.MDepth8; QString path,zonename; GetWellNameAndPath(result8,zonename,path); ComputeH(zonename,m_Result,h); if(!ind)ind=8; if(strs.indexOf(zonename)<0) isw=1; else tt+=QString::number(h+0.0001,'f',1).toFloat(); } if(m_Result.MDepth7){ fc=1; float h=0; if(!ind) h=m_Result.EndDepth-m_Result.MDepth7; else h=m_Result.MDepth8-m_Result.MDepth7; QString path,zonename; GetWellNameAndPath(result7,zonename,path); ComputeH(zonename,m_Result,h); if(!ind)ind=7; if(strs.indexOf(zonename)<0) isw=1; else tt+=QString::number(h+0.0001,'f',1).toFloat(); } if(m_Result.MDepth6){ fc=1; float h=0; if(!ind) h=m_Result.EndDepth-m_Result.MDepth6; else h=m_Result.MDepth7-m_Result.MDepth6; QString path,zonename; GetWellNameAndPath(result6,zonename,path); ComputeH(zonename,m_Result,h); if(!ind)ind=6; if(strs.indexOf(zonename)<0) isw=1; else tt+=QString::number(h+0.0001,'f',1).toFloat(); } if(m_Result.MDepth5){ fc=1; float h=0; if(!ind) h=m_Result.EndDepth-m_Result.MDepth5; else h=m_Result.MDepth6-m_Result.MDepth5; QString path,zonename; GetWellNameAndPath(result5,zonename,path); ComputeH(zonename,m_Result,h); if(!ind)ind=5; if(strs.indexOf(zonename)<0) isw=1; else tt+=QString::number(h+0.0001,'f',1).toFloat(); } if(m_Result.MDepth4) { fc=1; float h=0; if(!ind) h=m_Result.EndDepth-m_Result.MDepth4; else h=m_Result.MDepth5-m_Result.MDepth4; QString path,zonename; GetWellNameAndPath(result4,zonename,path); ComputeH(zonename,m_Result,h); if(!ind)ind=4; if(strs.indexOf(zonename)<0) isw=1; else tt+=QString::number(h+0.0001,'f',1).toFloat(); } if(m_Result.MDepth3) { fc=1; float h=0; if(!ind) h=m_Result.EndDepth-m_Result.MDepth3; else h=m_Result.MDepth4-m_Result.MDepth3; QString path,zonename; GetWellNameAndPath(result3,zonename,path); ComputeH(zonename,m_Result,h); if(!ind)ind=3; if(strs.indexOf(zonename)<0) isw=1; else tt+=QString::number(h+0.0001,'f',1).toFloat(); } if(m_Result.MDepth2) { fc=1; float h=0; if(!ind) h=m_Result.EndDepth-m_Result.MDepth2; else h=m_Result.MDepth3-m_Result.MDepth2; QString path,zonename; GetWellNameAndPath(result2,zonename,path); ComputeH(zonename,m_Result,h); if(!ind)ind=2; if(strs.indexOf(zonename)<0) isw=1; else tt+=QString::number(h+0.0001,'f',1).toFloat(); } if(m_Result.MDepth1) { fc=1; float h=0; if(!ind) h=m_Result.EndDepth-m_Result.MDepth1; else h=m_Result.MDepth2-m_Result.MDepth1; QString path,zonename; GetWellNameAndPath(result1,zonename,path); ComputeH(zonename,m_Result,h); if(strs.indexOf(zonename)<0) isw=1; else tt+=QString::number(h+0.0001,'f',1).toFloat(); GetWellNameAndPath(result,zonename,path); if(strs.indexOf(zonename)<0) isw=1; if(isw) h=m_Result.MDepth1-m_Result.StartDepth; else h=m_Result.Thick-tt; ComputeH(zonename,m_Result,h); if(!ind)ind=1; } if(!fc) { fc=1; float h=m_Result.Thick; QString path,zonename; GetWellNameAndPath(result,zonename,path); ComputeH(zonename,m_Result,h); } } CLogIO ::CLogIO() { m_Curve=NULL; m_Wave=NULL; m_Fmt=NULL; Slf_Info=NULL; m_MenuNumber=0; } QString GetOilFieldName() { QString strProjectDir = QCoreApplication::applicationDirPath()+ QDir::separator() + ".."; strProjectDir += QDir::separator(); QString path=strProjectDir; path+="oilfield.ini"; FILE *fp=fopen(path.toStdString().c_str(),"rt"); char oilfield[200]; oilfield[0]=0; if(fp) { fscanf(fp,"%s\n",oilfield); fclose(fp); } QString cs=oilfield; if(!cs.isEmpty()) return cs+QDir::separator(); else return cs; } CLogIO ::CLogIO(const char* szLogFileName,int FileType):CSlfIO(szLogFileName,FileType) { m_Curve=NULL; m_Wave=NULL; m_Fmt=NULL; m_MenuNumber=0; int MaxObjectNumber=m_Head.MaxObjectNumber; if(!IsWis) MaxObjectNumber=m_SlfHead.MaxTableNumber; Slf_Info= new char * [MaxObjectNumber]; for(int i=0;i-1) isShengLi=1; QString strPathTmp=strConfPath+"ENUM.ini"; FILE *fp=fopen(strPathTmp.toStdString().c_str(),"r+t"); if(fp) { char tem[100]; while(!feof(fp)) { int ret=fscanf(fp,"%s",tem); if(ret<1) break; if(tem[0]) { QString strPathTmp1=strConfPath+GetOilFieldName()+tem+".ini"; FILE *fp1=fopen(strPathTmp1.toStdString().c_str(),"r+t"); if(fp1) { char buf1[100]; Slf_Menu[m_MenuNumber].clear(); while(!feof(fp1)) { int ret=fscanf(fp1,"%s",buf1); if(ret<1) break; Slf_Menu[m_MenuNumber].append(buf1); } fclose(fp1); m_MenuNumber++; } } } fclose(fp); } } CLogIO ::CLogIO(const char* szLogFileName,unsigned int nOpenFlags,int BlockLen,int MaxObjectNumber, int MachineType,int FileType) { m_Curve=NULL; m_Wave=NULL; m_Fmt=NULL; if(!Open(szLogFileName,nOpenFlags,BlockLen,MaxObjectNumber,MachineType,FileType)) exit(0); } bool CLogIO ::Open(const char* szLogFileName,unsigned int nOpenFlags,int BlockLen,int MaxObjectNumber, int MachineType,int FileType) { if(CSlfIO::Open(szLogFileName,nOpenFlags,BlockLen,MaxObjectNumber,MachineType,FileType)) { m_MenuNumber=0; int MaxObjectNumber=m_Head.MaxObjectNumber; if(!IsWis) MaxObjectNumber=m_SlfHead.MaxTableNumber; Slf_Info= new char * [MaxObjectNumber]; for(int i=0;iStartDepth,m_Curve->DepLevel);//(int)((sdep-m_Curve->StartDepth)/m_Curve->DepLevel+0.5); if(samples1<0) samples1=0; int samples2=Slf_Int(edep,m_Curve->StartDepth,m_Curve->DepLevel);//(int)((edep-m_Curve->StartDepth)/m_Curve->DepLevel+0.5); if(samples2<0) samples2=0; int move=0; if(delta>0) move=(int)(delta/m_Curve->DepLevel+0.5); else move=(int)(delta/m_Curve->DepLevel-0.5); MoveChannel(index,0,samples1,move,samples2); return 1; } bool CLogIO :: SlfMoveDepth(int index,float sdep, float edep, float delta) { Slf_CURVE m_Curve; GetSlfCurveInfo(index,&m_Curve); int samples1=Slf_Int(sdep,m_Curve.StartDepth,m_Curve.DepLevel);//((sdep-m_Curve.StartDepth)/m_Curve.DepLevel+1.5); if(samples1<0) samples1=0; int samples2=Slf_Int(edep,m_Curve.StartDepth,m_Curve.DepLevel);//((edep-m_Curve.StartDepth)/m_Curve.DepLevel+0.5); samples2++; if(m_Curve.StartDepth+samples2*m_Curve.DepLevel>m_Curve.EndDepth) samples2-=1; if(samples2<0) samples2=0; int move=1; if(delta>0) move=(int)(delta/m_Curve.DepLevel+0.5); else move=(int)(delta/m_Curve.DepLevel-0.5); MoveSlfTable(index,samples1,samples2,move); return 1; } bool CLogIO :: WisCorrectDepth(int index,float delta) { CorrectChannel(index,0,delta); return TRUE; } bool CLogIO :: SlfCorrectDepth(int index,float delta) { CorrectSlfTableField(index,0,delta); return TRUE; } bool CLogIO :: CorrectDepth(int index,float delta) { if(IsWis) return WisCorrectDepth(index,delta); return SlfCorrectDepth(index,delta); } bool CLogIO :: ExpandDepth(int index,float sdep,float edep) { if(IsWis) return WisExpandDepth(index,sdep,edep); return SlfExpandDepth(index,sdep,edep); } bool CLogIO :: WisExpandDepth(int index,float sdep,float edep) { m_Curve=(Slf_CURVE*)Slf_Info[index]; int samples1=Slf_Int(sdep,m_Curve->StartDepth,m_Curve->DepLevel);//(int)((sdep-m_Curve->StartDepth)/m_Curve->DepLevel+0.5); if(samples1<0) samples1=0; int samples2=Slf_Int(edep,m_Curve->StartDepth,m_Curve->DepLevel);//(int)((edep-m_Curve->StartDepth)/m_Curve->DepLevel+0.5); if(samples2<0) samples2=0; ExpandChannel(index,0,samples1,samples2); return 1; } bool CLogIO :: SlfExpandDepth(int index,float sdep,float edep) { Slf_CURVE m_Curve; GetSlfCurveInfo(index,&m_Curve); int samples1=Slf_Int(sdep,m_Curve.StartDepth,m_Curve.DepLevel);//(int)((sdep-m_Curve.StartDepth)/m_Curve.DepLevel+0.5); int samples2=Slf_Int(edep,m_Curve.StartDepth,m_Curve.DepLevel);//(int)((edep-m_Curve.StartDepth)/m_Curve.DepLevel+0.5); if(samples1<0) samples1=0; if(samples2<0) samples2=0; SetSlfTableRecordCount(index,samples2); return 1; } int CLogIO :: OpenCurve(const char* name) { if( IsWis) return OpenWisCurve(name); return OpenSlfCurve(name); } int CLogIO :: OpenSlfCurve(const char* name) { int index=FindSlfObjectName((char *)name,CURVE_OBJECT); if(index<0)return -1; return OpenSlfTable(name,CURVE_OBJECT); } int CLogIO :: OpenWisCurve(const char* name) { int index = OpenChannel(name,CURVE_OBJECT); if(index>-1) { if(!Slf_Info[index]) Slf_Info[index]=new char [sizeof(Slf_CURVE)]; m_Curve=(Slf_CURVE*)Slf_Info[index]; GetCurveInfo(index,m_Curve); return index; } else return -1; } int CLogIO :: OpenCurve(Slf_CURVE *pCurve,bool bFailExist) { if(IsWis) return OpenWisCurve(pCurve,bFailExist); return OpenSlfCurve(pCurve,bFailExist); } int CLogIO :: OpenWisCurve(Slf_CURVE *pCurve,bool bFailExist) { int index = OpenCurve(pCurve->Name); if(index>-1) { Slf_CURVE info; GetCurveInfo(index,&info); if(info.CodeLen!=pCurve->CodeLen||info.RepCode!=pCurve->RepCode) { char newname[200]; strcpy(newname,pCurve->Name); strcat(newname,".bak"); CString sss; sss.Format("OpenWisCurve %s",newname); AfxMessageBox(sss); RenameObject(pCurve->Name,newname); index=-1; } } if(index<0) index=CreateCurve(pCurve,bFailExist); else if(bFailExist) CreateCurve(pCurve,bFailExist); return index; } int CLogIO :: OpenSlfCurve(Slf_CURVE *pCurve,bool bFailExist) { int index = OpenSlfCurve(pCurve->Name); if(index>-1) { Slf_CURVE info; GetCurveInfo(index,&info); if(info.CodeLen!=pCurve->CodeLen||info.RepCode!=pCurve->RepCode)//||info.DefVal!=pCurve->DefVal) { char newname[200]; strcpy(newname,pCurve->Name); strcat(newname,".bak"); //CString s1; QString str=QObject::tr("info.CodeLen=%d,pCurve->CodeLen=%d\r\ninfo.RepCode=%d,pCurve->RepCode=%d\r\n").arg(info.CodeLen) .arg(pCurve->CodeLen) .arg(info.RepCode) .arg(pCurve->RepCode); //s1.Format("info.CodeLen=%d,pCurve->CodeLen=%d\r\ninfo.RepCode=%d,pCurve->RepCode=%d\r\n", // info.CodeLen,pCurve->CodeLen,info.RepCode,pCurve->RepCode); CString s1(str.toStdString().c_str()); CString sss; sss.Format("OpenSlfCurve %s\r\n",newname); AfxMessageBox(sss+s1); RenameObject(pCurve->Name,newname); index=-1; } } if(index<0) index=CreateSlfCurve(pCurve,bFailExist); else if(bFailExist) CreateSlfCurve(pCurve,bFailExist); return index; } bool CLogIO :: GetWisCurveInfo(int index,Slf_CURVE* pInfo) { GetChannelInfo(index,&cpInfo); memmove(pInfo->AliasName,cpInfo.AliasName,sizeof(pInfo->AliasName)); memmove(pInfo->Name,m_ObjectEntry[index].Name,sizeof(pInfo->Name)); pInfo->CodeLen=cpInfo.CodeLen; pInfo->RepCode=cpInfo.RepCode; pInfo->DepLevel=cpInfo.DimInfo[0].Delta; pInfo->MaxValue=cpInfo.MaxVal; pInfo->MinValue=cpInfo.MinVal; memmove(pInfo->Unit,cpInfo.Unit,sizeof(pInfo->Unit)); memmove(pInfo->AliasUnit,cpInfo.AliasUnit,sizeof(pInfo->AliasUnit)); memmove(pInfo->DepthUnit,cpInfo.DimInfo[0].Unit,sizeof(pInfo->DepthUnit)); pInfo->StartDepth=cpInfo.DimInfo[0].StartVal; pInfo->EndDepth=pInfo->StartDepth+(cpInfo.DimInfo[0].Samples-1)*cpInfo.DimInfo[0].Delta; return TRUE; } bool CLogIO :: SetWisCurveInfo(int index,Slf_CURVE* pInfo) { GetChannelInfo(index,&cpInfo); memmove(cpInfo.AliasName,pInfo->AliasName,sizeof(cpInfo.AliasName)); memmove(m_ObjectEntry[index].Name,pInfo->Name,sizeof(pInfo->Name)); WriteObjectEntry(); /* pInfo->CodeLen=cpInfo.CodeLen; pInfo->RepCode=cpInfo.RepCode; pInfo->MaxValue=cpInfo.MaxVal; pInfo->MinValue=cpInfo.MinVal; */ if(pInfo->DepLevel!=cpInfo.DimInfo[0].Delta) WisChannelResamples(index,pInfo->DepLevel); memmove(cpInfo.Unit,pInfo->Unit,sizeof(cpInfo.Unit)); memmove(cpInfo.AliasUnit,pInfo->AliasUnit,sizeof(cpInfo.AliasUnit)); memmove(cpInfo.DimInfo[0].Unit,pInfo->DepthUnit,sizeof(cpInfo.DimInfo[0].Unit)); cpInfo.DimInfo[0].StartVal=pInfo->StartDepth; SetChannelInfo(index,&cpInfo); return TRUE; } bool CLogIO :: GetCurveInfo(int index,Slf_CURVE* pInfo) { if(IsWis) return GetWisCurveInfo(index,pInfo); return GetSlfCurveInfo(index,pInfo); } bool CLogIO :: GetSlfCurveInfo(int index,Slf_CURVE* pInfo) { if(index<0) return 0; int FieldNum=GetSlfTableFieldCount(index); int rec=GetSlfTableRecordCount(index); Slf_TABLE_ENTRY obj; GetSlfObjectEntry(index,&obj); Slf_OBJECT_FIELD *pf=new Slf_OBJECT_FIELD[FieldNum]; memset(pf,0,sizeof(Slf_OBJECT_FIELD)*FieldNum); GetSlfTableFieldInfo(index,pf); memmove(pInfo->Name,obj.Name,sizeof(pInfo->Name)); memmove(pInfo->AliasName,obj.HZName,sizeof(pInfo->AliasName)); memmove(pInfo->Unit,obj.Unit,sizeof(pInfo->Unit)); memmove(pInfo->AliasUnit,obj.HZUnit,sizeof(pInfo->AliasUnit)); memmove(pInfo->LogCopanyName,obj.LogCopanyName,sizeof(pInfo->LogCopanyName)); memmove(pInfo->LoggingTeam,obj.LoggingTeam,sizeof(pInfo->LoggingTeam)); memmove(pInfo->DataSource,obj.DataSource,sizeof(pInfo->DataSource)); memmove(pInfo->Operator,obj.Operator,sizeof(pInfo->Operator)); pInfo->SerialID=obj.SerialID; pInfo->LoggingDate=obj.LoggingDate; pInfo->ChangeNum=obj.ChangeNum; pInfo->CodeLen=pf[1].CodeLength; pInfo->RepCode=pf[1].RepCode; pInfo->DepLevel=pf[0].Rlev; pInfo->MaxValue=pf[1].Vmax; pInfo->MinValue=pf[1].Vmin; pInfo->DefVal=pf[1].DefVal; memmove(pInfo->Unit,pf[1].Unit,sizeof(pInfo->Unit)); memmove(pInfo->AliasUnit,pf[1].HZUnit,sizeof(pInfo->AliasUnit)); memmove(pInfo->DepthUnit,pf[0].Unit,sizeof(pInfo->DepthUnit)); memmove(pInfo->DepthHZUnit,pf[0].HZUnit,sizeof(pInfo->DepthHZUnit)); pInfo->StartDepth=pf[0].Start; pInfo->EndDepth=pf[0].Start+(rec-1)*pf[0].Rlev; delete []pf; return TRUE; } bool CLogIO :: SetSlfCurveInfo(int index,Slf_CURVE* pInfo) { if(index<0) return 0; int FieldNum=GetSlfTableFieldCount(index); int rec=GetSlfTableRecordCount(index); Slf_TABLE_ENTRY obj; GetSlfObjectEntry(index,&obj); Slf_OBJECT_FIELD *pf=new Slf_OBJECT_FIELD[FieldNum]; memset(pf,0,sizeof(Slf_OBJECT_FIELD)*FieldNum); GetSlfTableFieldInfo(index,pf); //whp add if(strlen(pInfo->AliasName)>sizeof(pInfo->AliasName))strcpy(pInfo->AliasName,pInfo->Name); if(strlen(pInfo->Unit)>sizeof(pInfo->Unit))strcpy(pInfo->Unit,""); if(strlen(pInfo->AliasUnit)>sizeof(pInfo->AliasUnit))strcpy(pInfo->AliasUnit,pInfo->Unit); if(strlen(pInfo->DepthUnit)>sizeof(pInfo->DepthUnit))strcpy(pInfo->DepthUnit,"m"); if(strlen(pInfo->DepthHZUnit)>sizeof(pInfo->DepthHZUnit))strcpy(pInfo->DepthHZUnit,"米"); if(strlen(pInfo->LogCopanyName)>sizeof(pInfo->LogCopanyName))strcpy(pInfo->LogCopanyName,""); if(strlen(pInfo->Operator)>sizeof(pInfo->Operator))strcpy(pInfo->Operator,""); if(strlen(pInfo->DataSource)>sizeof(pInfo->DataSource))strcpy(pInfo->DataSource,"create"); if(strlen(pInfo->LoggingTeam)>sizeof(pInfo->LoggingTeam))strcpy(pInfo->LoggingTeam,""); // memmove(obj.HZName,pInfo->AliasName,sizeof(obj.HZName)); memmove(obj.Name,pInfo->Name,sizeof(pInfo->Name)); memmove(obj.HZName,pInfo->AliasName,sizeof(obj.HZName)); memmove(obj.Unit,pInfo->Unit,sizeof(obj.Unit)); memmove(obj.HZUnit,pInfo->AliasUnit,sizeof(obj.HZUnit)); memmove(obj.LogCopanyName,pInfo->LogCopanyName,sizeof(obj.LogCopanyName)); memmove(obj.LoggingTeam,pInfo->LoggingTeam,sizeof(obj.LoggingTeam)); memmove(obj.DataSource,pInfo->DataSource,sizeof(obj.DataSource)); memmove(obj.Operator,pInfo->Operator,sizeof(obj.Operator)); obj.SerialID=pInfo->SerialID; obj.LoggingDate=pInfo->LoggingDate; obj.ChangeNum=pInfo->ChangeNum; WriteSlfObjectEntry(index,&obj); pf[1].Vmax=pInfo->MaxValue; pf[1].Vmin=pInfo->MinValue; pf[1].DefVal=pInfo->DefVal; if(pf[0].Rlev!=pInfo->DepLevel) SlfTableResamples(index,pInfo->DepLevel); memmove(pf[1].Unit,pInfo->Unit,sizeof(pf[1].Unit)); memmove(pf[1].HZUnit,pInfo->AliasUnit,sizeof(pf[1].HZUnit)); memmove(pf[0].Unit,pInfo->DepthUnit,sizeof(pf[0].Unit)); memmove(pf[0].HZUnit,pInfo->DepthHZUnit,sizeof(pf[0].Unit)); pf[0].Start=pInfo->StartDepth; SetSlfTableFieldInfo(index,pf,0); delete []pf; return TRUE; } int CLogIO :: CreateWisCurve(Slf_CURVE* pInfo,bool bFailExist) { if(pInfo->RepCode==0||pInfo->CodeLen==0) { pInfo->CodeLen=sizeof(float); pInfo->RepCode=REPR_FLOAT; } cpInfo.CodeLen=pInfo->CodeLen; cpInfo.RepCode=pInfo->RepCode; cpInfo.MaxVal=pInfo->MaxValue; cpInfo.MinVal=pInfo->MinValue; memmove(cpInfo.AliasName,pInfo->AliasName,sizeof(cpInfo.AliasName)); memmove(cpInfo.Unit,pInfo->Unit,sizeof(cpInfo.Unit)); memmove(cpInfo.AliasUnit,pInfo->AliasUnit,sizeof(cpInfo.AliasUnit)); memmove(cpInfo.DimInfo[0].Name,"Depth",sizeof("Depth")); cpInfo.DimInfo[0].RepCode=pInfo->RepCode; cpInfo.DimInfo[0].Delta=pInfo->DepLevel; memmove(cpInfo.DimInfo[0].AliasName,"none",sizeof(cpInfo.DimInfo[0].AliasName)); memmove(cpInfo.DimInfo[0].Unit,pInfo->DepthUnit,sizeof(cpInfo.DimInfo[0].Unit)); cpInfo.DimInfo[0].StartVal=pInfo->StartDepth; cpInfo.NumOfDimension=1; cpInfo.Reserved=0; cpInfo.DimInfo[0].Reserved=0; int ssam=((pInfo->EndDepth-pInfo->StartDepth)/cpInfo.DimInfo[0].Delta+1.5); if(ssam<0) ssam=0; cpInfo.DimInfo[0].Samples=ssam; cpInfo.DimInfo[0].MaxSamples=cpInfo.DimInfo[0].Samples; cpInfo.DimInfo[0].Size=pInfo->CodeLen; int index=CreateChannel(CURVE_OBJECT,pInfo->Name,&cpInfo,bFailExist); if(index>-1) { if(!Slf_Info[index]) Slf_Info[index]=new char [sizeof(Slf_CURVE)]; memmove(Slf_Info[index],pInfo,sizeof(Slf_CURVE)); return index; } else return -1; } int CLogIO :: CreateCurve(Slf_CURVE* pInfo,bool bFailExist) { if(pInfo->StartDepth<-1.0e+3||pInfo->EndDepth<-1.0e+3||pInfo->DepLevel<-1.0e+3) { QString cs=pInfo->Name; cs+="深度不正常,无法创建曲线!"; AfxMessageBox(cs); return -1; } if(IsWis) { return CreateWisCurve(pInfo,bFailExist); } return CreateSlfCurve(pInfo,bFailExist); } int CLogIO :: CreateSlfCurve(Slf_CURVE* pInfo,bool bFailExist) { //whp add if(strlen(pInfo->AliasName)>sizeof(pInfo->AliasName))strcpy(pInfo->AliasName,pInfo->Name); if(strlen(pInfo->Unit)>sizeof(pInfo->Unit))strcpy(pInfo->Unit,""); if(strlen(pInfo->AliasUnit)>sizeof(pInfo->AliasUnit))strcpy(pInfo->AliasUnit,pInfo->Unit); if(strlen(pInfo->DepthUnit)>sizeof(pInfo->DepthUnit))strcpy(pInfo->DepthUnit,"m"); if(strlen(pInfo->DepthHZUnit)>sizeof(pInfo->DepthHZUnit))strcpy(pInfo->DepthHZUnit,"米"); if(strlen(pInfo->LogCopanyName)>sizeof(pInfo->LogCopanyName))strcpy(pInfo->LogCopanyName,""); if(strlen(pInfo->Operator)>sizeof(pInfo->Operator))strcpy(pInfo->Operator,""); if(strlen(pInfo->DataSource)>sizeof(pInfo->DataSource))strcpy(pInfo->DataSource,"create"); if(strlen(pInfo->LoggingTeam)>sizeof(pInfo->LoggingTeam))strcpy(pInfo->LoggingTeam,""); // int FieldNum=2; Slf_OBJECT_FIELD *pf=new Slf_OBJECT_FIELD[FieldNum]; memset(pf,0,sizeof(Slf_OBJECT_FIELD)*FieldNum); strcpy(pf[0].Name,"Depth"); strcpy(pf[0].HZName,"深度"); //memmove(pf[0].HZUnit,pInfo->DepthUnit,sizeof(pf[0].Unit)); //memmove(pf[0].Unit,pInfo->DepthHZUnit,sizeof(pf[0].Unit)); if(pInfo->DepthUnit=="m"&&pInfo->DepthHZUnit!="m"&&pInfo->DepthHZUnit!="米") { strcpy(pInfo->DepthHZUnit,"米"); } else if(pInfo->DepthUnit=="ft"&&pInfo->DepthHZUnit!="ft"&&pInfo->DepthHZUnit!="英尺") { strcpy(pInfo->DepthHZUnit,"英尺"); } memmove(pf[0].HZUnit,pInfo->DepthHZUnit,sizeof(pf[0].HZUnit)); memmove(pf[0].Unit,pInfo->DepthUnit,sizeof(pf[0].Unit)); pf[0].DefVal=0; pf[0].ArrayNum=1; pf[0].CodeLength=pInfo->CodeLen; pf[0].RepCode=pInfo->RepCode; pf[0].Rlev=pInfo->DepLevel; pf[0].Vmax=pInfo->EndDepth; pf[0].Vmin=pInfo->StartDepth; pf[0].Start=pInfo->StartDepth; pf[0].SamplePoint=1; pf[0].Sequence=1; strcpy(pf[0].Reserved,"WangWei 2.0"); memmove(pf[1].Name,pInfo->Name,sizeof(pf[1].Name)); memmove(pf[1].HZName,pInfo->AliasName,sizeof(pf[1].HZName)); pf[1].DefVal=pInfo->DefVal; memmove(pf[1].Unit,pInfo->Unit,sizeof(pf[1].Unit)); memmove(pf[1].HZUnit,pInfo->AliasUnit,sizeof(pf[1].HZUnit)); pf[1].CodeLength=pInfo->CodeLen; pf[1].RepCode=pInfo->RepCode; pf[1].Rlev=1; pf[1].Vmax=pInfo->MaxValue; pf[1].Vmin=pInfo->MinValue; pf[1].Start=pInfo->StartDepth; pf[1].ArrayNum=1; pf[1].SamplePoint=1; pf[1].Sequence=0; strcpy(pf[1].Reserved,"WangWei 2.0"); int index=CreateSlfTable(CURVE_OBJECT,pInfo->Name,pInfo->AliasName,2,pf); Slf_TABLE_ENTRY obj; GetSlfObjectEntry(index,&obj); memmove(obj.HZName,pf[1].HZName,sizeof(obj.HZName)); memmove(obj.Unit,pf[1].Unit,sizeof(obj.Unit)); memmove(obj.HZUnit,pf[1].HZUnit,sizeof(obj.HZUnit)); memmove(obj.LogCopanyName,pInfo->LogCopanyName,sizeof(obj.LogCopanyName)); memmove(obj.LoggingTeam,pInfo->LoggingTeam,sizeof(obj.LoggingTeam)); memmove(obj.DataSource,pInfo->DataSource,sizeof(obj.DataSource)); memmove(obj.Operator,pInfo->Operator,sizeof(obj.Operator)); obj.SerialID=pInfo->SerialID; obj.LoggingDate=pInfo->LoggingDate; obj.ChangeNum=pInfo->ChangeNum; WriteSlfObjectEntry(index,&obj); delete []pf; if(index>-1) { int rec=(pInfo->EndDepth-pInfo->StartDepth)/pInfo->DepLevel+1.5; SetSlfTableRecordCount(index,rec); } return index; } void CLogIO :: CloseWisCurve(int index) { if(Slf_Info[index])delete Slf_Info[index]; Slf_Info[index]=NULL; CloseChannel(index); } void CLogIO :: CloseSlfCurve(int index) { CloseSlfTable(index); } void CLogIO :: CloseCurve(int index) { if(IsWis) CloseWisCurve(index); else CloseSlfCurve(index); } DWORD CLogIO ::ReadWisCurve(int index, float depth, DWORD count, char* buffer) { m_Curve=(Slf_CURVE*)Slf_Info[index]; int pos=0; Slf_CHANNEL *m_Channel=(Slf_CHANNEL *)Slf_Info_Head[index]; float val=-9999.0; int len=m_Channel->DimInfo[0].Size/RepSize[m_Channel->RepCode]; if(depthStartDepth) { pos=(m_Curve->StartDepth-depth)/m_Curve->DepLevel+0.5; if(pos>count) pos=count; for(int i=0;iRepCode,&buffer[m_Channel->DimInfo[0].Size*i+j*m_Channel->CodeLen],&val); } } count-=pos; pos*=m_Channel->DimInfo[0].Size; depth=m_Curve->StartDepth; } if(count>m_Channel->DimInfo[0].Samples) { for(int i=m_Channel->DimInfo[0].Samples;iRepCode,&buffer[m_Channel->DimInfo[0].Size*i+j*m_Channel->CodeLen],&val); } } } int samples=Slf_Int(depth,m_Curve->StartDepth,m_Curve->DepLevel);//((depth-m_Curve->StartDepth)/m_Curve->DepLevel+0.5); if(samples<0) samples=0; return ReadChannel(index,&buffer[pos],count,samples); } DWORD CLogIO ::ReadCurve(int index, float depth, DWORD count, void* buffer) { if(IsWis) { return ReadWisCurve(index,depth,count,(char *)buffer); } return ReadSlfCurve(index,depth,count,(char *)buffer); } DWORD CLogIO ::ReadCurve(int index, float depth, DWORD count, char* buffer) { Slf_CURVE m_Curve; GetCurveInfo(index,&m_Curve); if(m_Curve.RepCode==REPR_CHAR) return ReadCurve(index, depth, count, (void *)buffer); MyDataTypeEnum vVdl; vVdl.vchar=new char[count*m_Curve.CodeLen]; DWORD len=ReadCurve(index, depth, count, (void *)vVdl.vchar); for(DWORD i=0;i10000000) return 0; if(pf[0].Start<=-4.3160208e+008) return 0; if(pf[0].RepCode<0||pf[0].RepCode>REPR_ULONG)return 0; if(pf[0].CodeLength<0)return 0; if(pf[1].CodeLength<=0) return 0; if(pf[1].ArrayNum<0) return 0; if(pf[1].RepCode<0) return 0; if(pf[1].DefVal!=-999.25&&pf[1].DefVal!=-9999||pf[1].DefVal!=-99999) pf[1].DefVal=-9999; int pos=Slf_Int(depth,pf[0].Start,pf[0].Rlev); if(pos<0) { pos=(pf[0].Start-depth)/pf[0].Rlev+0.5; int m=pos; if(pos>count) m=count; char *t=new char[pf[1].CodeLength]; SetData(pf[1].RepCode,t,&pf[1].DefVal); for(int i=0;iStartDepth; pos*=reclen; } else pos=0; if(count>rec) { if(pf[1].CodeLength<0) { delete []pf; return 0; } char *t=new char[pf[1].CodeLength]; SetData(pf[1].RepCode,t,&pf[1].DefVal); for(int i=rec*pf[1].ArrayNum*pf[1].SamplePoint;iStartDepth) { float move=m_Curve->StartDepth-depth; WisExpandDepth(index,m_Curve->EndDepth,m_Curve->EndDepth+move); WisMoveDepth(index,m_Curve->StartDepth,m_Curve->EndDepth,move); m_Curve->StartDepth-=move; m_Channel->DimInfo[0].StartVal=m_Curve->StartDepth; depth=m_Curve->StartDepth; } int samples=((depth-m_Curve->StartDepth)/m_Curve->DepLevel+0.5); if(samples<0) samples=0; float yy; DWORD POS=0; for(DWORD i=0;iRepCode,&buffer[POS],&yy); if(m_Channel->MaxValMaxVal=yy; if(m_Channel->MinVal>yy) m_Channel->MinVal=yy; POS+=m_Channel->CodeLen; } WriteChannelInfo(index); return WriteChannel(index,buffer,count,samples); } DWORD CLogIO ::WriteCurve(int index, float depth, DWORD count, char* buffer) { Slf_CURVE m_Curve; GetCurveInfo(index,&m_Curve); if(m_Curve.RepCode==REPR_CHAR) return WriteCurve(index, depth, count, (void *)buffer); MyDataTypeEnum vVdl; vVdl.vchar=new char[count*m_Curve.CodeLen]; WriteBuf((char *)buffer,REPR_CHAR,sizeof(short),vVdl,m_Curve.RepCode,count,1); DWORD len=WriteCurve(index, depth, count, (void *)vVdl.vchar); delete vVdl.vchar; return len; } DWORD CLogIO ::WriteCurve(int index, float depth, DWORD count, void* buffer) { if(IsWis) { return WriteWisCurve(index,depth,count,(char *)buffer); } return WriteSlfCurve(index,depth,count,(char *)buffer); } DWORD CLogIO ::WriteSlfCurve(int index, float depth, DWORD count, char* buffer) { int FieldNum=GetSlfTableFieldCount(index); Slf_OBJECT_FIELD *pf=new Slf_OBJECT_FIELD[FieldNum]; memset(pf,0,sizeof(Slf_OBJECT_FIELD)*FieldNum); GetSlfTableFieldInfo(index,pf); int First=Slf_Int(depth,pf[0].Start,pf[0].Rlev); int EndRec=First+count; delete []pf; return WriteSlfTable(index,EndRec,buffer,First); } DWORD CLogIO ::WriteCurve(int index, float depth, DWORD count, short* buffer) { Slf_CURVE m_Curve; GetCurveInfo(index,&m_Curve); if(m_Curve.RepCode==REPR_SHORT) return WriteCurve(index, depth, count, (void *)buffer); MyDataTypeEnum vVdl; vVdl.vchar=new char[count*m_Curve.CodeLen]; WriteBuf((char *)buffer,REPR_SHORT,sizeof(short),vVdl,m_Curve.RepCode,count,1); DWORD len=WriteCurve(index, depth, count, (void *)vVdl.vchar); delete vVdl.vchar; return len; } DWORD CLogIO ::WriteCurve(int index, float depth, DWORD count, int* buffer) { Slf_CURVE m_Curve; GetCurveInfo(index,&m_Curve); if(m_Curve.RepCode==REPR_INT) return WriteCurve(index, depth, count, (void *)buffer); MyDataTypeEnum vVdl; vVdl.vchar=new char[count*m_Curve.CodeLen]; WriteBuf((char *)buffer,REPR_INT,sizeof(int),vVdl,m_Curve.RepCode,count,1); DWORD len=WriteCurve(index, depth, count, (void *)vVdl.vchar); delete vVdl.vchar; return len; } /* DWORD CLogIO ::WriteCurve(int index, float depth, DWORD count, long* buffer) { Slf_CURVE m_Curve; GetCurveInfo(index,&m_Curve); if(m_Curve.RepCode==REPR_LONG) return WriteCurve(index, depth, count, (void *)buffer); MyDataTypeEnum vVdl; vVdl.vchar=new char[count*m_Curve.CodeLen]; WriteBuf((char *)buffer,REPR_LONG,sizeof(long),vVdl,m_Curve.RepCode,count,1); DWORD len=WriteCurve(index, depth, count, (void *)vVdl.vchar); delete vVdl.vchar; return len; }*/ DWORD CLogIO ::WriteCurve(int index, float depth, DWORD count, unsigned char* buffer) { return WriteCurve(index, depth, count, (char*) buffer); } DWORD CLogIO ::WriteCurve(int index, float depth, DWORD count, unsigned short* buffer) { Slf_CURVE m_Curve; GetCurveInfo(index,&m_Curve); if(m_Curve.RepCode==REPR_SHORT) return WriteCurve(index, depth, count, (void *)buffer); MyDataTypeEnum vVdl; vVdl.vchar=new char[count*m_Curve.CodeLen]; WriteBuf((char *)buffer,REPR_USHORT,sizeof(short),vVdl,m_Curve.RepCode,count,1); DWORD len=WriteCurve(index, depth, count, (void *)vVdl.vchar); delete vVdl.vchar; return len; } DWORD CLogIO ::WriteCurve(int index, float depth, DWORD count, unsigned int* buffer) { Slf_CURVE m_Curve; GetCurveInfo(index,&m_Curve); if(m_Curve.RepCode==REPR_UINT) return WriteCurve(index, depth, count, (void *)buffer); MyDataTypeEnum vVdl; vVdl.vchar=new char[count*m_Curve.CodeLen]; WriteBuf((char *)buffer,REPR_UINT,sizeof(int),vVdl,m_Curve.RepCode,count,1); DWORD len=WriteCurve(index, depth, count, (void *)vVdl.vchar); delete vVdl.vchar; return len; } /* DWORD CLogIO ::WriteCurve(int index, float depth, DWORD count, unsigned long* buffer) { Slf_CURVE m_Curve; GetCurveInfo(index,&m_Curve); if(m_Curve.RepCode==REPR_ULONG) return WriteCurve(index, depth, count, (void *)buffer); MyDataTypeEnum vVdl; vVdl.vchar=new char[count*m_Curve.CodeLen]; WriteBuf((char *)buffer,REPR_ULONG,sizeof(long),vVdl,m_Curve.RepCode,count,1); DWORD len=WriteCurve(index, depth, count, (void *)vVdl.vchar); delete vVdl.vchar; return len; }*/ DWORD CLogIO ::WriteCurve(int index, float depth, DWORD count, float* buffer) { Slf_CURVE m_Curve; GetCurveInfo(index,&m_Curve); if(m_Curve.RepCode==REPR_FLOAT) return WriteCurve(index, depth, count, (void *)buffer); MyDataTypeEnum vVdl; vVdl.vchar=new char[count*m_Curve.CodeLen]; WriteBuf((char *)buffer,REPR_FLOAT,sizeof(float),vVdl,m_Curve.RepCode,count,1); DWORD len=WriteCurve(index, depth, count, (void *)vVdl.vchar); delete vVdl.vchar; return len; } DWORD CLogIO ::WriteCurve(int index, float depth, DWORD count, double* buffer) { Slf_CURVE m_Curve; GetCurveInfo(index,&m_Curve); if(m_Curve.RepCode==REPR_DOUBLE) return WriteCurve(index, depth, count, (void *)buffer); MyDataTypeEnum vVdl; vVdl.vchar=new char[count*m_Curve.CodeLen]; WriteBuf((char *)buffer,REPR_DOUBLE,sizeof(double),vVdl,m_Curve.RepCode,count,1); DWORD len=WriteCurve(index, depth, count, (void *)vVdl.vchar); delete vVdl.vchar; return len; } //whp add 不关心曲线的数据类型,将数据读到浮点缓冲区或将浮点缓冲区中的数据写入曲线 DWORD CLogIO ::ReadCurveToFloatBuf(int index, float depth, DWORD count, float* buffer) { Slf_CURVE m_Curve; GetCurveInfo(index,&m_Curve); MyDataTypeEnum vVdl; vVdl.vchar=new char[(count+1)*m_Curve.CodeLen]; DWORD len=ReadCurve(index, depth, count, (void *)vVdl.vchar); if(m_Curve.RepCode==4)memmove(buffer,vVdl.vfloat,count*sizeof(float)); else { for(DWORD i=0;i-1) { if(!Slf_Info[index]) Slf_Info[index]=new char [sizeof(Slf_WAVE)]; m_Wave=(Slf_WAVE*)Slf_Info[index]; GetWaveInfo(index,m_Wave); return index; } else return -1; } int CLogIO ::OpenSlfWave(const char* name) { int index=FindSlfObjectName((char *)name,WAVE_OBJECT); if(index<0)return -1; return OpenSlfTable(name,WAVE_OBJECT); } int CLogIO ::OpenWave(Slf_WAVE* pInfo) { int index=OpenWave(pInfo->Name); if(index>-1) { Slf_WAVE info; GetWaveInfo(index,&info); if(IsWis) { if(info.CodeLen!=pInfo->CodeLen||info.RepCode!=pInfo->RepCode||info.TimeSamples!=pInfo->TimeSamples) { char newname[200]; strcpy(newname,pInfo->Name); strcat(newname,".bak"); char sss[200]; sprintf(sss,"The wave is renamed:%s",newname); AfxMessageBox(sss); RenameObject(pInfo->Name,newname); index=-1; } } else { //if(info.CodeLen!=pInfo->CodeLen||info.RepCode!=pInfo->RepCode||info.DefVal!=pInfo->DefVal||info.TimeSamples!=pInfo->TimeSamples) if(info.CodeLen!=pInfo->CodeLen||info.RepCode!=pInfo->RepCode||info.TimeSamples!=pInfo->TimeSamples) { char newname[200]; strcpy(newname,pInfo->Name); strcat(newname,".bak"); // CString s1; //s1.Format("info.CodeLen=%d,pInfo->CodeLen=%d\r\ninfo.RepCode=%d,pInfo->RepCode=%d\r\ninfo.TimeSamples=%d,pInfo->TimeSamples=%d", // info.CodeLen,pInfo->CodeLen,info.RepCode,pInfo->RepCode,info.TimeSamples,pInfo->TimeSamples); char buf[500]; sprintf(buf,"info.CodeLen=%d,pInfo->CodeLen=%d\r\ninfo.RepCode=%d,pInfo->RepCode=%d\r\ninfo.TimeSamples=%d,pInfo->TimeSamples=%d", info.CodeLen, pInfo->CodeLen, info.RepCode, pInfo->RepCode, info.TimeSamples, pInfo->TimeSamples); //s1.Format("info.CodeLen=%d,pCurve->CodeLen=%d\r\ninfo.RepCode=%d,pCurve->RepCode=%d\r\n", // info.CodeLen,pCurve->CodeLen,info.RepCode,pCurve->RepCode); QString s1(buf); char sss[500]; sprintf(sss,"The wave is renname as:%s\r\n",newname); AfxMessageBox(sss+s1); RenameObject(pInfo->Name,newname); index=-1; } } } if(index<0) { if(IsWis) return CreateWisWave(pInfo); else return CreateSlfWave(pInfo); } return index; } int CLogIO ::CreateWave(Slf_WAVE* pInfo,bool bFailExist) { if(IsWis) return CreateWisWave(pInfo,bFailExist); return CreateSlfWave(pInfo,bFailExist); } int CLogIO ::CreateSlfWave(Slf_WAVE* pInfo,bool bFailExist) { //whp add if(pInfo->ArrayNum<1)pInfo->ArrayNum=1; if(pInfo->ArrayNum>10000)pInfo->ArrayNum=1; //if(pInfo->ArrayNum>10000)pInfo->ArrayNum=1;语句是为了防止pInfo->ArrayNum变量没有初始化的情况 //当变量没有初始化时,在debug版本中,往往是一个负无穷大值;而在release版本中,经常是一个正的无穷大值,但有时也会是一个看起来很正常的值(如4) //所以建议在调用CreateSlfWave函数时,要给pInfo->ArrayNum赋初值 //pInfo->ArrayNum>10000,认为正常情况下,不会有大于10000维的阵列数据,如果真的有,这个限制就会得出错误的结果 if(strlen(pInfo->AliasName)>sizeof(pInfo->AliasName))strcpy(pInfo->AliasName,pInfo->Name); if(strlen(pInfo->Unit)>sizeof(pInfo->Unit))strcpy(pInfo->Unit,""); if(strlen(pInfo->AliasUnit)>sizeof(pInfo->AliasUnit))strcpy(pInfo->AliasUnit,pInfo->Unit); if(strlen(pInfo->DepthUnit)>sizeof(pInfo->DepthUnit))strcpy(pInfo->DepthUnit,"m"); if(strlen(pInfo->DepthHZUnit)>sizeof(pInfo->DepthHZUnit))strcpy(pInfo->DepthHZUnit,"米"); if(strlen(pInfo->LogCopanyName)>sizeof(pInfo->LogCopanyName))strcpy(pInfo->LogCopanyName,""); if(strlen(pInfo->Operator)>sizeof(pInfo->Operator))strcpy(pInfo->Operator,""); if(strlen(pInfo->DataSource)>sizeof(pInfo->DataSource))strcpy(pInfo->DataSource,"create"); if(strlen(pInfo->LoggingTeam)>sizeof(pInfo->LoggingTeam))strcpy(pInfo->LoggingTeam,""); if(strlen(pInfo->TimeName)>sizeof(pInfo->TimeName)||pInfo->TimeName==NULL)strcpy(pInfo->TimeName,"TIME"); if(strlen(pInfo->TimeHZName)>sizeof(pInfo->TimeHZName)||pInfo->TimeHZName==NULL)strcpy(pInfo->TimeHZName,"时间"); if(strlen(pInfo->TimeUnit)>sizeof(pInfo->TimeUnit)||pInfo->TimeUnit==NULL)strcpy(pInfo->TimeUnit,"us"); if(strlen(pInfo->TimeHZUnit)>sizeof(pInfo->TimeHZUnit)||pInfo->TimeHZUnit==NULL)strcpy(pInfo->TimeHZUnit,pInfo->TimeUnit); // int FieldNum=3; Slf_OBJECT_FIELD *pf=new Slf_OBJECT_FIELD[FieldNum]; memset(pf,0,sizeof(Slf_OBJECT_FIELD)*FieldNum); strcpy(pf[0].Name,"Depth"); strcpy(pf[0].HZName,"深度"); if(pInfo->DepthUnit=="m"&&pInfo->DepthHZUnit!="m"&&pInfo->DepthHZUnit!="米") { strcpy(pInfo->DepthHZUnit,"米"); } else if(pInfo->DepthUnit=="ft"&&pInfo->DepthHZUnit!="ft"&&pInfo->DepthHZUnit!="英尺") { strcpy(pInfo->DepthHZUnit,"英尺"); } memmove(pf[0].HZUnit,pInfo->DepthHZUnit,sizeof(pf[0].HZUnit)); memmove(pf[0].Unit,pInfo->DepthUnit,sizeof(pf[0].Unit)); pf[0].DefVal=0; pf[0].ArrayNum=1; pf[0].CodeLength=pInfo->CodeLen; pf[0].RepCode=pInfo->RepCode; pf[0].Rlev=pInfo->DepLevel; pf[0].Vmax=pInfo->EndDepth; pf[0].Vmin=pInfo->StartDepth; pf[0].Start=pInfo->StartDepth; pf[0].SamplePoint=1; pf[0].Sequence=1; strcpy(pf[0].Reserved,"WangWei 2.0"); strcpy(pf[1].Name,pInfo->Name); strcpy(pf[1].HZName,pInfo->AliasName); pf[1].DefVal=pInfo->DefVal; memmove(pf[1].Unit,pInfo->Unit,sizeof(pf[1].Unit)); memmove(pf[1].HZUnit,pInfo->AliasUnit,sizeof(pf[1].HZUnit)); pf[1].CodeLength=pInfo->CodeLen; pf[1].RepCode=pInfo->RepCode; pf[1].Rlev=1; pf[1].Vmax=pInfo->MaxValue; pf[1].Vmin=pInfo->MinValue; pf[1].Start=pInfo->StartDepth; pf[1].ArrayNum=pInfo->ArrayNum; pf[1].SamplePoint=pInfo->TimeSamples/pInfo->ArrayNum; pf[1].Sequence=0; strcpy(pf[1].Reserved,"WangWei 2.0"); memmove(pf[2].Name,pInfo->TimeName,sizeof(pf[2].Name)); memmove(pf[2].HZName,pInfo->TimeHZName,sizeof(pf[2].HZName)); //strcpy(pf[2].Name,"TIME"); //strcpy(pf[2].HZName,"时间"); pf[2].DefVal=-9999.0; memmove(pf[2].Unit,pInfo->TimeUnit,sizeof(pf[2].Unit)); memmove(pf[2].HZUnit,pInfo->TimeHZUnit,sizeof(pf[2].HZUnit)); pf[2].CodeLength=pInfo->CodeLen; pf[2].RepCode=pInfo->RepCode; pf[2].Rlev=pInfo->TimeLevel; pf[2].Vmax=-1024; pf[2].Vmin=1024; pf[2].Start=pInfo->StartTime; pf[2].ArrayNum=pInfo->ArrayNum; pf[2].SamplePoint=pInfo->TimeSamples/pInfo->ArrayNum; pf[2].Sequence=1; strcpy(pf[2].Reserved,"WangWei 2.0"); int index=CreateSlfTable(WAVE_OBJECT,pInfo->Name,pInfo->AliasName,3,pf); Slf_TABLE_ENTRY obj; GetSlfObjectEntry(index,&obj); memmove(obj.HZName,pf[1].HZName,sizeof(obj.HZName)); memmove(obj.Unit,pf[1].Unit,sizeof(obj.Unit)); memmove(obj.HZUnit,pf[1].HZUnit,sizeof(obj.HZUnit)); memmove(obj.LogCopanyName,pInfo->LogCopanyName,sizeof(obj.LogCopanyName)); memmove(obj.LoggingTeam,pInfo->LoggingTeam,sizeof(obj.LoggingTeam)); memmove(obj.DataSource,pInfo->DataSource,sizeof(obj.DataSource)); memmove(obj.Operator,pInfo->Operator,sizeof(obj.Operator)); obj.SerialID=pInfo->SerialID; obj.LoggingDate=pInfo->LoggingDate; obj.ChangeNum=pInfo->ChangeNum; WriteSlfObjectEntry(index,&obj); delete []pf; if(index>-1) { int recnum=(pInfo->EndDepth-pInfo->StartDepth)/pInfo->DepLevel+1.5; SetSlfTableRecordCount(index,recnum); } return index; } int CLogIO ::CreateWisWave(Slf_WAVE* pInfo,bool bFailExist) { memmove(cpInfo.AliasName,pInfo->AliasName,sizeof(cpInfo.AliasName)); memmove(cpInfo.Unit,pInfo->Unit,sizeof(cpInfo.Unit)); memmove(cpInfo.AliasUnit,pInfo->AliasUnit,sizeof(cpInfo.AliasUnit)); cpInfo.RepCode=pInfo->RepCode; cpInfo.CodeLen=pInfo->CodeLen; cpInfo.MaxVal =pInfo->MaxValue; cpInfo.MinVal =pInfo->MinValue; cpInfo.NumOfDimension=2; memmove(cpInfo.DimInfo[0].Name,"Depth",sizeof(cpInfo.DimInfo[0].Name)); memmove(cpInfo.DimInfo[0].Unit,pInfo->DepthUnit,sizeof(cpInfo.DimInfo[0].Unit)); memmove(cpInfo.DimInfo[0].AliasName,"none",strlen("none")); cpInfo.DimInfo[0].StartVal=pInfo->StartDepth; cpInfo.DimInfo[0].Delta =pInfo->DepLevel; int ssam=(pInfo->EndDepth-pInfo->StartDepth)/cpInfo.DimInfo[0].Delta+1.5; if(ssam<0)ssam=0; cpInfo.DimInfo[0].Samples =ssam; cpInfo.DimInfo[0].MaxSamples=ssam; cpInfo.DimInfo[0].RepCode =4; cpInfo.DimInfo[0].Size =pInfo->CodeLen*pInfo->TimeSamples; memmove(cpInfo.DimInfo[1].Name,"Time",strlen("Time")); memmove(cpInfo.DimInfo[1].AliasName,cpInfo.DimInfo[1].Name,sizeof(cpInfo.DimInfo[1].Name)); memmove(cpInfo.DimInfo[1].Unit,pInfo->TimeUnit,sizeof(pInfo->TimeUnit)); cpInfo.DimInfo[1].RepCode =pInfo->RepCode; cpInfo.DimInfo[1].Delta =pInfo->TimeLevel; cpInfo.DimInfo[1].StartVal=pInfo->StartTime; cpInfo.DimInfo[1].Samples =pInfo->TimeSamples; cpInfo.DimInfo[1].MaxSamples=pInfo->TimeSamples; cpInfo.DimInfo[1].Size=1; cpInfo.DimInfo[1].RepCode=pInfo->RepCode; int index=CreateChannel(WAVE_OBJECT,pInfo->Name,&cpInfo,bFailExist); if(index>-1) { if(!Slf_Info[index]) Slf_Info[index]=new char [sizeof(Slf_WAVE)]; memmove(Slf_Info[index],pInfo,sizeof(Slf_WAVE)); return index; } else return -1; } void CLogIO ::CloseWave(int index) { CloseChannel(index); } bool CLogIO ::GetWaveInfo(int index,Slf_WAVE* pInfo) { if(IsWis) { return GetWisWaveInfo(index,pInfo); } return GetSlfWaveInfo(index,pInfo); } bool CLogIO ::GetSlfWaveInfo(int index,Slf_WAVE* pInfo) { if(index<0) return 0; int FieldNum=GetSlfTableFieldCount(index); int rec=GetSlfTableRecordCount(index); Slf_TABLE_ENTRY obj; GetSlfObjectEntry(index,&obj); Slf_OBJECT_FIELD *pf=new Slf_OBJECT_FIELD[FieldNum]; memset(pf,0,sizeof(Slf_OBJECT_FIELD)*FieldNum); GetSlfTableFieldInfo(index,pf); memmove(pInfo->AliasName,obj.HZName,sizeof(pInfo->AliasName)); memmove(pInfo->Name,obj.Name,sizeof(pInfo->Name)); memmove(pInfo->Unit,pf[1].Unit,sizeof(pInfo->Unit)); memmove(pInfo->AliasUnit,pf[1].HZUnit,sizeof(pInfo->AliasUnit)); memmove(pInfo->DepthUnit,pf[0].Unit,sizeof(pInfo->DepthUnit)); memmove(pInfo->DepthHZUnit,pf[0].HZUnit,sizeof(pInfo->DepthHZUnit)); memmove(pInfo->LogCopanyName,obj.LogCopanyName,sizeof(pInfo->LogCopanyName)); memmove(pInfo->LoggingTeam,obj.LoggingTeam,sizeof(pInfo->LoggingTeam)); memmove(pInfo->DataSource,obj.DataSource,sizeof(pInfo->DataSource)); memmove(pInfo->Operator,obj.Operator,sizeof(pInfo->Operator)); pInfo->SerialID=obj.SerialID; pInfo->LoggingDate=obj.LoggingDate; pInfo->ChangeNum=obj.ChangeNum; pInfo->CodeLen=pf[1].CodeLength; pInfo->RepCode=pf[1].RepCode; if(pInfo->RepCode>=sizeof(RepSize)) { pInfo->RepCode=2; } pInfo->DepLevel=pf[0].Rlev; pInfo->MaxValue=pf[1].Vmax; pInfo->MinValue=pf[1].Vmin; pInfo->StartDepth=pf[0].Start; pInfo->EndDepth=pf[0].Start+(rec-1)*pf[0].Rlev; pInfo->StartTime=pf[2].Start; pInfo->TimeLevel=pf[2].Rlev; pInfo->SamplePoint=pf[2].SamplePoint; pInfo->TimeSamples=pf[2].SamplePoint*pf[1].ArrayNum; memmove(pInfo->TimeUnit,pf[2].Unit,sizeof(pInfo->TimeUnit)); memmove(pInfo->TimeHZUnit,pf[2].HZUnit,sizeof(pInfo->TimeHZUnit)); memmove(pInfo->TimeName,pf[2].Name,sizeof(pInfo->TimeName)); memmove(pInfo->TimeHZName,pf[2].HZName,sizeof(pInfo->TimeHZName)); pInfo->ArrayNum=pf[1].ArrayNum;//whp add 2011.11.8 delete []pf; return TRUE; } bool CLogIO ::SetSlfWaveInfo(int index,Slf_WAVE* pInfo) { if(index<0) return 0; int FieldNum=GetSlfTableFieldCount(index); int rec=GetSlfTableRecordCount(index); Slf_TABLE_ENTRY obj; GetSlfObjectEntry(index,&obj); Slf_OBJECT_FIELD *pf=new Slf_OBJECT_FIELD[FieldNum]; memset(pf,0,sizeof(Slf_OBJECT_FIELD)*FieldNum); GetSlfTableFieldInfo(index,pf); //whp add if(pInfo->ArrayNum<1)pInfo->ArrayNum=1; if(strlen(pInfo->AliasName)>sizeof(pInfo->AliasName))strcpy(pInfo->AliasName,pInfo->Name); if(strlen(pInfo->Unit)>sizeof(pInfo->Unit))strcpy(pInfo->Unit,""); if(strlen(pInfo->AliasUnit)>sizeof(pInfo->AliasUnit))strcpy(pInfo->AliasUnit,pInfo->Unit); if(strlen(pInfo->DepthUnit)>sizeof(pInfo->DepthUnit))strcpy(pInfo->DepthUnit,"m"); if(strlen(pInfo->DepthHZUnit)>sizeof(pInfo->DepthHZUnit))strcpy(pInfo->DepthHZUnit,"米"); if(strlen(pInfo->LogCopanyName)>sizeof(pInfo->LogCopanyName))strcpy(pInfo->LogCopanyName,""); if(strlen(pInfo->Operator)>sizeof(pInfo->Operator))strcpy(pInfo->Operator,""); if(strlen(pInfo->DataSource)>sizeof(pInfo->DataSource))strcpy(pInfo->DataSource,"create"); if(strlen(pInfo->LoggingTeam)>sizeof(pInfo->LoggingTeam))strcpy(pInfo->LoggingTeam,""); if(strlen(pInfo->TimeName)>sizeof(pInfo->TimeName)||pInfo->TimeName==NULL)strcpy(pInfo->TimeName,"TIME"); if(strlen(pInfo->TimeHZName)>sizeof(pInfo->TimeHZName)||pInfo->TimeHZName==NULL)strcpy(pInfo->TimeHZName,"时间"); if(strlen(pInfo->TimeUnit)>sizeof(pInfo->TimeUnit)||pInfo->TimeUnit==NULL)strcpy(pInfo->TimeUnit,"us"); if(strlen(pInfo->TimeHZUnit)>sizeof(pInfo->TimeHZUnit)||pInfo->TimeHZUnit==NULL)strcpy(pInfo->TimeHZUnit,pInfo->TimeUnit); // memmove(obj.Name,pInfo->Name,sizeof(obj.Name)); memmove(obj.HZName,pInfo->AliasName,sizeof(obj.HZName)); memmove(obj.Unit,pInfo->Unit,sizeof(obj.Unit)); memmove(obj.HZUnit,pInfo->AliasUnit,sizeof(obj.HZUnit)); memmove(obj.LogCopanyName,pInfo->LogCopanyName,sizeof(obj.LogCopanyName)); memmove(obj.LoggingTeam,pInfo->LoggingTeam,sizeof(obj.LoggingTeam)); memmove(obj.DataSource,pInfo->DataSource,sizeof(obj.DataSource)); memmove(obj.Operator,pInfo->Operator,sizeof(obj.Operator)); obj.SerialID=pInfo->SerialID; obj.LoggingDate=pInfo->LoggingDate; obj.ChangeNum=pInfo->ChangeNum; WriteSlfObjectEntry(index,&obj); pf[1].Vmax=pInfo->MaxValue; pf[1].Vmin=pInfo->MinValue; if(pf[0].Rlev!=pInfo->DepLevel) SlfTableResamples(index,pInfo->DepLevel); memmove(pf[1].Unit,pInfo->Unit,sizeof(pf[1].Unit)); memmove(pf[1].HZUnit,pInfo->AliasUnit,sizeof(pf[1].HZUnit)); memmove(pf[0].Unit,pInfo->DepthUnit,sizeof(pf[0].Unit)); memmove(pf[0].HZUnit,pInfo->DepthHZUnit,sizeof(pf[0].HZUnit)); pf[0].Start=pInfo->StartDepth; pf[2].Start=pInfo->StartTime; pf[2].Rlev=pInfo->TimeLevel; pf[2].SamplePoint=pInfo->SamplePoint; //TimeSamples; //whp add memmove(pf[2].Name,pInfo->TimeName,sizeof(pf[2].Name)); memmove(pf[2].HZName,pInfo->TimeHZName,sizeof(pf[2].HZName)); memmove(pf[2].Unit,pInfo->TimeUnit,sizeof(pf[2].Unit)); memmove(pf[2].HZUnit,pInfo->TimeHZUnit,sizeof(pf[2].Unit)); pf[1].ArrayNum=pInfo->ArrayNum;//whp add 2011.11.8 SetSlfTableFieldInfo(index,pf,0); delete []pf; return TRUE; } bool CLogIO ::GetWisWaveInfo(int index,Slf_WAVE* pInfo) { GetChannelInfo(index,&cpInfo); memmove(pInfo->AliasName,cpInfo.AliasName,sizeof(pInfo->AliasName)); memmove(pInfo->Name,m_ObjectEntry[index].Name,sizeof(pInfo->Name)); pInfo->RepCode=cpInfo.RepCode; pInfo->CodeLen=cpInfo.CodeLen; pInfo->MaxValue=cpInfo.MaxVal ; pInfo->MinValue=cpInfo.MinVal ; memmove(pInfo->Unit,cpInfo.Unit,sizeof(pInfo->Unit)); memmove(pInfo->AliasUnit,cpInfo.AliasUnit,sizeof(pInfo->AliasUnit)); memmove(pInfo->DepthUnit,cpInfo.DimInfo[0].Unit,sizeof(pInfo->DepthUnit)); pInfo->StartDepth=cpInfo.DimInfo[0].StartVal; pInfo->EndDepth=pInfo->StartDepth+(cpInfo.DimInfo[0].Samples-1)*cpInfo.DimInfo[0].Delta; pInfo->DepLevel=cpInfo.DimInfo[0].Delta; pInfo->TimeLevel=cpInfo.DimInfo[1].Delta; pInfo->StartTime=cpInfo.DimInfo[1].StartVal; pInfo->TimeSamples=cpInfo.DimInfo[1].Samples; memmove(pInfo->TimeUnit,cpInfo.DimInfo[1].Unit,sizeof(pInfo->TimeUnit)); pInfo->ArrayNum=1; return TRUE; } bool CLogIO ::SetWisWaveInfo(int index,Slf_WAVE* pInfo) { GetChannelInfo(index,&cpInfo); memmove(cpInfo.AliasName,pInfo->AliasName,sizeof(cpInfo.AliasName)); Slf_OBJECT_ENTRY mEntry; GetWisObjectEntry(index,&mEntry); memmove(mEntry.Name,pInfo->Name,sizeof(mEntry.Name)); WriteWisObjectEntry(index,&mEntry); /* cpInfo.RepCode=pInfo->RepCode; cpInfo.CodeLen=pInfo->CodeLen; cpInfo.MaxVal=pInfo->MaxValue; cpInfo.MinVal=pInfo->MinValue; */ memmove(cpInfo.Unit,pInfo->Unit,sizeof(cpInfo.Unit)); memmove(cpInfo.AliasUnit,pInfo->AliasUnit,sizeof(cpInfo.AliasUnit)); memmove(cpInfo.DimInfo[0].Unit,pInfo->DepthUnit,sizeof(cpInfo.DimInfo[0].Unit)); cpInfo.DimInfo[0].StartVal=pInfo->StartDepth; if(cpInfo.DimInfo[0].Delta!=pInfo->DepLevel) WisChannelResamples(index,pInfo->DepLevel); int samm=(pInfo->EndDepth-pInfo->StartDepth)/cpInfo.DimInfo[0].Delta+1.5; if(samm<0) samm=0; cpInfo.DimInfo[0].Samples=samm; cpInfo.DimInfo[1].Delta=pInfo->TimeLevel; cpInfo.DimInfo[1].StartVal=pInfo->StartTime; cpInfo.DimInfo[1].Samples=pInfo->TimeSamples; memmove(cpInfo.DimInfo[1].Unit,pInfo->TimeUnit,sizeof(cpInfo.DimInfo[1].Unit)); SetChannelInfo(index,&cpInfo); return TRUE; } DWORD CLogIO ::ReadWisWave(int index, float depth, DWORD count, char* buffer) { m_Wave=(Slf_WAVE*)Slf_Info[index]; int samples=Slf_Int(depth,m_Wave->StartDepth,m_Wave->DepLevel);//((depth-m_Wave->StartDepth)/m_Wave->DepLevel+0.5); if(samples<0) samples=0; return ReadChannel(index,buffer,count,0,samples); } DWORD CLogIO ::ReadWave(int index, float depth, DWORD count, float* buffer) { Slf_WAVE m_Wave; GetWaveInfo(index,&m_Wave); if(m_Wave.RepCode==REPR_FLOAT) return ReadWave(index, depth, count, (void *)buffer)/m_Wave.CodeLen; MyDataTypeEnum vVdl; vVdl.vchar=new char[count*m_Wave.SamplePoint*m_Wave.ArrayNum*m_Wave.CodeLen]; DWORD len=ReadWave(index, depth, count, (void *)vVdl.vchar); for(DWORD i=0;i(FieldName),const_cast(FieldLength),const_cast(FieldType),const_cast(FieldResave),(FieldInfo),const_cast(FieldHZName),const_cast(FieldUnit),const_cast(FieldHZUnit)); SetTableHead(index,0,fieldcount,FieldInfo); delete FieldInfo; } return index; } void CLogIO ::SetFieldInfo(int num, char *str1,char *str2,char *str3,char *str4,Slf_TABLE_FIELD *FieldInfo,char *str5,char *FieldUnit,char *FieldHZUnit) { char p1[2000],p2[2000],p3[2000],p4[2000],p5[2000],p6[2000],p7[2000]; char *pp1,*pp2,*pp3,*pp4,*pp5,*pp6,*pp7; pp1=str1; pp2=str2; pp3=str3; pp4=str4; pp5=str5; pp6=FieldUnit; pp7=FieldHZUnit; if(!pp5) pp5=str1; for(int i=0;i-1|| Vals.indexOf("中水淹层1")>-1|| Vals.indexOf("中水淹层2")>-1|| Vals.indexOf("中水淹层3")>-1|| Vals.indexOf("中水淹层4")>-1|| Vals.indexOf("中含水层")>-1|| Vals.indexOf("中含水层1")>-1|| Vals.indexOf("中含水层2")>-1|| Vals.indexOf("中含水层3")>-1|| Vals.indexOf("中含水层4")>-1) { } else { foreach(QString cs,Vals) { QStringList vals1=cs.split("中"); Vars.append(vals1); } Vars.removeAll("中"); Vars.removeAll(""); Vals.clear(); foreach(QString cs,Vars) { QStringList vals1=cs.split("下"); Vals.append(vals1); } Vals.removeAll("下"); } ////////// Vars=Vals; Vals.clear(); foreach(QString cs,Vars) { bool isspik=false; for(int i=0;i<10;i++) { if(cs.indexOf("层"+QString::number(i))>-1) { isspik=true; break; } } if(isspik) Vals.append(cs); else { QStringList vals1=cs.split("层"); Vals.append(vals1); } } Vals.removeAll(""); Vars=Vals; Vals.clear(); foreach(QString cs,Vars) { if(cs.lastIndexOf("层")<0&&cs!="空") cs.append("层"); Vals.append(cs); } } else Vals.append(buf); Vals.removeAll(""); int index=0; foreach(QString cs,Vals) { int ind=Slf_Menu[Reserved-1].indexOf(cs); if(ind>-1) { if(Reserved==5) index=Slf_Menu[Reserved][ind].toInt(); else if(Reserved==2) index=ind; else index=index*10+ind+1; } } return index; } void CLogIO::GetReservedValue(float yy,int Reserved,char *Buffer,char *buf,int len,bool islink,bool isList) { int no=(int)(yy-1); if(Reserved==2) no=yy; if(no<0&&Reserved!=5) sprintf(buf,"%f",yy); else { if(Reserved==1) { LAYER_DATA *result=(LAYER_DATA *)Buffer; QString str=QString::number((int)yy); if((len==sizeof(LAYER_DATA)||len==sizeof(LAYER_DATA_OLD))&&result->MDepth1&&str.length()>1){ QString val; QStringList vals; int loop=0; for(int k=0;k=Slf_Menu[Reserved-1].size()) continue; if(str.length()>1/*&&k!=str.length()-1*/) { if(!islink&&Slf_Menu[Reserved-1][n].indexOf("干层")>-1) continue; } if(!islink&&val==Slf_Menu[Reserved-1][n].toStdString().c_str()) { continue; } if(!islink) { if(!loop) vals.append("上"); else if(k!=str.length()-1) { vals.append("中"); } else vals.append("下"); loop++; } vals.append(Slf_Menu[Reserved-1][n].toStdString().c_str()); val=Slf_Menu[Reserved-1][n].toStdString().c_str(); } if(vals.indexOf("上")>-1&&vals.indexOf("下")==-1) { int flag=0; for(int i=vals.size()-1;i>-1;i--) { if(vals[i]=="中") { vals[i]="下"; flag=1; break; } } if(!flag) vals.removeAll("上"); }; if(!isList) strcpy(buf,vals.join("").toStdString().c_str()); else strcpy(buf,vals.join(";").toStdString().c_str()); } else { if(no<0||no>=Slf_Menu[Reserved-1].size()) strcpy(buf,""); else strcpy(buf,Slf_Menu[Reserved-1][no].toStdString().c_str()); } if(!islink){ if(isShengLi){ if(strstr(buf,"水淹")) strcpy(buf,"水淹层"); if(strcmp(buf,"偏干油层")==0) strcpy(buf,"油层"); if(strcmp(buf,"含水油层")==0) strcpy(buf,"油层"); if(strcmp(buf,"含气油层")==0) strcpy(buf,"油层"); } } } else if(Reserved==5) { int ind=Slf_Menu[Reserved].indexOf(QString::number(no+1)); if(ind>=0&&ind=0&&no0&&field[i].Reserved<=m_MenuNumber) { GetReservedValue(yy,field[i].Reserved,Buffer,buf,reclen,islink); } else sprintf(buf,"%.8f",yy); } else sprintf(buf,"%.8f",yy); } else { strncpy(buf,&Buffer[len],field[i].Length); buf[field[i].Length]='\0'; } delete []Buffer; delete []field; return ty; } int CLogIO::GetTableFieldData(int index,int FieldNo,char *buf,int Rec,bool islink) { if(!buf) return 0; int count=GetTableFieldCount(index); Slf_TABLE_FIELD *field=new Slf_TABLE_FIELD[count+1]; GetTableFieldInfo(index,field); int reclen=GetTableRecordLength(index); if(reclen<1) { buf[0]=0; delete field; return 0; } char *Buffer=new char[reclen+1]; memset(Buffer,0,reclen+1); ReadTable(index,Rec,Buffer); int i=0,len=0; for(i=0;i0&&field[i].Reserved<=m_MenuNumber) { GetReservedValue(yy,field[i].Reserved,Buffer,buf,reclen,islink); } else sprintf(buf,"%.8f",yy); } else sprintf(buf,"%.8f",yy); } else { strncpy(buf,&Buffer[len],field[i].Length); buf[field[i].Length]='\0'; } delete []Buffer; delete []field; return ty; } int CLogIO::GetTableFieldData(int index,int FieldNo,int Rec,char *value,bool islink) { if(!value) return 0; int count=GetTableFieldCount(index); Slf_TABLE_FIELD *field=new Slf_TABLE_FIELD[count+1]; GetTableFieldInfo(index,field); int reclen=GetTableRecordLength(index); if(reclen<1) { value[0]=0; delete field; return 0; } char *Buffer=new char[reclen+1]; memset(Buffer,0,reclen+1); ReadTable(index,Rec,Buffer); int i=0,len=0; for(i=0;i0&&field[i].Reserved<=m_MenuNumber) { float yy=*(float *)value; GetReservedValue(yy,field[i].Reserved,Buffer,value,reclen,islink); } } } else { strncpy(value,&Buffer[len],field[i].Length); value[field[i].Length]='\0'; } delete []Buffer; delete []field; return ty; } int CLogIO::SetTableFieldData(int index,int FieldNo,char *buf,int Rec) { int count=GetTableFieldCount(index); Slf_TABLE_FIELD *field=new Slf_TABLE_FIELD[count+1]; GetTableFieldInfo(index,field); char *Buffer=new char[GetTableRecordLength(index)+1]; memset(Buffer,0,GetTableRecordLength(index)+1); ReadTable(index,Rec,Buffer); int i=0,len=0; for(i=0;i0&&field[i].Reserved<=m_MenuNumber) { if(/*isalpha(buf[0])||*/(buf[0]&0x80&&buf[1]&0x80)) { float ind=GetReservedIndex(buf,field[i].Reserved); if(ind>-1) { SetData(field[FieldNo].RepCode,&Buffer[len],(float *)&ind); flag=1; } } } if(!flag){ if(isalpha(buf[0])||(buf[0]&0x80&&buf[1]&0x80)) { float val=atof(buf); SetData(field[FieldNo].RepCode,&Buffer[len],(float *)&val); } else SetData(field[FieldNo].RepCode,&Buffer[len],(float *)buf); } } else SetData(field[FieldNo].RepCode,&Buffer[len],(float *)buf); } else { strncpy(&Buffer[len],buf,field[FieldNo].Length); } WriteTable(index,Rec,Buffer); delete []Buffer; delete []field; return 1; } int CLogIO::GetTableFieldData(int fieldcount,Slf_TABLE_FIELD *field,char *FieldName,char *InBuffer,char *buf,int reclen,bool islink) { int i=0,len=0; for(i=0;i0&&field[i].Reserved<=m_MenuNumber) { GetReservedValue(yy,field[i].Reserved,InBuffer,buf,reclen,islink); } else sprintf(buf,"%f",yy); } return ty; } len+=field[i].Length; } return 0;; } int CLogIO::GetTableFieldData(int fieldcount,Slf_TABLE_FIELD *field,char *FieldName,char *InBuffer,char *buf,float &yy,int reclen,bool islink) { int i=0,len=0; for(i=0;i0&&field[i].Reserved<=m_MenuNumber) { GetReservedValue(yy,field[i].Reserved,InBuffer,buf,reclen,islink); } else sprintf(buf,"%f",yy); } return ty; } len+=field[i].Length; } return 0;; } int CLogIO::GetTableFieldData(int index,char *FieldName,char *buf,int Rec,bool islink) { int count=GetTableFieldCount(index); int reclen=GetTableRecordLength(index); Slf_TABLE_FIELD *field=new Slf_TABLE_FIELD[count+1]; GetTableFieldInfo(index,field); char *Buffer=new char[reclen+1]; memset(Buffer,0,reclen+1); ReadTable(index,Rec,Buffer); int i=0,len=0; for(i=0;i0&&field[i].Reserved<=m_MenuNumber) { int reclen=GetTableRecordLength(index); GetReservedValue(yy,field[i].Reserved,Buffer,buf,reclen,islink); } else sprintf(buf,"%f",yy); } delete []Buffer; delete []field; return ty; } len+=field[i].Length; } delete []Buffer; delete []field; return 0; } int CLogIO::GetTableFieldData(int index,char *FieldName,char *buf,float &yy,int Rec,bool islink) { yy=0; int count=GetTableFieldCount(index); int reclen=GetTableRecordLength(index); Slf_TABLE_FIELD *field=new Slf_TABLE_FIELD[count+1]; GetTableFieldInfo(index,field); char *Buffer=new char[reclen+1]; memset(Buffer,0,reclen+1); ReadTable(index,Rec,Buffer); int i=0,len=0; for(i=0;i0&&field[i].Reserved<=m_MenuNumber) { int reclen=GetTableRecordLength(index); GetReservedValue(yy,field[i].Reserved,Buffer,buf,reclen,islink); } else sprintf(buf,"%f",yy); } delete []Buffer; delete []field; return ty; } len+=field[i].Length; } delete []Buffer; delete []field; return 0; } int CLogIO::SetTableFieldData(int index,char *FieldName,char *buf,int Rec) { int count=GetTableFieldCount(index); int reclen=GetTableRecordLength(index); Slf_TABLE_FIELD *field=new Slf_TABLE_FIELD[count+1]; GetTableFieldInfo(index,field); char *Buffer=new char[reclen+1]; memset(Buffer,0,reclen+1); ReadTable(index,Rec,Buffer); int i=0,len=0; for(i=0;i-1) { if(!Slf_Info[index]) Slf_Info[index]=new char [sizeof(Slf_TDT)]; m_Tdt=(Slf_TDT *)Slf_Info[index]; GetTDTInfo(index,m_Tdt); return index; } else return -1; } int CLogIO ::OpenWisTDT(Slf_TDT* pInfo) { int index=OpenWisTDT(pInfo->Name); if(index<0) return CreateWisTDT(pInfo); return index; } int CLogIO ::CreateWisTDT(Slf_TDT* pInfo,bool bFailExist) { memmove(cpInfo.AliasName,pInfo->AliasName,sizeof(cpInfo.AliasName)); strcpy(cpInfo.DimInfo[0].Name,"LTime"); strcpy(cpInfo.DimInfo[1].Name,"Depth"); strcpy(cpInfo.DimInfo[2].Name,"Time"); strcpy(cpInfo.DimInfo[0].AliasName,"LTime"); strcpy(cpInfo.DimInfo[1].AliasName,"Depth"); strcpy(cpInfo.DimInfo[2].AliasName,"Time"); cpInfo.CodeLen=sizeof(float); cpInfo.RepCode=REPR_FLOAT; cpInfo.MaxVal =pInfo->MaxValue; cpInfo.MinVal =pInfo->MinValue; memmove(cpInfo.Unit,pInfo->Unit,sizeof(cpInfo.Unit)); memmove(cpInfo.AliasUnit,pInfo->AliasUnit,sizeof(cpInfo.AliasUnit)); cpInfo.NumOfDimension=3; memmove(cpInfo.DimInfo[0].Unit,pInfo->LogTimeUnit,sizeof(cpInfo.DimInfo[0].Unit)); cpInfo.DimInfo[0].StartVal=0; cpInfo.DimInfo[0].Samples=0; cpInfo.DimInfo[0].RepCode=REPR_LONG; cpInfo.DimInfo[0].Delta =0; cpInfo.DimInfo[0].MaxSamples=pInfo->TotalLogNumber; cpInfo.DimInfo[0].Size=pInfo->MaxLogSamples*sizeof(TDT_DATA)+sizeof(float); cpInfo.DimInfo[1].RepCode=REPR_FLOAT; cpInfo.DimInfo[1].Delta =0; cpInfo.DimInfo[1].StartVal=0; cpInfo.DimInfo[1].Samples=0; cpInfo.DimInfo[1].MaxSamples=pInfo->MaxLogSamples; cpInfo.DimInfo[1].Size=sizeof(float); memmove(cpInfo.DimInfo[1].Unit,pInfo->DepthUnit,sizeof(cpInfo.DimInfo[1].Unit)); cpInfo.DimInfo[2].RepCode=REPR_FLOAT; cpInfo.DimInfo[2].Delta =0; cpInfo.DimInfo[2].StartVal=0; cpInfo.DimInfo[2].Samples=1; cpInfo.DimInfo[2].MaxSamples=1; cpInfo.DimInfo[2].Size=sizeof(float); memmove(cpInfo.DimInfo[2].Unit,pInfo->TimeUnit,sizeof(cpInfo.DimInfo[2].Unit)); int index=CreateWisChannel(TDT_OBJECT,pInfo->Name,&cpInfo,bFailExist); if(index>-1) { if(!Slf_Info[index]) Slf_Info[index]=new char [sizeof(Slf_TDT)]; memmove(Slf_Info[index],pInfo,sizeof(Slf_TDT)); m_Tdt=(Slf_TDT *)Slf_Info[index]; SetWisChannelPointNum(index,pInfo->TotalLogNumber);///????? return index; } return -1; } void CLogIO ::CloseTDT(int index) { if ( Slf_Info[index] ) { delete Slf_Info[index]; } Slf_Info[index]=NULL; CloseChannel(index); } bool CLogIO ::GetTDTInfo(int index,Slf_TDT* pInfo) { if(IsWis) return GetWisTDTInfo(index,pInfo); return GetSlfTDTInfo(index,pInfo); } bool CLogIO ::GetWisTDTInfo(int index,Slf_TDT* pInfo) { GetChannelInfo(index,&cpInfo); memmove(pInfo->AliasName,cpInfo.AliasName,16); memmove(pInfo->AliasUnit,cpInfo.AliasUnit,16); memmove(pInfo->Name,m_ObjectEntry[index].Name,16); pInfo->MaxValue =cpInfo.MaxVal; pInfo->MinValue =cpInfo.MinVal; pInfo->TotalLogNumber=cpInfo.DimInfo[0].MaxSamples; pInfo->MaxLogSamples =cpInfo.DimInfo[1].MaxSamples; memmove(pInfo->DepthUnit,cpInfo.DimInfo[1].Unit,8); memmove(pInfo->LogTimeUnit,cpInfo.DimInfo[0].Unit,8); memmove(pInfo->Unit,cpInfo.Unit,8); memmove(pInfo->TimeUnit,cpInfo.DimInfo[2].Unit,8); return 1; } bool CLogIO ::SetWisTDTInfo(int index,Slf_TDT* pInfo) { GetChannelInfo(index,&cpInfo); memmove(cpInfo.AliasName,pInfo->AliasName,sizeof(cpInfo.AliasName)); memmove(cpInfo.AliasUnit,pInfo->AliasUnit,sizeof(cpInfo.AliasUnit)); memmove(m_ObjectEntry[index].Name,pInfo->Name,sizeof(m_ObjectEntry[index].Name)); cpInfo.MaxVal =pInfo->MaxValue; cpInfo.MinVal =pInfo->MinValue; cpInfo.DimInfo[0].MaxSamples=pInfo->TotalLogNumber; cpInfo.DimInfo[1].MaxSamples =pInfo->MaxLogSamples; memmove(cpInfo.DimInfo[1].Unit,pInfo->DepthUnit,sizeof(cpInfo.DimInfo[1].Unit)); memmove(cpInfo.DimInfo[0].Unit,pInfo->LogTimeUnit,sizeof(cpInfo.DimInfo[0].Unit)); memmove(cpInfo.Unit,pInfo->Unit,sizeof(cpInfo.Unit)); memmove(cpInfo.DimInfo[2].Unit,pInfo->TimeUnit,sizeof(cpInfo.DimInfo[2].Unit)); SetChannelInfo(index,&cpInfo); return 1; } DWORD CLogIO ::GetWisTDTAllLogTime(int index,unsigned int* pLogTime,unsigned int *length) { DWORD point; int nPointNo; int no; Slf_TDT info; GetTDTInfo(index,&info); point=m_ObjectEntry[index].Position+m_Head.BlockLen; mFile->seek(point); mFile->read((char *)&no,sizeof(int)); point+=sizeof(int); for(nPointNo=1;nPointNo<=no;nPointNo++) { mFile->seek(point); mFile->read((char *)&pLogTime[nPointNo-1],sizeof(int)); if(length){ mFile->read((char *)&length[nPointNo-1],sizeof(int)); } point+=info.MaxLogSamples*sizeof(TDT_DATA)+2*sizeof(int); } return no; } DWORD CLogIO ::ReadWisTDT(int index, int nPointNo, unsigned int* pLogTime, TDT_DATA* buffer) { DWORD samples=nPointNo; DWORD point; int PointNum; int no; Slf_TDT info; GetTDTInfo(index,&info); if(nPointNo<1) nPointNo=1; point=m_ObjectEntry[index].Position+m_Head.BlockLen; mFile->seek(point); mFile->read((char *)&no,sizeof(int)); if(nPointNo>no) return 0; point+=sizeof(int)+(nPointNo-1)*(info.MaxLogSamples*sizeof(TDT_DATA)+2*sizeof(int)); mFile->seek(point); mFile->read((char *)pLogTime ,sizeof(int)); mFile->read((char *)&PointNum,sizeof(int)); mFile->read((char *)(buffer),sizeof(TDT_DATA)*PointNum); return PointNum;//0; } DWORD CLogIO ::ReadWisTDT(int index, float Depth, unsigned int* pLogTime, TDT_DATA* buffer) { DWORD point; int PointNum; int no; Slf_TDT info; GetTDTInfo(index,&info); point=m_ObjectEntry[index].Position+m_Head.BlockLen; mFile->seek(point); mFile->read((char *)&no,sizeof(int)); point+=sizeof(int); int i; for(i=0;iread((char *)pLogTime ,sizeof(int)); mFile->read((char *)&PointNum,sizeof(int)); mFile->read((char *)(buffer),sizeof(TDT_DATA)*PointNum); if(buffer[0].Depth==Depth) break; point+=info.MaxLogSamples*sizeof(TDT_DATA)+2*sizeof(int); } if(i>=no) return 0; return PointNum;//0; } DWORD CLogIO ::ReadWisTDT(int index, float Depth, unsigned int* pLogTime, TDT_DATA* buffer,int *n) { DWORD point; int PointNum; int no; Slf_TDT info; GetTDTInfo(index,&info); point=m_ObjectEntry[index].Position+m_Head.BlockLen; mFile->seek(point); mFile->read((char *)&no,sizeof(int)); point+=sizeof(int); int i; for(i=0;iread((char *)pLogTime ,sizeof(int)); mFile->read((char *)&PointNum,sizeof(int)); mFile->read((char *)(buffer),sizeof(TDT_DATA)*PointNum); if(buffer[0].Depth==Depth) break; point+=info.MaxLogSamples*sizeof(TDT_DATA)+2*sizeof(int); } *n=i; if(i>=no) return 0; return PointNum;//0; } DWORD CLogIO ::WriteWisTDT(int index, int nPointNo, unsigned int LogTime, TDT_DATA* buffer, DWORD count) { DWORD point; Slf_TDT info; GetTDTInfo(index,&info); if(count>info.MaxLogSamples) { return AddTDT(index,0,buffer,count); } if(nPointNo<1) nPointNo=1; point=m_ObjectEntry[index].Position+m_Head.BlockLen; mFile->seek(point); long aa=mFile->pos(); int no=0; int t; int l,i; point+=sizeof(int); mFile->read((char *)&no,sizeof(int)); if(no>=nPointNo) { for( i=0;iseek(point); mFile->read((char *)&t,sizeof(int)); mFile->read((char *)&l,sizeof(int)); if(LogTime==t||t==0) { mFile->seek(point); mFile->write(reinterpret_cast(&LogTime),sizeof(int)); mFile->write(reinterpret_cast(&count),sizeof(int)); mFile->write(reinterpret_cast(buffer),sizeof(TDT_DATA)*count); mFile->flush(); break; } point+=sizeof(int)+info.MaxLogSamples*sizeof(TDT_DATA)+sizeof(int); } if(iinfo.DimInfo[0].MaxSamples*info.DimInfo[0].Size+sizeof(double)) { DWORD BlockNum=mod(length-m_ObjectEntry[index].BlockNum*m_Head.BlockLen,m_Head.BlockLen); ExpandObject(index,BlockNum); } if(info.DimInfo[1].MaxSamplesseek(point); mFile->write(reinterpret_cast(&pLogTime[k]),sizeof(unsigned int)); mFile->write(reinterpret_cast(&len[k]),sizeof(unsigned int)); mFile->write(reinterpret_cast(&buf[k*sizeof(TDT_DATA)*info.DimInfo[1].MaxSamples]),info.DimInfo[1].MaxSamples*sizeof(TDT_DATA)); mFile->flush(); } free(buf); info.DimInfo[0].Size=count*sizeof(TDT_DATA)+sizeof(unsigned int); info.DimInfo[1].MaxSamples=count; WriteChannelInfo(index,&info); } ReadChannelInfo(index,&info); point=m_ObjectEntry[index].Position+m_Head.BlockLen; mFile->seek(point); int no; unsigned int t; int l,i; mFile->read((char *)&no,sizeof(int)); point+=sizeof(int); if(no>nPointNo) { for(i=0;iseek(point); mFile->read((char *)&t,sizeof(int)); mFile->read((char *)&l,sizeof(int)); if(LogTime==t||t==0) { mFile->seek(point); mFile->write(reinterpret_cast(&LogTime),sizeof(int)); mFile->write(reinterpret_cast(&count),sizeof(int)); mFile->write(reinterpret_cast(buffer),sizeof(TDT_DATA)*count); mFile->flush(); break; } point+=info.DimInfo[0].Size+sizeof(int); } if(iseek(point); no++; mFile->write(reinterpret_cast(&no),sizeof(int)); mFile->write(reinterpret_cast(&LogTime),sizeof(int)); mFile->write(reinterpret_cast(&count),sizeof(int)); int len1=sizeof(TDT_DATA)*count; mFile->write(reinterpret_cast(&buffer[0]),len1); mFile->flush(); return sizeof(TDT_DATA)*count; } int CLogIO ::OpenWisFMT(const char* name) { int index =OpenChannel(name,FMT_OBJECT); if(index>-1) { if(!Slf_Info[index]) Slf_Info[index]=new char [sizeof(Slf_FMT)]; m_Fmt=(Slf_FMT *)Slf_Info[index]; GetFMTInfo(index,m_Fmt); return index; } else return -1; } int CLogIO ::OpenWisFMT(Slf_FMT* pInfo) { int index=OpenWisFMT(pInfo->Name); if(index<0) return CreateWisFMT(pInfo); return index; } int CLogIO ::CreateWisFMT(Slf_FMT* pInfo,bool bFailExist) { memmove(cpInfo.AliasName,pInfo->AliasName,sizeof(cpInfo.AliasName)); strcpy(cpInfo.DimInfo[0].Name,"Depth"); cpInfo.CodeLen=sizeof(float); cpInfo.MaxVal =pInfo->MaxValue; cpInfo.MinVal =pInfo->MinValue; memmove(cpInfo.Unit,pInfo->Unit,sizeof(cpInfo.Unit)); memmove(cpInfo.AliasUnit,pInfo->AliasUnit,sizeof(cpInfo.AliasUnit)); cpInfo.NumOfDimension=2; memmove(cpInfo.DimInfo[0].Unit,pInfo->DepthUnit,sizeof(cpInfo.DimInfo[0].Unit)); cpInfo.DimInfo[0].StartVal=0; cpInfo.DimInfo[0].Samples=pInfo->TotalPointNum; cpInfo.DimInfo[0].RepCode=REPR_FLOAT; cpInfo.DimInfo[0].Delta =0; cpInfo.DimInfo[0].MaxSamples=pInfo->MaxPointSamples; cpInfo.DimInfo[0].Size=(pInfo->TimeSamples+1)*sizeof(float); cpInfo.DimInfo[1].RepCode=REPR_FLOAT; cpInfo.DimInfo[1].Delta =pInfo->TimeLevel; cpInfo.DimInfo[1].StartVal=pInfo->StartTime; cpInfo.DimInfo[1].Samples=0; cpInfo.DimInfo[1].MaxSamples=pInfo->TimeSamples; cpInfo.DimInfo[1].Size=sizeof(float); cpInfo.DimInfo[1].RepCode=REPR_FLOAT; memmove(cpInfo.DimInfo[1].Unit,pInfo->TimeUnit,sizeof(cpInfo.DimInfo[1].Unit)); int index=CreateChannel(FMT_OBJECT,pInfo->Name,&cpInfo,bFailExist); if(index>-1) { if(!Slf_Info[index]) Slf_Info[index]=new char [sizeof(Slf_FMT)]; memmove(Slf_Info[index],pInfo,sizeof(Slf_FMT)); return index; } return -1; } void CLogIO ::CloseFMT(int index) { if(Slf_Info[index]) { delete Slf_Info[index]; } Slf_Info[index]=NULL; CloseChannel(index); } bool CLogIO ::GetFMTInfo(int index,Slf_FMT* pInfo) { if(IsWis) return GetWisFMTInfo(index,pInfo); else return GetSlfFMTInfo(index,pInfo); } bool CLogIO ::GetWisFMTInfo(int index,Slf_FMT* pInfo) { GetChannelInfo(index,&cpInfo); char name[200]; GetObjectName(index,name); memmove(pInfo->AliasName,cpInfo.AliasName,sizeof(pInfo->AliasName)); memmove(pInfo->Name,name,sizeof(pInfo->Name)); pInfo->MaxValue =cpInfo.MaxVal; pInfo->MinValue =cpInfo.MinVal; memmove(pInfo->Unit,cpInfo.Unit,sizeof(pInfo->Unit)); memmove(pInfo->AliasUnit,cpInfo.AliasUnit,sizeof(pInfo->AliasUnit)); memmove(pInfo->DepthUnit,cpInfo.DimInfo[0].Unit,sizeof(pInfo->DepthUnit)); pInfo->MaxPointSamples=cpInfo.DimInfo[0].MaxSamples; pInfo->TimeLevel=cpInfo.DimInfo[1].Delta; pInfo->StartTime=cpInfo.DimInfo[1].StartVal; pInfo->TimeSamples=cpInfo.DimInfo[1].MaxSamples; memmove(pInfo->TimeUnit,cpInfo.DimInfo[1].Unit,sizeof(pInfo->TimeUnit)); pInfo->TotalPointNum=GetChannelPointNum(index); return TRUE; } bool CLogIO ::SetWisFMTInfo(int index,Slf_FMT* pInfo) { GetChannelInfo(index,&cpInfo); char name[200]; GetObjectName(index,name); Slf_OBJECT_ENTRY mEntry; GetWisObjectEntry(index,&mEntry); memmove(cpInfo.AliasName,pInfo->AliasName,sizeof(cpInfo.AliasName)); memmove(mEntry.Name,pInfo->Name,sizeof(mEntry.Name)); WriteWisObjectEntry(index,&mEntry); // cpInfo.MaxVal =pInfo->MaxValue; // cpInfo.MinVal =pInfo->MinValue; memmove(cpInfo.Unit,pInfo->Unit,sizeof(cpInfo.Unit)); memmove(cpInfo.AliasUnit,pInfo->AliasUnit,sizeof(cpInfo.AliasUnit)); memmove(cpInfo.DimInfo[0].Unit,pInfo->DepthUnit,sizeof(cpInfo.DimInfo[0].Unit)); cpInfo.DimInfo[0].MaxSamples=pInfo->MaxPointSamples; cpInfo.DimInfo[1].Delta=pInfo->TimeLevel; cpInfo.DimInfo[1].StartVal=pInfo->StartTime; cpInfo.DimInfo[1].MaxSamples=pInfo->TimeSamples; memmove(cpInfo.DimInfo[1].Unit,pInfo->TimeUnit,sizeof(cpInfo.DimInfo[1].Unit)); SetChannelInfo(index,&cpInfo); return TRUE; } bool CLogIO ::GetSlfFMTInfo(int index,Slf_FMT* pInfo) { if(index<0) return 0; int FieldNum=GetSlfTableFieldCount(index); int rec=GetSlfTableRecordCount(index); Slf_TABLE_ENTRY obj; GetSlfObjectEntry(index,&obj); Slf_OBJECT_FIELD *pf=new Slf_OBJECT_FIELD[FieldNum]; memset(pf,0,sizeof(Slf_OBJECT_FIELD)*FieldNum); GetSlfTableFieldInfo(index,pf); memmove(pInfo->AliasName,obj.HZName,sizeof(pInfo->AliasName)); memmove(pInfo->Name,obj.Name,sizeof(pInfo->Name)); pInfo->MaxValue=pf[1].Vmax; pInfo->MinValue=pf[1].Vmin; memmove(pInfo->Unit,pf[1].Unit,sizeof(pInfo->Unit)); memmove(pInfo->AliasUnit,pf[1].HZUnit,sizeof(pInfo->AliasUnit)); memmove(pInfo->DepthUnit,pf[0].Unit,sizeof(pInfo->DepthUnit)); memmove(pInfo->TimeUnit,pf[1].Unit,sizeof(pInfo->TimeUnit)); pInfo->MaxPointSamples=rec; pInfo->TimeLevel=pf[3].Rlev; pInfo->StartTime=pf[3].Start; pInfo->TimeSamples=pf[3].SamplePoint; pInfo->TotalPointNum=rec; delete []pf; return TRUE; } bool CLogIO ::SetSlfFMTInfo(int index,Slf_FMT* pInfo) { if(index<0) return 0; int FieldNum=GetSlfTableFieldCount(index); int rec=GetSlfTableRecordCount(index); Slf_TABLE_ENTRY obj; GetSlfObjectEntry(index,&obj); Slf_OBJECT_FIELD *pf=new Slf_OBJECT_FIELD[FieldNum]; memset(pf,0,sizeof(Slf_OBJECT_FIELD)*FieldNum); GetSlfTableFieldInfo(index,pf); memmove(obj.HZName,pInfo->AliasName,sizeof(obj.HZName)); memmove(obj.Name,pInfo->Name,sizeof(obj.Name)); WriteSlfObjectEntry(index,&obj); pf[1].Vmax=pInfo->MaxValue; pf[1].Vmin=pInfo->MinValue; memmove(pf[1].Unit,pInfo->Unit,sizeof(pf[1].Unit)); memmove(pf[1].HZUnit,pInfo->AliasUnit,sizeof(pf[1].HZUnit)); memmove(pf[0].Unit,pInfo->DepthUnit,sizeof(pf[0].Unit)); memmove(pf[1].Unit,pInfo->TimeUnit,sizeof(pf[1].Unit)); pf[2].SamplePoint=pInfo->TimeSamples; pf[3].Rlev=pInfo->TimeLevel; pf[3].Start=pInfo->StartTime; pf[3].SamplePoint=pInfo->TimeSamples; SetSlfTableFieldInfo(index,pf,0); delete []pf; return TRUE; } DWORD CLogIO ::GetWisFMTAllDepth(int index,float* pDepth) { DWORD point; int PointNum;//,num=0; point=m_ObjectEntry[index].Position+m_Head.BlockLen+sizeof(DWORD); m_Fmt=(Slf_FMT *)Slf_Info[index]; for(DWORD i=0;iTotalPointNum;i++) { mFile->seek(point); mFile->read((char *)&pDepth[i],sizeof(int)); point+=ComputerChannelLength(index); } return m_Fmt->TotalPointNum; } bool CLogIO ::SetWisFMTDepth(int index,int Count,float* pDepth1,float* pDepth2) { DWORD point; int PointNum,num=0; float Depth; point=m_ObjectEntry[index].Position+m_Head.BlockLen+sizeof(DWORD); m_Fmt=(Slf_FMT *)Slf_Info[index]; for(DWORD i=0;iTotalPointNum;i++) { mFile->seek(point); mFile->read((char *)&Depth,sizeof(int)); for(int j=0;jseek(point); mFile->write(reinterpret_cast(&Depth),sizeof(int)); mFile->flush(); break; } } point+=ComputerChannelLength(index); } return 1; } DWORD CLogIO ::ReadWisFMT(int index, int nPointNo, float* pDep, float* buffer) { DWORD len; float *buf=new float[ComputerChannelLength(index)/sizeof(float)+4]; ReadChannel(index,(char*)buf,1,nPointNo); *pDep=buf[0]; memmove((char *)buffer,(const char*)&buf[2],ComputerChannelLength(index)-4); memmove((char *)&len,(char *)&buf[1],sizeof(int)); delete buf; return len; } DWORD CLogIO ::WriteWisFMT(int index, int nPointNo, float dep, float* buffer, DWORD count) { Slf_CHANNEL *m_Channel=(Slf_CHANNEL *)Slf_Info_Head[index]; m_Fmt=(Slf_FMT *)Slf_Info[index]; float *buf=new float[ComputerChannelLength(index)/sizeof(float)]; buf[0]=dep; for(DWORD i=count;iTimeSamples+2;i++) buf[i]=(float)-9999.0; memmove((char *)&buf[1],(char *)&count,sizeof(DWORD)); for(int i=0;iDimInfo[1].Size); } WriteChannel(index,(char*)buf,1,nPointNo); delete buf; return count; } void CLogIO ::DeleteWisFMT(int index, int nPointNo, float dep) { m_Fmt=(Slf_FMT *)Slf_Info[index]; int no=nPointNo; if(no<0) { float *pDepth=new float[m_Fmt->TotalPointNum]; GetFMTAllDepth(index,pDepth); for(int i=0;iTotalPointNum;i++) { if(pDepth[i]==dep) { no=i+1; } } delete pDepth; } if(no<0) return; float *buf=new float[ComputerChannelLength(index)/sizeof(float)+4]; for(int i=no;iTotalPointNum;i++) { ReadChannel(index,(char*)buf,1,i+1); WriteChannel(index,(char*)buf,1,i); } delete buf; --m_Fmt->TotalPointNum; if(m_Fmt->TotalPointNum<0) m_Fmt->TotalPointNum=0; SetChannelPointNum(index,m_Fmt->TotalPointNum); } DWORD CLogIO ::AddWisFMT(int index, float dep, float* buffer, DWORD count) { m_Fmt=(Slf_FMT *)Slf_Info[index]; int nPointNo=++m_Fmt->TotalPointNum; SetChannelPointNum(index,nPointNo); WriteFMT(index, nPointNo,dep, buffer, count); return 1; } DWORD CLogIO ::GetFMTAllDepth(int index,float* pDepth) { if(IsWis) { return GetWisFMTAllDepth(index,pDepth); } else return GetSlfFMTAllDepth(index,pDepth); } DWORD CLogIO ::ReadFMT(int index, int nPointNo, float* pDep, float* buffer) { if(IsWis) { return ReadWisFMT(index, nPointNo, pDep, buffer); } else return ReadSlfFMT(index, nPointNo, pDep, buffer);; } DWORD CLogIO ::WriteFMT(int index, int nPointNo, float dep, float* buffer, DWORD count) { if(IsWis) { return WriteWisFMT(index, nPointNo, dep, buffer,count); } else return WriteSlfFMT(index, nPointNo, dep, buffer,count); } DWORD CLogIO ::AddFMT(int index, float dep, float* buffer, DWORD count) { if(IsWis) { return AddWisFMT(index, dep, buffer, count); } else return AddSlfFMT(index, dep, buffer, count); } void CLogIO ::DeleteFMT(int index, int nPointNo, float dep) { if(IsWis) { return DeleteWisFMT(index, nPointNo, dep); } else return DeleteSlfFMT(index, nPointNo, dep);; } DWORD CLogIO ::ReadTDT(int index, float Depth, unsigned int* pLogTime, TDT_DATA* buffer) { if(IsWis) { return ReadWisTDT(index, Depth, pLogTime, buffer); } else return ReadSlfTDT(index, Depth, pLogTime, buffer); } bool CLogIO ::SetWisTDTDepth(int index,int Count,float* pDepth1,float* pDepth2) { return 1; } bool CLogIO ::SetTDTDepth(int index,int Count,float* pDepth1,float* pDepth2) { if(IsWis) { return SetWisTDTDepth(index,Count,pDepth1,pDepth2); } else return SetSlfTDTDepth(index,Count,pDepth1,pDepth2); } DWORD CLogIO ::ReadTDT(int index, float Depth, unsigned int* pLogTime, TDT_DATA* buffer,int *n) { if(IsWis) { return ReadWisTDT(index,Depth,pLogTime,buffer,n); } else return ReadSlfTDT(index,Depth,pLogTime,buffer,n); } DWORD CLogIO ::GetTDTAllLogTime(int index,unsigned int* pLogTime,unsigned int *l) { if(IsWis) { return GetWisTDTAllLogTime(index,pLogTime,l); } else return GetSlfTDTAllLogTime(index,pLogTime,l); } DWORD CLogIO ::ReadTDT(int index, int nPointNo, unsigned int* pLogTime, TDT_DATA* buffer) { if(IsWis) { return ReadWisTDT(index,nPointNo,pLogTime,buffer); } else return ReadSlfTDT(index,nPointNo,pLogTime,buffer);; } DWORD CLogIO ::WriteTDT(int index, int nPointNo, unsigned int LogTime, TDT_DATA* buffer, DWORD count) { if(IsWis) { return WriteWisTDT(index,nPointNo,LogTime,buffer,count); } else return WriteSlfTDT(index,nPointNo,LogTime,buffer,count); } DWORD CLogIO ::AddTDT(int index, unsigned int LogTime, TDT_DATA* buffer, DWORD count) { if(IsWis) { return AddWisTDT(index,LogTime,buffer,count); } else return AddSlfTDT(index,LogTime,buffer,count); } //////////////////////////////////////////////////////////////////////// int CLogIO ::OpenFMT(const char* name) { if(IsWis) return OpenWisFMT(name); else return OpenSlfFMT(name); } int CLogIO ::OpenFMT(Slf_FMT* pInfo) { if(IsWis) return OpenWisFMT(pInfo); else return OpenSlfFMT(pInfo); } int CLogIO ::OpenSlfFMT(const char* name) { int index=FindSlfObjectName((char *)name,FMT_OBJECT); if(index<0)return -1; return OpenSlfTable(name); } int CLogIO ::OpenSlfFMT(Slf_FMT* pInfo) { int index=OpenSlfTable(pInfo->Name); if(index<0) return CreateSlfFMT(pInfo); return index; } int CLogIO ::CreateSlfFMT(Slf_FMT* pInfo,bool bFailExist) { int FieldNum=4; Slf_OBJECT_FIELD *pField=new Slf_OBJECT_FIELD[FieldNum]; int FieldNo=0; //// depth strcpy(pField[0].Name,"Depth"); strcpy(pField[0].HZName,"Depth"); pField[FieldNo].ArrayNum=1; pField[FieldNo].CodeLength=RepSize[REPR_FLOAT]; pField[FieldNo].RepCode=REPR_FLOAT; pField[FieldNo].Start=0; pField[FieldNo].DefVal=0; pField[FieldNo].Rlev=1; pField[FieldNo].SamplePoint=1; pField[FieldNo].Sequence=0; memmove(pField[FieldNo].Unit,pInfo->DepthUnit,sizeof(pField[FieldNo].Unit)); strcpy(pField[FieldNo].Reserved,""); //// point num FieldNo++; strcpy(pField[FieldNo].Name,"Point"); strcpy(pField[FieldNo].HZName,"Point"); pField[FieldNo].ArrayNum=1; pField[FieldNo].CodeLength=RepSize[REPR_INT]; pField[FieldNo].RepCode=REPR_INT; pField[FieldNo].Start=0; pField[FieldNo].DefVal=0; pField[FieldNo].Rlev=0; pField[FieldNo].SamplePoint=1; pField[FieldNo].Sequence=0; strcpy(pField[FieldNo].Unit,""); strcpy(pField[FieldNo].Reserved,""); //// Pressure FieldNo++; strcpy(pField[FieldNo].Name,"Pressure"); strcpy(pField[FieldNo].HZName,"Pressure"); pField[FieldNo].ArrayNum=1; pField[FieldNo].CodeLength=RepSize[REPR_FLOAT]; pField[FieldNo].RepCode=REPR_FLOAT; pField[FieldNo].Start=0; pField[FieldNo].DefVal=0; pField[FieldNo].Rlev=0; pField[FieldNo].SamplePoint=pInfo->TimeSamples; pField[FieldNo].Sequence=0; pField[FieldNo].Vmax=pInfo->MaxValue; pField[FieldNo].Vmin=pInfo->MinValue; memmove(pField[FieldNo].Unit,pInfo->Unit,sizeof(pField[FieldNo].Unit)); strcpy(pField[FieldNo].Reserved,""); //// Time FieldNo++; strcpy(pField[FieldNo].Name,"Time"); strcpy(pField[FieldNo].HZName,"Time"); pField[FieldNo].ArrayNum=1; pField[FieldNo].CodeLength=RepSize[REPR_FLOAT]; pField[FieldNo].RepCode=REPR_FLOAT; pField[FieldNo].Start=pInfo->StartTime; pField[FieldNo].DefVal=0; pField[FieldNo].Rlev=pInfo->TimeLevel; pField[FieldNo].SamplePoint=pInfo->TimeSamples; pField[FieldNo].Sequence=1; memmove(pField[FieldNo].Unit,pInfo->TimeUnit,sizeof(pField[FieldNo].Unit)); strcpy(pField[FieldNo].Reserved,""); int index=CreateSlfTable(FMT_OBJECT,pInfo->Name,"Pressure",FieldNum,pField); Slf_TABLE_ENTRY obj; GetSlfObjectEntry(index,&obj); memmove(obj.HZName,pField[2].Name,sizeof(obj.HZName)); memmove(obj.Unit,pField[2].Unit,sizeof(obj.Unit)); memmove(obj.HZUnit,pField[2].HZUnit,sizeof(obj.HZUnit)); WriteSlfObjectEntry(index,&obj); if(index>-1) SetSlfTableRecordCount(index,pInfo->TotalPointNum); delete []pField; return index; } DWORD CLogIO ::GetSlfFMTAllDepth(int index,float* pDepth) { int count=GetSlfTableRecordCount(index); ReadSlfTableFieldData(index,0,count,(char *)pDepth); return count; } DWORD CLogIO ::ReadSlfFMT(int index, int nPointNo, float* pDep, float* buffer) { int count; ReadSlfTableFieldData(index,0,nPointNo,(char *)pDep,nPointNo-1); ReadSlfTableFieldData(index,1,nPointNo,(char *)&count,nPointNo-1); ReadSlfTableFieldData(index,2,nPointNo,(char *)buffer,nPointNo-1,count); return count; } DWORD CLogIO ::WriteSlfFMT(int index, int nPointNo, float dep, float* buffer, DWORD count) { WriteSlfTableFieldData(index,0,nPointNo,(char *)&dep,nPointNo-1); WriteSlfTableFieldData(index,1,nPointNo,(char *)&count,nPointNo-1); WriteSlfTableFieldData(index,2,nPointNo,(char *)buffer,nPointNo-1,count); return 1; } DWORD CLogIO ::AddSlfFMT(int index, float dep, float* buffer, DWORD count) { int nPointNo=GetSlfTableRecordCount(index); nPointNo++; WriteSlfTableFieldData(index,0,nPointNo,(char *)&dep,nPointNo-1); WriteSlfTableFieldData(index,1,nPointNo,(char *)&count,nPointNo-1); WriteSlfTableFieldData(index,2,nPointNo,(char *)buffer,nPointNo-1,count); return nPointNo; } void CLogIO ::DeleteSlfFMT(int index, int nPointNo, float dep) { DeleteSlfTableRecord(index,nPointNo,nPointNo-1); } ///////////////////////////////////////////////////////////// int CLogIO ::OpenSlfTDT(const char* name) { int index=FindSlfObjectName((char *)name,TDT_OBJECT); if(index<0)return -1; return OpenSlfTable(name,TDT_OBJECT); } int CLogIO ::OpenSlfTDT(Slf_TDT* pInfo) { int index=OpenTDT(pInfo->Name); if(index<0) return CreateSlfTDT(pInfo); return index; } int CLogIO ::CreateSlfTDT(Slf_TDT* pInfo,bool bFailExist) { int FieldNum=5; Slf_OBJECT_FIELD *pField=new Slf_OBJECT_FIELD[FieldNum]; int FieldNo=0; //// depth strcpy(pField[0].Name,"Depth"); strcpy(pField[0].HZName,"深度"); pField[FieldNo].ArrayNum=1; pField[FieldNo].CodeLength=RepSize[REPR_FLOAT]; pField[FieldNo].RepCode=REPR_FLOAT; pField[FieldNo].Start=0; pField[FieldNo].DefVal=0; pField[FieldNo].Rlev=0; pField[FieldNo].SamplePoint=1; pField[FieldNo].Sequence=0; memmove(pField[FieldNo].Unit,pInfo->DepthUnit,sizeof(pField[FieldNo].Unit)); strcpy(pField[FieldNo].Unit,"m"); strcpy(pField[FieldNo].HZUnit,"米"); strcpy(pField[FieldNo].Reserved,""); //// point num FieldNo++; strcpy(pField[FieldNo].Name,"LogTime"); strcpy(pField[FieldNo].HZName,"测量时间"); pField[FieldNo].ArrayNum=1; pField[FieldNo].CodeLength=RepSize[REPR_INT]; pField[FieldNo].RepCode=REPR_INT; pField[FieldNo].Start=0; pField[FieldNo].DefVal=0; pField[FieldNo].Rlev=0; pField[FieldNo].SamplePoint=1; pField[FieldNo].Sequence=0; memmove(pField[FieldNo].Unit,pInfo->LogTimeUnit,sizeof(pField[FieldNo].Unit)); memmove(pField[FieldNo].HZUnit,pInfo->LogTimeUnit,sizeof(pField[FieldNo].HZUnit)); strcpy(pField[FieldNo].Reserved,""); //// point num FieldNo++; strcpy(pField[FieldNo].Name,"Point"); strcpy(pField[FieldNo].HZName,"数据点数"); pField[FieldNo].ArrayNum=1; pField[FieldNo].CodeLength=RepSize[REPR_INT]; pField[FieldNo].RepCode=REPR_INT; pField[FieldNo].Start=0; pField[FieldNo].DefVal=0; pField[FieldNo].Rlev=0; pField[FieldNo].SamplePoint=1; pField[FieldNo].Sequence=0; strcpy(pField[FieldNo].Unit,""); strcpy(pField[FieldNo].Reserved,""); //// Value FieldNo++; //strcpy(pField[FieldNo].Name,"Value"); //strcpy(pField[FieldNo].HZName,"Value"); strcpy(pField[FieldNo].Name,pInfo->Name); strcpy(pField[FieldNo].HZName,pInfo->AliasName); pField[FieldNo].ArrayNum=1; pField[FieldNo].CodeLength=RepSize[REPR_FLOAT]; pField[FieldNo].RepCode=REPR_FLOAT; pField[FieldNo].Start=0; pField[FieldNo].DefVal=0; pField[FieldNo].Rlev=0; pField[FieldNo].SamplePoint=pInfo->MaxLogSamples; pField[FieldNo].Sequence=0; pField[FieldNo].Vmax=pInfo->MaxValue; pField[FieldNo].Vmin=pInfo->MinValue; memmove(pField[FieldNo].HZUnit,pInfo->AliasUnit,sizeof(pField[FieldNo].HZUnit)); memmove(pField[FieldNo].Unit,pInfo->Unit,sizeof(pField[FieldNo].Unit)); strcpy(pField[FieldNo].Reserved,""); //// Time FieldNo++; strcpy(pField[FieldNo].Name,"Time"); strcpy(pField[FieldNo].HZName,"Time"); pField[FieldNo].ArrayNum=1; pField[FieldNo].CodeLength=RepSize[REPR_FLOAT]; pField[FieldNo].RepCode=REPR_FLOAT; pField[FieldNo].Start=0; pField[FieldNo].DefVal=0; pField[FieldNo].Rlev=0; pField[FieldNo].SamplePoint=pInfo->MaxLogSamples; pField[FieldNo].Sequence=0; memmove(pField[FieldNo].Unit,pInfo->TimeUnit,sizeof(pField[FieldNo].Unit)); memmove(pField[FieldNo].HZUnit,pInfo->TimeUnit,sizeof(pField[FieldNo].HZUnit)); strcpy(pField[FieldNo].Reserved,""); //int index=CreateSlfTable(TDT_OBJECT,pInfo->Name,NULL,FieldNum,pField); int index=CreateSlfTable(TDT_OBJECT,pInfo->Name,pInfo->AliasName,FieldNum,pField); Slf_TABLE_ENTRY obj; GetSlfObjectEntry(index,&obj); //memmove(obj.HZName,pField[3].Name,sizeof(obj.HZName)); memmove(obj.HZName,pField[3].HZName,sizeof(obj.HZName)); memmove(obj.Unit,pField[3].Unit,sizeof(obj.Unit)); memmove(obj.HZUnit,pField[3].HZUnit,sizeof(obj.HZUnit)); WriteSlfObjectEntry(index,&obj); if(index>-1) SetSlfTableRecordCount(index,pInfo->TotalLogNumber); delete []pField; return index; } bool CLogIO ::GetSlfTDTInfo(int index,Slf_TDT* pInfo) { if(index<0) return 0; int FieldNum=GetSlfTableFieldCount(index); int rec=GetSlfTableRecordCount(index); Slf_TABLE_ENTRY obj; GetSlfObjectEntry(index,&obj); Slf_OBJECT_FIELD *pf=new Slf_OBJECT_FIELD[FieldNum]; memset(pf,0,sizeof(Slf_OBJECT_FIELD)*FieldNum); GetSlfTableFieldInfo(index,pf); memmove(pInfo->AliasName,obj.HZName,sizeof(pInfo->AliasName)); memmove(pInfo->Name,obj.Name,sizeof(pInfo->Name)); pInfo->MaxValue=pf[3].Vmax; pInfo->MinValue=pf[3].Vmin; memmove(pInfo->Unit,pf[3].Unit,sizeof(pInfo->Unit)); memmove(pInfo->AliasUnit,pf[3].HZUnit,sizeof(pInfo->AliasUnit)); memmove(pInfo->DepthUnit,pf[0].Unit,sizeof(pInfo->DepthUnit)); memmove(pInfo->TimeUnit,pf[4].Unit,sizeof(pInfo->TimeUnit)); memmove(pInfo->LogTimeUnit,pf[1].Unit,sizeof(pInfo->LogTimeUnit)); pInfo->MaxLogSamples=pf[3].SamplePoint; pInfo->TotalLogNumber=GetSlfTableRecordCount(index); delete []pf; return TRUE; } bool CLogIO ::SetSlfTDTInfo(int index,Slf_TDT* pInfo) { if(index<0) return 0; int FieldNum=GetSlfTableFieldCount(index); int rec=GetSlfTableRecordCount(index); Slf_TABLE_ENTRY obj; GetSlfObjectEntry(index,&obj); Slf_OBJECT_FIELD *pf=new Slf_OBJECT_FIELD[FieldNum]; memset(pf,0,sizeof(Slf_OBJECT_FIELD)*FieldNum); GetSlfTableFieldInfo(index,pf); memmove(obj.HZName,pInfo->AliasName,sizeof(obj.HZName)); memmove(obj.Name,pInfo->Name,sizeof(obj.Name)); // pf[3].Vmax=pInfo->MaxValue; // pf[3].Vmin=pInfo->MinValue; WriteSlfObjectEntry(index,&obj); memmove(pf[3].Unit,pInfo->Unit,sizeof(pf[3].Unit)); memmove(pf[3].HZUnit,pInfo->AliasUnit,sizeof(pf[3].HZUnit)); memmove(pf[0].Unit,pInfo->DepthUnit,sizeof(pf[0].Unit)); memmove(pf[4].Unit,pInfo->TimeUnit,sizeof(pf[4].Unit)); memmove(pf[1].Unit,pInfo->LogTimeUnit,sizeof(pf[1].Unit)); pf[3].SamplePoint=pInfo->MaxLogSamples; SetSlfTableFieldInfo(index,pf,0); delete []pf; return TRUE; } DWORD CLogIO ::ReadSlfTDT(int index, float Depth, unsigned int* pLogTime, TDT_DATA* buffer) { int rec=GetSlfTableRecordCount(index); int reclen=GetSlfTableRecordLength(index); int pos1=GetSlfTableFieldOffset(index,3)/float(sizeof(float))+0.1; int pos2=GetSlfTableFieldOffset(index,4)/float(sizeof(float))+0.1; int buffsize=reclen/float(sizeof(float))+1; float *buff=new float[buffsize]; int pos=0; int n=0; for(int i=0;ipField; int no=0; if(m_SlfObjectEntry[index].FieldNum>1) no=1; memmove(pInfo->AliasName,m_SlfObjectEntry[index].HZName,sizeof(pInfo->AliasName)); if(m_SlfObjectEntry[index].Type==CURVE_OBJECT) no=1; else if(m_SlfObjectEntry[index].Type==WAVE_OBJECT) no=1; else if(m_SlfObjectEntry[index].Type==FMT_OBJECT) no=2; else if(m_SlfObjectEntry[index].Type==TDT_OBJECT) no=3; pInfo->CodeLen=pFieldInfo[no].CodeLength; pInfo->RepCode=pFieldInfo[no].RepCode; pInfo->MaxVal=pFieldInfo[no].Vmax; pInfo->MinVal=pFieldInfo[no].Vmin; pInfo->NumOfDimension=m_SlfObjectEntry[index].FieldNum; if(pInfo->NumOfDimension>4) pInfo->NumOfDimension=4; memmove(pInfo->Unit,pFieldInfo[no].Unit,sizeof(pInfo->Unit)); memmove(pInfo->AliasUnit,pFieldInfo[no].HZUnit,sizeof(pInfo->AliasUnit));//whp add if(m_SlfObjectEntry[index].Type==FMT_OBJECT) { pInfo->NumOfDimension=2; pInfo->DimInfo[0].Samples=GetSlfTableRecordCount(index); pInfo->DimInfo[0].MaxSamples=pInfo->DimInfo[0].Samples; pInfo->DimInfo[0].RepCode=pFieldInfo[0].RepCode; memmove(pInfo->DimInfo[0].Name,pFieldInfo[0].Name,sizeof(pInfo->DimInfo[0].Name)); memmove(pInfo->DimInfo[0].AliasName,pFieldInfo[0].HZName,sizeof(pInfo->DimInfo[0].AliasName)); pInfo->DimInfo[0].Reserved=0; //pInfo->DimInfo[0].Size=pFieldInfo[0].CodeLength; pInfo->DimInfo[0].Size=GetSlfTableRecordLength(index,pFieldInfo); pInfo->DimInfo[0].Delta=pFieldInfo[0].Rlev; pInfo->DimInfo[0].StartVal=pFieldInfo[0].Start; pInfo->DimInfo[1].Delta=pFieldInfo[3].Rlev; pInfo->DimInfo[1].StartVal=pFieldInfo[3].Start; pInfo->DimInfo[1].Samples=pFieldInfo[3].SamplePoint; pInfo->DimInfo[1].MaxSamples=pFieldInfo[3].SamplePoint; memmove(pInfo->DimInfo[1].Unit,pFieldInfo[3].Unit,sizeof(pInfo->DimInfo[1].Unit)); memmove(pInfo->DimInfo[1].Name,pFieldInfo[3].Name,sizeof(pInfo->DimInfo[1].Name)); memmove(pInfo->DimInfo[1].AliasName,pFieldInfo[3].HZName,sizeof(pInfo->DimInfo[1].AliasName)); pInfo->DimInfo[1].Reserved=0; pInfo->DimInfo[1].Size=pFieldInfo[3].ArrayNum*pFieldInfo[3].CodeLength*pFieldInfo[3].SamplePoint; pInfo->DimInfo[1].RepCode=pFieldInfo[3].RepCode;//pFieldInfo[4].RepCode;whp change 2011.11.19 FMT只有4维! } else if(m_SlfObjectEntry[index].Type==TDT_OBJECT) { pInfo->NumOfDimension=2; memmove(pInfo->DimInfo[0].Unit,pFieldInfo[0].Unit,sizeof(pInfo->DimInfo[0].Unit)); pInfo->DimInfo[0].Samples=GetSlfTableRecordCount(index); pInfo->DimInfo[0].MaxSamples=pInfo->DimInfo[0].Samples; pInfo->DimInfo[0].RepCode=pFieldInfo[0].RepCode; memmove(pInfo->DimInfo[0].Name,pFieldInfo[0].Name,sizeof(pInfo->DimInfo[0].Name)); memmove(pInfo->DimInfo[0].AliasName,pFieldInfo[0].HZName,sizeof(pInfo->DimInfo[0].AliasName)); pInfo->DimInfo[0].Reserved=0; //pInfo->DimInfo[0].Size=pFieldInfo[0].CodeLength; pInfo->DimInfo[0].Size=GetSlfTableRecordLength(index,pFieldInfo); pInfo->DimInfo[0].Delta=pFieldInfo[0].Rlev; pInfo->DimInfo[0].StartVal=pFieldInfo[0].Start; pInfo->DimInfo[1].Delta=pFieldInfo[4].Rlev; pInfo->DimInfo[1].StartVal=pFieldInfo[4].Start; pInfo->DimInfo[1].Samples=pFieldInfo[4].SamplePoint; pInfo->DimInfo[1].MaxSamples=pFieldInfo[4].SamplePoint; memmove(pInfo->DimInfo[1].Unit,pFieldInfo[4].Unit,sizeof(pInfo->DimInfo[1].Unit)); memmove(pInfo->DimInfo[1].Name,pFieldInfo[4].Name,sizeof(pInfo->DimInfo[1].Name)); memmove(pInfo->DimInfo[1].AliasName,pFieldInfo[4].HZName,sizeof(pInfo->DimInfo[1].AliasName)); pInfo->DimInfo[1].Reserved=0; pInfo->DimInfo[1].Size=pFieldInfo[4].ArrayNum*pFieldInfo[4].CodeLength*pFieldInfo[4].SamplePoint; pInfo->DimInfo[1].RepCode=pFieldInfo[4].RepCode; } else if(m_SlfObjectEntry[index].Type==WAVE_OBJECT){ pInfo->NumOfDimension=2; memmove(pInfo->DimInfo[0].Unit,pFieldInfo[0].Unit,sizeof(pInfo->DimInfo[0].Unit)); pInfo->DimInfo[0].Samples=GetSlfTableRecordCount(index); pInfo->DimInfo[0].MaxSamples=pInfo->DimInfo[0].Samples; pInfo->DimInfo[0].RepCode=pFieldInfo[0].RepCode; memmove(pInfo->DimInfo[0].Name,pFieldInfo[0].Name,sizeof(pInfo->DimInfo[0].Name)); memmove(pInfo->DimInfo[0].AliasName,pFieldInfo[0].HZName,sizeof(pInfo->DimInfo[0].AliasName)); pInfo->DimInfo[0].Reserved=0; //pInfo->DimInfo[0].Size=pFieldInfo[0].CodeLength; pInfo->DimInfo[0].Size=GetSlfTableRecordLength(index,pFieldInfo); pInfo->DimInfo[0].Delta=pFieldInfo[0].Rlev; pInfo->DimInfo[0].StartVal=pFieldInfo[0].Start; pInfo->DimInfo[1].Delta=pFieldInfo[2].Rlev; pInfo->DimInfo[1].StartVal=pFieldInfo[2].Start; pInfo->DimInfo[1].Samples=pFieldInfo[2].SamplePoint; pInfo->DimInfo[1].MaxSamples=pFieldInfo[2].SamplePoint; memmove(pInfo->DimInfo[1].Unit,pFieldInfo[2].Unit,sizeof(pInfo->DimInfo[1].Unit)); memmove(pInfo->DimInfo[1].Name,pFieldInfo[2].Name,sizeof(pInfo->DimInfo[1].Name)); memmove(pInfo->DimInfo[1].AliasName,pFieldInfo[2].HZName,sizeof(pInfo->DimInfo[1].AliasName)); pInfo->DimInfo[1].Reserved=0; pInfo->DimInfo[1].Size=pFieldInfo[2].ArrayNum*pFieldInfo[2].CodeLength*pFieldInfo[2].SamplePoint; pInfo->DimInfo[1].RepCode=pFieldInfo[2].RepCode; } else if(m_SlfObjectEntry[index].Type==CURVE_OBJECT){ pInfo->NumOfDimension=1; memmove(pInfo->DimInfo[0].Unit,pFieldInfo[0].Unit,sizeof(pInfo->DimInfo[0].Unit)); pInfo->DimInfo[0].Samples=GetSlfTableRecordCount(index); pInfo->DimInfo[0].MaxSamples=pInfo->DimInfo[0].Samples; pInfo->DimInfo[0].RepCode=pFieldInfo[0].RepCode; memmove(pInfo->DimInfo[0].Name,pFieldInfo[0].Name,sizeof(pInfo->DimInfo[0].Name)); memmove(pInfo->DimInfo[0].AliasName,pFieldInfo[0].HZName,sizeof(pInfo->DimInfo[0].AliasName)); pInfo->DimInfo[0].Reserved=0; //pInfo->DimInfo[0].Size=pFieldInfo[0].CodeLength; pInfo->DimInfo[0].Size=GetSlfTableRecordLength(index,pFieldInfo); pInfo->DimInfo[0].Delta=pFieldInfo[0].Rlev; pInfo->DimInfo[0].StartVal=pFieldInfo[0].Start; } else { for(int i=0;iNumOfDimension;i++) { memmove(pInfo->DimInfo[i].AliasName,pFieldInfo[i].HZName,sizeof(pInfo->DimInfo[i].AliasName)); memmove(pInfo->DimInfo[i].Name,pFieldInfo[i].Name,sizeof(pInfo->DimInfo[i].Name)); memmove(pInfo->AliasUnit,pFieldInfo[i].HZUnit,sizeof(pInfo->AliasUnit)); pInfo->DimInfo[i].RepCode=pFieldInfo[i].RepCode; pInfo->DimInfo[i].Delta=pFieldInfo[i].Rlev; pInfo->DimInfo[i].StartVal=pFieldInfo[i].Start; if(!i)pInfo->DimInfo[i].Samples=GetSlfTableRecordCount(index); else pInfo->DimInfo[i].Samples=pFieldInfo[i].ArrayNum*pFieldInfo[i].SamplePoint; pInfo->DimInfo[i].MaxSamples=pInfo->DimInfo[i].Samples; pInfo->DimInfo[i].Size=pFieldInfo[i].ArrayNum*pFieldInfo[i].CodeLength*pFieldInfo[i].SamplePoint; } } } void CLogIO::SetChannelInfo(int index,Slf_CHANNEL* pInfo) { if(IsWis) WriteWisChannelInfo(index,pInfo); else SetSlfChannelInfo(index,pInfo); } void CLogIO::SetSlfChannelInfo(int index,Slf_CHANNEL* pInfo) { if(index<0) return; if(!Slf_Info_Head[index]) return; Slf_TABLE_MESSAGE *temp=(Slf_TABLE_MESSAGE *)Slf_Info_Head[index]; Slf_OBJECT_FIELD *pFieldInfo=temp->pField; int no=0; if(m_SlfObjectEntry[index].FieldNum>1) no=1; memmove(m_SlfObjectEntry[index].HZName,pInfo->AliasName,sizeof(m_SlfObjectEntry[index].HZName)); //whp add 2011.10.30 for SetChannelInfo没有保存对象别名信息 WriteSlfObjectEntry(); if(m_SlfObjectEntry[index].Type==CURVE_OBJECT) no=1; else if(m_SlfObjectEntry[index].Type==WAVE_OBJECT) no=1; else if(m_SlfObjectEntry[index].Type==FMT_OBJECT) no=2; else if(m_SlfObjectEntry[index].Type==TDT_OBJECT) no=3; pFieldInfo[no].Vmax=pInfo->MaxVal; pFieldInfo[no].Vmin=pInfo->MinVal; memmove(pFieldInfo[no].Unit,pInfo->Unit,sizeof(pFieldInfo[no].Unit)); memmove(pFieldInfo[no].HZUnit,pInfo->AliasUnit,sizeof(pInfo->AliasUnit));//,sizeof(pFieldInfo[no].HZUnit));//whp add if(m_SlfObjectEntry[index].Type==FMT_OBJECT) { //SetSlfTableRecordCount(index,pInfo->DimInfo[0].Samples); memmove(pFieldInfo[0].Name,pInfo->DimInfo[0].Name,sizeof(pFieldInfo[0].Name)); memmove(pFieldInfo[0].HZName,pInfo->DimInfo[0].AliasName,sizeof(pFieldInfo[0].HZName)); pFieldInfo[0].Start=pInfo->DimInfo[0].StartVal; pFieldInfo[3].Start=pInfo->DimInfo[1].StartVal; memmove(pFieldInfo[3].Unit,pInfo->DimInfo[1].Unit,sizeof(pFieldInfo[3].Unit)); memmove(pFieldInfo[3].Name,pInfo->DimInfo[1].Name,sizeof(pFieldInfo[3].Name)); memmove(pFieldInfo[3].HZName,pInfo->DimInfo[1].AliasName,sizeof(pFieldInfo[3].HZName)); SetSlfTableFieldInfo(index,pFieldInfo,0); } else if(m_SlfObjectEntry[index].Type==TDT_OBJECT) { //SetSlfTableRecordCount(index,pInfo->DimInfo[0].Samples); memmove(pFieldInfo[0].Unit,pInfo->DimInfo[0].Unit,sizeof(pFieldInfo[0].Unit)); memmove(pFieldInfo[0].Name,pInfo->DimInfo[0].Name,sizeof(pFieldInfo[0].Name)); memmove(pFieldInfo[0].HZName,pInfo->DimInfo[0].AliasName,sizeof(pFieldInfo[0].HZName)); pFieldInfo[0].Start=pInfo->DimInfo[0].StartVal; pFieldInfo[4].Rlev=pInfo->DimInfo[1].Delta; pFieldInfo[4].Start=pInfo->DimInfo[1].StartVal; memmove(pFieldInfo[4].Unit,pInfo->DimInfo[1].Unit,sizeof(pFieldInfo[4].Unit)); memmove(pFieldInfo[4].Name,pInfo->DimInfo[1].Name,sizeof(pFieldInfo[4].Name)); memmove(pFieldInfo[4].HZName,pInfo->DimInfo[1].AliasName,sizeof(pFieldInfo[4].HZName)); SetSlfTableFieldInfo(index,pFieldInfo,0); } else if(m_SlfObjectEntry[index].Type==WAVE_OBJECT){ //SetSlfTableRecordCount(index,pInfo->DimInfo[0].Samples); memmove(pFieldInfo[0].Unit,pInfo->DimInfo[0].Unit,sizeof(pFieldInfo[0].Unit)); memmove(pFieldInfo[0].Name,pInfo->DimInfo[0].Name,sizeof(pFieldInfo[0].Name)); memmove(pFieldInfo[0].HZName,pInfo->DimInfo[0].AliasName,sizeof(pFieldInfo[0].HZName)); pFieldInfo[0].Start=pInfo->DimInfo[0].StartVal; pFieldInfo[2].Rlev=pInfo->DimInfo[1].Delta; pFieldInfo[2].Start=pInfo->DimInfo[1].StartVal; memmove(pFieldInfo[2].Unit,pInfo->DimInfo[1].Unit,sizeof(pFieldInfo[1].Unit)); memmove(pFieldInfo[2].Name,pInfo->DimInfo[1].Name,sizeof(pFieldInfo[1].Name)); memmove(pFieldInfo[2].HZName,pInfo->DimInfo[1].AliasName,sizeof(pFieldInfo[1].HZName)); SetSlfTableFieldInfo(index,pFieldInfo,0); } else if(m_SlfObjectEntry[index].Type==CURVE_OBJECT){ //SetSlfTableRecordCount(index,pInfo->DimInfo[0].Samples); memmove(pFieldInfo[0].Unit,pInfo->DimInfo[0].Unit,sizeof(pFieldInfo[0].Unit)); memmove(pFieldInfo[0].Name,pInfo->DimInfo[0].Name,sizeof(pFieldInfo[0].Name)); memmove(pFieldInfo[0].HZName,pInfo->DimInfo[0].AliasName,sizeof(pFieldInfo[0].HZName)); pFieldInfo[0].Start=pInfo->DimInfo[0].StartVal; SetSlfTableFieldInfo(index,pFieldInfo,0); } } bool CLogIO:: SetTDTInfo(int index,Slf_TDT* pInfo) { if(IsWis) return SetWisTDTInfo(index,pInfo); else return SetSlfTDTInfo(index,pInfo); } bool CLogIO:: SetFMTInfo(int index,Slf_FMT* pInfo) { if(IsWis) return SetWisFMTInfo(index,pInfo); else return SetSlfFMTInfo(index,pInfo); } bool CLogIO:: SetWaveInfo(int index,Slf_WAVE* pInfo) { if(IsWis) return SetWisWaveInfo(index,pInfo); else return SetSlfWaveInfo(index,pInfo); } bool CLogIO:: SetCurveInfo(int index,Slf_CURVE* pInfo) { if(IsWis) return SetWisCurveInfo(index,pInfo); else return SetSlfCurveInfo(index,pInfo); } void CLogIO:: GetWisMessage(Slf_FILE_MESSAGE &mssage) { memset(&mssage,0,sizeof(mssage)); WELL_STATIC_INFO inf; int indexSTable=OpenTable("井基本信息"); if(indexSTable<0) { indexSTable=OpenTable("STATIC"); } if(indexSTable>=0) ReadTable(indexSTable,1,&inf); else { memset(&inf,0,sizeof(inf)); } Slf_CONST xy; bool flag=0; indexSTable=OpenTable("LONG_CONST"); if(indexSTable>=0) { int rec=this->GetTableRecordCount(indexSTable); for(int i=0;i=0) { int rec=this->GetTableRecordCount(indexSTable); for(int i=0;i99999999||inf.XCoor<0.1) inf.XCoor=0; if(inf.YCoor>99999999||inf.YCoor<0.1) inf.YCoor=0; mssage.Xcoor=inf.XCoor; mssage.Ycoor=inf.YCoor; if(!strstr(m_SlfHead.Version,"Slf 3.0")) { memmove(&mssage.X0,&inf.Remark[20],8); memmove(&mssage.Y0,&inf.Remark[28],8); } else { mssage.X0=inf.XCoor; mssage.Y0=inf.YCoor; } memmove(mssage.Item,inf.MethodCWell,sizeof(mssage.Item)); memmove(mssage.WellName,inf.WellName,sizeof(mssage.WellName)); memmove(mssage.AreaName,inf.AreaName,sizeof(mssage.AreaName)); memmove(mssage.OilCompanyName,inf.OilCompanyName,sizeof(mssage.OilCompanyName)); if(inf.As1<0.1) inf.As1=0; if(inf.Bs1<0.1) inf.Bs1=0; mssage.Altitude=inf.As1; mssage.Kelly=inf.Bs1; mssage.EndDrillDate=StringToTime(inf.EndDrillDate); mssage.StartDrillDate=StringToTime(inf.StartDrillDate); mssage.StartDepth=inf.Sc1Edep; mssage.EndDepth=inf.Sc2sdep; memmove(&mssage.X0,&inf.Remark[0],8); memmove(&mssage.Y0,&inf.Remark[8],8); memmove(&mssage.TVD,&inf.Remark[16],4); WELL_DYNAMIC_INFO dinf; indexSTable=OpenTable("测井信息"); if(indexSTable>=0) ReadTable(indexSTable,1,&dinf); else memset(&dinf,0,sizeof(dinf)); memmove(mssage.LogCompanyName,dinf.LogCompanyName,sizeof(mssage.LogCompanyName)); memmove(mssage.Operator,dinf.Operator,sizeof(mssage.Operator)); memmove(mssage.LoggingTeam,dinf.Item,sizeof(mssage.LoggingTeam)); mssage.LoggingDate=StringToTime(dinf.Date); } void CLogIO:: SetWisMessage(Slf_FILE_MESSAGE mssage) { int indexSTable=OpenSTATIC("井基本信息"); WELL_STATIC_INFO inf; if(indexSTable>-1) { ReadTable(indexSTable,1,&inf); } else memset(&inf,0,sizeof(inf)); inf.XCoor=mssage.Xcoor; inf.YCoor=mssage.Ycoor; memmove(inf.MethodCWell,mssage.Item,sizeof(inf.MethodCWell)); memmove(inf.WellName,mssage.WellName,sizeof(inf.WellName)); memmove(inf.AreaName,mssage.AreaName,sizeof(inf.AreaName)); memmove(inf.OilCompanyName,mssage.OilCompanyName,sizeof(inf.OilCompanyName)); inf.As1=mssage.Altitude; inf.Bs1=mssage.Kelly; if(mssage.EndDrillDate<0) mssage.EndDrillDate=0; CString css=ctime((time_t *)&mssage.EndDrillDate); char buf[200]; strcpy(buf,css.GetString()); memmove(inf.EndDrillDate,buf,sizeof(inf.EndDrillDate)); memmove(inf.StartDrillDate,ctime((time_t *)&mssage.StartDrillDate),sizeof(inf.StartDrillDate)); inf.Sc1Edep=mssage.StartDepth; inf.Sc2sdep=mssage.EndDepth; memmove(&inf.Remark[0],&mssage.X0,8); memmove(&inf.Remark[8],&mssage.Y0,8); memmove(&inf.Remark[16],&mssage.TVD,4); memmove(&inf.Remark[20],&mssage.Xcoor,8); memmove(&inf.Remark[28],&mssage.Ycoor,8); WriteTable(indexSTable,1,&inf); WELL_DYNAMIC_INFO dinf; indexSTable=OpenDYNAMIC("测井信息"); if(indexSTable>=0) ReadTable(indexSTable,1,&dinf); else memset(&dinf,0,sizeof(dinf)); memmove(dinf.LogCompanyName,mssage.LogCompanyName,sizeof(dinf.LogCompanyName)); memmove(dinf.Operator,mssage.Operator,sizeof(dinf.Operator)); memmove(dinf.Item,mssage.LoggingTeam,sizeof(dinf.Item)); css=ctime((time_t *)&mssage.LoggingDate); strcpy(buf,css.GetString()); memmove(dinf.Date,buf,sizeof(dinf.Date)); WriteTable(indexSTable,1,&dinf); } void CLogIO:: GetFileMessage(Slf_FILE_MESSAGE &mssage) { if(IsWis) GetWisMessage(mssage); else GetSlfMessage(mssage); if(mssage.Xcoor==-999.25||mssage.Xcoor==-9999||mssage.Xcoor==-99999) mssage.Xcoor=0; if(mssage.Ycoor==-999.25||mssage.Ycoor==-9999||mssage.Ycoor==-99999) mssage.Ycoor=0; if(mssage.Kelly==999999||mssage.Kelly==9999999) mssage.Kelly=0; } void CLogIO:: SetFileMessage(Slf_FILE_MESSAGE mssage) { if(mssage.Xcoor==-999.25||mssage.Xcoor==-9999||mssage.Xcoor==-99999) mssage.Xcoor=0; if(mssage.Ycoor==-999.25||mssage.Ycoor==-9999||mssage.Ycoor==-99999) mssage.Ycoor=0; if(mssage.Kelly==999999||mssage.Kelly==9999999) mssage.Kelly=0; if(IsWis) SetWisMessage(mssage); else SetSlfMessage(mssage); } int CLogIO::SetDepthOffset(int iIndex,int no1,int j,int Count,float *dep1,float *dep2,char *buf,int &IsChange) { float Depth=0; GetTableFieldData(iIndex,no1,buf,j+1); sscanf(buf,"%f",&Depth); if(Count==0) { IsChange=1; float dep=Depth+dep1[0]; dep=(int)(dep*10000+0.5)/10000.0; SetTableFieldData(iIndex,no1,(char *)&dep,j+1); } else { float dep=0; for(int i=0;idep1[i+1]) continue; IsChange=1; if(dep1[i+1]==dep1[i]) SetTableFieldData(iIndex,no1,(char *)&dep2[i],j+1); else { dep=dep2[i]+(dep2[i+1]-dep2[i])/(dep1[i+1]-dep1[i])*(Depth-dep1[i]); dep=(int)(dep*10000+0.5)/10000.0; SetTableFieldData(iIndex,no1,(char *)&dep,j+1); } } } return IsChange; } //whp add bool CLogIO :: CorrectTableDepth(int iIndex,float delta) { int i; if (iIndex < 0) return FALSE; int numrec=GetTableRecordCount(iIndex); if(numrec<1) return FALSE; int no1=GetTableFieldNo(iIndex,"SDEP"); int no2=GetTableFieldNo(iIndex,"EDEP"); int no3=GetTableFieldNo(iIndex,"DEP"); int no4=GetTableFieldNo(iIndex,"DEPTH"); int no5=GetTableFieldNo(iIndex,"MDEPTH1"); int no6=GetTableFieldNo(iIndex,"MDEPTH2"); int no7=GetTableFieldNo(iIndex,"MDEPTH3"); int no8=GetTableFieldNo(iIndex,"MDEPTH4"); int no9=GetTableFieldNo(iIndex,"MDEPTH5"); int no10=GetTableFieldNo(iIndex,"MDEPTH6"); int no11=GetTableFieldNo(iIndex,"MDEPTH7"); int no12=GetTableFieldNo(iIndex,"MDEPTH8"); int no13=GetTableFieldNo(iIndex,"MDEPTH9"); int no14=GetTableFieldNo(iIndex,"MDEPTH10"); int no15=GetTableFieldNo(iIndex,"STDEP"); int no16=GetTableFieldNo(iIndex,"ENDEP"); if(no1<0&& no2<0&& no3<0 &&no4<0 &&no5<0 &&no6<0 &&no7<0 &&no8<0 &&no9<0 &&no10<0 &&no11<0 &&no12<0 &&no13<0 &&no14<0 &&no15<0 &&no16<0 ) return FALSE; int len=GetTableRecordLength(iIndex); char *buf=new char[len+1]; float Depth,dep; for(int j=0;j-1) { GetTableFieldData(iIndex,no1,buf,j+1); sscanf(buf,"%f",&Depth); Depth+=delta; SetTableFieldData(iIndex,no1,(char *)&Depth,j+1); } if(no2>-1) { GetTableFieldData(iIndex,no2,buf,j+1); sscanf(buf,"%f",&Depth); Depth+=delta; SetTableFieldData(iIndex,no2,(char *)&Depth,j+1); } if(no3>-1) { GetTableFieldData(iIndex,no3,buf,j+1); sscanf(buf,"%f",&Depth); Depth+=delta; SetTableFieldData(iIndex,no3,(char *)&Depth,j+1); } if(no4>-1) { GetTableFieldData(iIndex,no4,buf,j+1); sscanf(buf,"%f",&Depth); Depth+=delta; SetTableFieldData(iIndex,no4,(char *)&Depth,j+1); } if(no5>-1) { GetTableFieldData(iIndex,no5,buf,j+1); sscanf(buf,"%f",&Depth); if(Depth) { Depth+=delta; SetTableFieldData(iIndex,no5,(char *)&Depth,j+1); } } if(no6>-1) { GetTableFieldData(iIndex,no6,buf,j+1); sscanf(buf,"%f",&Depth); if(Depth) { Depth+=delta; SetTableFieldData(iIndex,no6,(char *)&Depth,j+1); } } if(no7>-1) { GetTableFieldData(iIndex,no7,buf,j+1); sscanf(buf,"%f",&Depth); if(Depth) { Depth+=delta; SetTableFieldData(iIndex,no7,(char *)&Depth,j+1); } } if(no8>-1) { GetTableFieldData(iIndex,no8,buf,j+1); sscanf(buf,"%f",&Depth); if(Depth) { Depth+=delta; SetTableFieldData(iIndex,no8,(char *)&Depth,j+1); } } if(no9>-1) { GetTableFieldData(iIndex,no9,buf,j+1); sscanf(buf,"%f",&Depth); if(Depth) { Depth+=delta; SetTableFieldData(iIndex,no9,(char *)&Depth,j+1); } } if(no10>-1) { GetTableFieldData(iIndex,no10,buf,j+1); sscanf(buf,"%f",&Depth); if(Depth) { Depth+=delta; SetTableFieldData(iIndex,no10,(char *)&Depth,j+1); } } if(no11>-1) { GetTableFieldData(iIndex,no11,buf,j+1); sscanf(buf,"%f",&Depth); if(Depth) { Depth+=delta; SetTableFieldData(iIndex,no11,(char *)&Depth,j+1); } } if(no12>-1) { GetTableFieldData(iIndex,no12,buf,j+1); sscanf(buf,"%f",&Depth); if(Depth) { Depth+=delta; SetTableFieldData(iIndex,no12,(char *)&Depth,j+1); } } if(no13>-1) { GetTableFieldData(iIndex,no13,buf,j+1); sscanf(buf,"%f",&Depth); if(Depth) { Depth+=delta; SetTableFieldData(iIndex,no13,(char *)&Depth,j+1); } } if(no14>-1) { GetTableFieldData(iIndex,no14,buf,j+1); sscanf(buf,"%f",&Depth); if(Depth) { Depth+=delta; SetTableFieldData(iIndex,no14,(char *)&Depth,j+1); } } if(no15>-1) { GetTableFieldData(iIndex,no15,buf,j+1); sscanf(buf,"%f",&Depth); { Depth+=delta; SetTableFieldData(iIndex,no15,(char *)&Depth,j+1); } } if(no16>-1) { GetTableFieldData(iIndex,no16,buf,j+1); sscanf(buf,"%f",&Depth); { Depth+=delta; SetTableFieldData(iIndex,no16,(char *)&Depth,j+1); } } } delete buf; return TRUE; }