#include #include "InterIConvertor.h" #include "MemRdWt.h" #include "CStringType.h" //#include "ObjWelllogWavefile.h" #include "BaseFun.h" #include "geometryutils.h" #include BEGIN_OSGGRAPHICS_NAMESPACE; InterIConvertor::InterIConvertor():IConvertor(),m_fileMessage(NULL), m_DepthLength(0), m_DimCurvefilePath("") { memset(&WellDynamicInfo,0,sizeof(WELL_DYNAMIC_INFO)); memset(&FILE_MESSAGE,0,sizeof(Slf_FILE_MESSAGE)); memset(&WellStaticInfo,0,sizeof(WELL_STATIC_INFO)); m_vCurverName.resize(MaxCurve); for (int i=0;i::iterator itor=m_vCurverName.begin(); for (;itor!=m_vCurverName.end();) { itor=m_vCurverName.erase(itor); } m_vCurverName.clear(); ///////ww itor=m_vCurverUnit.begin(); for (;itor!=m_vCurverUnit.end();) { itor=m_vCurverUnit.erase(itor); } m_vCurverUnit.clear(); /////// if (m_fileMessage) { delete[]m_fileMessage; m_fileMessage=NULL; } } ////////////////// /// //用户配置文件后缀 dll文件同名的.cfg文件 // example :aa.dll =>aa.cfg // QVector InterIConvertor::GetSupportFileExtensions() { QVectorexts; if(!m_thisModuleName.isEmpty()) { char *name=new char[1000]; // D:\LogPlus\bin\ GetBinDir(name); QString path=m_thisModuleName; path=name; path+="/convertor/"; path+=m_thisModuleName; path+=".cfg"; FILE *fp=fopen(path.toStdString().c_str(),"rt"); if(fp) { while(!feof(fp)) { memset(name,0,1000); fread(name,1000,1,fp); QString line=name; line.replace(","," "); line.replace("\t"," "); line.replace("\r"," "); line.replace("\n"," "); QStringList strs=line.split(" "); strs.removeAll(""); foreach(QString str,strs)exts.push_back(str); } fclose(fp); } delete name; } return exts; } QString InterIConvertor::GetFileContent( const QString &filename ) { if(strlen(m_fileMessage)) { return m_fileMessage; } QFile file(filename); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return ""; QString lineString(""); //读取文件前50行 for (int row=0;row<50;row++) { lineString += "\n"+file.readLine(); } return lineString; } bool InterIConvertor::Init() { m_TableName=""; IConvertor::Init(); memset(&FILE_MESSAGE,0,sizeof(FILE_MESSAGE)); memset(&WellDynamicInfo,0,sizeof(WELL_DYNAMIC_INFO)); //whp add 2019.8.1 for 初始化井静态信息 memset(&WellStaticInfo,0,sizeof(WELL_STATIC_INFO)); m_DimCurvesList.clear(); if(m_fileMessage) m_fileMessage[0]=0; ////ww for (int i=0;i(tempStr.c_str()); int Value= ScanLogFile(filePath,m_fileMessage,&m_vCurverName[0],&m_vCurverUnit[0]); m_CurveData.Curve_Num=Value; if(Value<=0) return 0;//ww return Value; } // QList pai::graphics::InterIConvertor::GetWellLogList( const QString &filename ) // { // m_vWellLogCurve.clear(); // if(m_CurveData.Curve_Num<=0) return m_vWellLogCurve; // // GetWellLogMetas( m_vWellLogCurve, filename ); // InitWelllogRoundInfo(filename); // if(WellStaticInfo.XCoor)FILE_MESSAGE.Xcoor=WellStaticInfo.XCoor; // if(WellStaticInfo.YCoor)FILE_MESSAGE.Ycoor=WellStaticInfo.YCoor; // memmove(FILE_MESSAGE.Item,WellStaticInfo.MethodCWell,sizeof(FILE_MESSAGE.Item)); // if(*WellStaticInfo.WellName&&*WellStaticInfo.WellName!=' ')memmove(FILE_MESSAGE.WellName,WellStaticInfo.WellName,sizeof(FILE_MESSAGE.WellName)); // if(*WellStaticInfo.AreaName&&*WellStaticInfo.AreaName!=' ')memmove(FILE_MESSAGE.AreaName,WellStaticInfo.AreaName,sizeof(FILE_MESSAGE.AreaName)); // if(*WellStaticInfo.OilCompanyName&&*WellStaticInfo.OilCompanyName!=' ')memmove(FILE_MESSAGE.OilCompanyName,WellStaticInfo.OilCompanyName,sizeof(FILE_MESSAGE.OilCompanyName)); // if(WellStaticInfo.As1)FILE_MESSAGE.Altitude=WellStaticInfo.As1; // if(WellStaticInfo.Bs1)FILE_MESSAGE.Kelly=WellStaticInfo.Bs1; // if(strlen(WellStaticInfo.EndDrillDate))FILE_MESSAGE.EndDrillDate=StringToTime(WellStaticInfo.EndDrillDate); // if(strlen(WellStaticInfo.StartDrillDate))FILE_MESSAGE.StartDrillDate=StringToTime(WellStaticInfo.StartDrillDate); // if(WellStaticInfo.Sc1Edep)FILE_MESSAGE.StartDepth=WellStaticInfo.Sc1Edep; // if(WellStaticInfo.Sc2sdep)FILE_MESSAGE.EndDepth=WellStaticInfo.Sc2sdep; // if(*(float*)&WellStaticInfo.Remark[0])memmove(&FILE_MESSAGE.X0,&WellStaticInfo.Remark[0],4); // if(*(float*)&WellStaticInfo.Remark[4])memmove(&FILE_MESSAGE.Y0,&WellStaticInfo.Remark[4],4); // if(*(float*)&WellStaticInfo.Remark[8])memmove(&FILE_MESSAGE.TVD,&WellStaticInfo.Remark[8],4);//whp 2019.7.30 该语句会把解编模块扫描得到的TVD数据清空 // //已在ASCII模块中做了相应的处理,不知道别的模块中还有没有 // if(strlen(WellDynamicInfo.LogCompanyName))memmove(FILE_MESSAGE.LogCompanyName,WellDynamicInfo.LogCompanyName,sizeof(FILE_MESSAGE.LogCompanyName)); // if(strlen(WellDynamicInfo.Operator))memmove(FILE_MESSAGE.Operator,WellDynamicInfo.Operator,sizeof(FILE_MESSAGE.Operator)); // if(strlen(WellDynamicInfo.Item))memmove(FILE_MESSAGE.LoggingTeam,WellDynamicInfo.Item,sizeof(FILE_MESSAGE.LoggingTeam)); // if(strlen(WellDynamicInfo.Date))FILE_MESSAGE.LoggingDate=StringToTime(WellDynamicInfo.Date); // //add end // InitWellInfo(filename); // return m_vWellLogCurve; // } QString InterIConvertor::GetfilePath(const char *FileName) { QFileInfo fileInfo(QString::fromLocal8Bit(FileName)); QDir dir(::GetImagePath()); dir.cdUp(); QString tempPath=dir.absolutePath()+"/"+fileInfo.completeBaseName()+".slf"; return tempPath; } // void InterIConvertor::GetWellLogMetas( QList &vWellLog, QString strWellLogPath) // { // //||m_CurveData.Curve_Step==0.0 // if(m_CurveData.Curve_Num<=0) return;//ww // for( long j = 0 ; jSetName(curveName); // pWelllog->SetAliasName(curveName); // QString curveUnit=QString::fromLocal8Bit(m_vCurverUnit[j] );//ww // pWelllog->GetLogCurve().SetUnit(curveUnit.toStdString()); // vWellLog.push_back(pWelllog); // } // } // void InterIConvertor::GetWellLogObjects( QList &vWellLog, QString strWellLogPath) // { // return; // } void InterIConvertor::InitWelllogRoundInfo(QString FileName) { //char LogRange[24],IntRange[24];char Section[16] SetAudit; if(WellDynamicInfo.MudViscosity)m_WellLogRoundInfo->SetMudViscosity(WellDynamicInfo.MudViscosity); else if(FILE_MESSAGE.Mud_Viscosity[0]) m_WellLogRoundInfo->SetMudViscosity(FILE_MESSAGE.Mud_Viscosity[0]); QString LogCompanyName=WellDynamicInfo.LogCompanyName; LogCompanyName=LogCompanyName.trimmed(); if(LogCompanyName.length()) m_WellLogRoundInfo->SetCompanyName(WellDynamicInfo.LogCompanyName); else m_WellLogRoundInfo->SetCompanyName(FILE_MESSAGE.LogCompanyName); if(strlen(WellDynamicInfo.Date)) m_WellLogRoundInfo->SetDate(WellDynamicInfo.Date); else { QString str=ctime((time_t *)&FILE_MESSAGE.LoggingDate); m_WellLogRoundInfo->SetDate(str.toStdString()); } if(WellDynamicInfo.TempBot)m_WellLogRoundInfo->SetTempBot(WellDynamicInfo.TempBot); else m_WellLogRoundInfo->SetTempBot(FILE_MESSAGE.Well_Bottom_Temperature); if(WellDynamicInfo.WaterLoss) m_WellLogRoundInfo->SetWaterLoss(WellDynamicInfo.WaterLoss); else m_WellLogRoundInfo->SetWaterLoss(FILE_MESSAGE.WaterLoss); if(WellDynamicInfo.MudDensity) m_WellLogRoundInfo->SetDensity(WellDynamicInfo.MudDensity); else m_WellLogRoundInfo->SetDensity(FILE_MESSAGE.Mud_Density[0]); if(WellDynamicInfo.MudResi)m_WellLogRoundInfo->SetResi(WellDynamicInfo.MudResi); else m_WellLogRoundInfo->SetResi(FILE_MESSAGE.Mud_Resistivity[0]); if(WellDynamicInfo.MudTemp)m_WellLogRoundInfo->SetTemp(WellDynamicInfo.MudTemp); else m_WellLogRoundInfo->SetTemp(FILE_MESSAGE.Mud_Temp); if(WellDynamicInfo.MudType) m_WellLogRoundInfo->SetMudType(WellDynamicInfo.MudType); else m_WellLogRoundInfo->SetMudType(FILE_MESSAGE.Mud_Property); m_WellLogRoundInfo->SetIntProg(WellDynamicInfo.IntProg); m_WellLogRoundInfo->SetInteDress(WellDynamicInfo.IntDress); m_WellLogRoundInfo->SetRemark(WellDynamicInfo.Remark); if(strlen(WellDynamicInfo.Operator))m_WellLogRoundInfo->SetOperator(WellDynamicInfo.Operator); else m_WellLogRoundInfo->SetOperator(FILE_MESSAGE.Operator); if(strlen(WellDynamicInfo.Serial)) m_WellLogRoundInfo->SetSerial(WellDynamicInfo.Serial); else m_WellLogRoundInfo->SetSerial(FILE_MESSAGE.YqType); if(strlen(WellDynamicInfo.Item))m_WellLogRoundInfo->SetItem(WellDynamicInfo.Item); else m_WellLogRoundInfo->SetItem(FILE_MESSAGE.Item); m_WellLogRoundInfo->SetINTLog(WellDynamicInfo.LogRange); int len=strlen(m_fileMessage); char *p=m_fileMessage; p+=len+1; float sdep,edep; len=strlen(p); QString tempWellName; if(len>1&&len<20) { sscanf(p,"%f",&sdep); p+=strlen(p)+1; sscanf(p,"%f",&edep); p+=strlen(p)+1; tempWellName=p; } else {//解编模块中没有压回深度信息 sdep=0; edep=0; tempWellName=""; } m_WellLogRoundInfo->SetTopDepth(sdep); m_WellLogRoundInfo->SetBottomDepth(edep); QFileInfo temDir(FileName); if(tempWellName=="") tempWellName=temDir.completeBaseName(); tempWellName.replace(" ","");//whp add 2020.3.3 删除井名中的空格 m_WellLogRoundInfo->SetName(tempWellName.toStdString()); } void InterIConvertor::InitWellInfo(const QString &filename) { if(*FILE_MESSAGE.WellName)m_WellLogRoundInfo->SetWellName(FILE_MESSAGE.WellName);//whp add 2020.7.15 if(*FILE_MESSAGE.AreaName)m_WellLogRoundInfo->SetAreaName(FILE_MESSAGE.AreaName); if(*FILE_MESSAGE.OilCompanyName)m_WellLogRoundInfo->SetOilCompanyName(FILE_MESSAGE.OilCompanyName); if(*FILE_MESSAGE.LogCompanyName)m_WellLogRoundInfo->SetCompanyName(FILE_MESSAGE.LogCompanyName); if(FILE_MESSAGE.Xcoor)m_WellLogRoundInfo->SetXCode(FILE_MESSAGE.Xcoor); if(FILE_MESSAGE.Ycoor)m_WellLogRoundInfo->SetYCode(FILE_MESSAGE.Ycoor); if(FILE_MESSAGE.Altitude)m_WellLogRoundInfo->SetAsl(FILE_MESSAGE.Altitude); if(FILE_MESSAGE.Kelly)m_WellLogRoundInfo->SetBsl(FILE_MESSAGE.Kelly); if(FILE_MESSAGE.X0)m_WellLogRoundInfo->SetXOffset(FILE_MESSAGE.X0); if(FILE_MESSAGE.Y0)m_WellLogRoundInfo->SetYOffset(FILE_MESSAGE.Y0); if(FILE_MESSAGE.TVD)m_WellLogRoundInfo->SetTVD0(FILE_MESSAGE.TVD); QString temp = ::GetConfPath()+"data.ini"; QSettings settings(temp,QSettings::IniFormat,0); settings.setIniCodec(QTextCodec::codecForName("UTF-8")); QStringList serials=settings.value("wellType",0).toStringList(); int i=serials.indexOf(FILE_MESSAGE.WellType); if(i<0) i=0; m_WellLogRoundInfo->SetWellType(i); // if(m_WellLogRoundInfo->GetName()=="")//whp add 2019.8.1 {//???加此句是否合适?如果有文件名,就不再赋值,如JPH-307_core.txt中# WELL FILE: FILEJPH-307 string wellName=string(FILE_MESSAGE.WellName); if (wellName=="") { QFileInfo temDir(filename); QString tempWellName=temDir.completeBaseName(); tempWellName.replace(" ","");//whp add 2020.3.3 删除井名中的空格 m_WellLogRoundInfo->SetName(tempWellName.toStdString()); } else { m_WellLogRoundInfo->SetName(FILE_MESSAGE.WellName); } } } END_OSGGRAPHICS_NAMESPACE;