/*#include "MyDlisLib.h" #include "MyLisLib.h" #include "MyXtfLib.h"*/ #pragma once #include "WisTableTran.h" #include "BaseFun.h" //#include "log.h" //void AppendConsole(pai::log::Priority priority,const QString &output); WisTableTran::WisTableTran() { m_TranNum=0; WisDefTable=NULL; SlfDefTable=NULL; outinf=NULL; } WisTableTran::~WisTableTran() { if(m_TranNum) { //for(int i=0;i2)m_TTI.tinfo[m_TTI.ZdNum].ZdType=DataList.at(2); if(DataList.count()>3)m_TTI.tinfo[m_TTI.ZdNum].ZdLen=DataList.at(3); if(DataList.count()>4)m_TTI.tinfo[m_TTI.ZdNum].ZdAlias=DataList.at(4); m_TTI.ZdNum++; } } bool WisTableTran::GetTranTableInf() {//读TableTran.ini m_TranNum=0; QString ConfigName = GetConfPath()+"TableTran.ini"; QFile InFile(ConfigName); if( !InFile.open(QIODevice::ReadOnly ) )return 0; QTextStream textstream( &InFile ); QString line; while(!textstream.atEnd()) { line=textstream.readLine(); if(line.indexOf("//")>=0)continue; if(line.indexOf("#")>=0)m_TranNum++; } if(!m_TranNum){ InFile.close(); return 0; } InFile.seek(0); m_TTI=new TRANTABLEINF[m_TranNum]; int num=-1; QStringList temp; while(!textstream.atEnd()) { line=textstream.readLine(); if(line.indexOf("//")>=0)continue; line=line.toUpper(); if(line.indexOf("#")>=0) { if(num>=0) { GetTTI(m_TTI[num],temp); temp.clear(); } num++; line=line.replace("#",""); QStringList DataList=GetStringList(line,1,1,1,1,1); m_TTI[num].OutName=DataList.at(0); m_TTI[num].InName=DataList.at(1); if(DataList.count()>2)m_TTI[num].AliasName=DataList.at(2); } else temp.append(line); } GetTTI(m_TTI[num],temp); InFile.close(); for(int i=0;i0)tempName=tempName.replace("+",","); if(tempName.indexOf("-")>0)tempName=tempName.replace("-",","); QStringList tempList=tempName.split(","); for(int m=0;m-1) { ConfigName+=GetOilFieldName(); iswis=1; } ConfigName+=table_inf; QFile InFile(ConfigName); if( !InFile.open(QIODevice::ReadOnly ) ) { QMessageBox::warning(NULL,"提示","打开缺省表配置文件"+ConfigName+"错误"); return 0; } QTextStream textstream( &InFile ); QString line; QString TableName,TableAliasName; //int ZdNum; QStringList ZdName,HzName,ZdUnit,ZdLen,ZdType,ZdRes,DataList; while(!textstream.atEnd()) { line=textstream.readLine(); line=line.toUpper(); while(line.indexOf("#")>=0) { line=line.replace("#",""); DataList=GetStringList(line,1,1,1,1,1); if(DataList.count()<2)continue; TableName=DataList.at(0); TableAliasName=DataList.at(1); QString menuinfo[50]; for(int m=0;m=0) { QString str=line; str.trimmed(); int len=str.length(); if(len>-1&&str.at(len-1)==',') { while(!textstream.atEnd()) { line=textstream.readLine(); str+=line; str.trimmed(); int len=str.length(); if(len>-1&&str.at(len-1)!=',') break; } } int ind=ZdName.size()-1; if(ind>-1) menuinfo[ind]=str; continue;//枚举行 } line=line.toUpper(); if(line.indexOf("#")>=0) { break; } DataList=GetStringList(line,1,1,1,1,1); if(DataList.count()<5)continue; ZdName.append(DataList.at(0)); HzName.append(DataList.at(1)); ZdUnit.append(DataList.at(2)); bool IsZdType=0; for(int j=0;j<11;j++) { if(DataList.at(3)==QString(Rep_STR[j])) { ZdType.append(QString::number(j+1)); IsZdType=1; break; } } if(!IsZdType)QMessageBox::warning(NULL,"提示","defauletable.ini文件中表"+TableName+"的字段名"+DataList.at(0)+"类型不正确"); ZdLen.append(DataList.at(4)); if(DataList.count()>5) { if(DataList.at(5).toInt()>0) { QString filename=GetConfPath(); switch(DataList.at(5).toInt()) { case 1: filename+="RESULT.ini"; break; case 2: filename+="GujingOrder.ini"; break; case 3: filename+="CoreOil.ini"; break; case 4: filename+="CoreLith.ini"; break; case 5: filename+="Corecolor.ini"; break; case 6: filename+="colorind.ini"; break; case 7: filename+="GeoLith.ini"; break; } FILE *fp1=fopen(filename.toStdString().c_str(),"r+t"); QString str; if(fp1) { char buf1[100]; int flag=0; str="MENU="; while(!feof(fp1)) { int ret=fscanf(fp1,"%s",buf1); if(ret<1) break; if(flag) str+=","; else flag=1; str+=buf1; } fclose(fp1); } int ind=ZdRes.size(); menuinfo[ind]=str; } ZdRes.append(DataList.at(5)); } else ZdRes.append("0"); } WisDefTable[m]=SetTableInf(TableName,TableAliasName,ZdName.count(),ZdName,HzName,ZdUnit,ZdType,ZdLen,ZdRes,menuinfo); ZdName.clear(); ZdLen.clear(); ZdType.clear(); HzName.clear(); ZdUnit.clear(); ZdRes.clear(); for(int i=0;i<50;i++) { menuinfo[i]=""; } break; } } } } InFile.close(); if(iswis){ //检查输出匹配表名是否在系统定义的缺省表中 int nn=0,mm=0; QString mes="TableTran.ini中定义的输出表名:\r\n"; QString ZdMes=""; for(int i=0;i=0)break; #pragma region 相同字段 //如果没有和缺省表名相同的表,检查是否有同结构的表,如要把GEOSTRATUM转成LAYER_DATA的表 if(!IsS2W)DefTab=&WisDefTable[m]; else DefTab=&SlfDefTable[m]; if(fieldNum==DefTab->ZdNum)//m_TTI[m].OutName==TableName) { TranTable=m; // 检查字段名、字段类型是否完全一致 for(int k=0;ktinfo[k].Name,tableFieldInfo[k].Name)!=0 ||DefTab->tinfo[k].RepCode!=tableFieldInfo[k].RepCode ||DefTab->tinfo[k].CodeLength!=tableFieldInfo[k].Length) { TranTable=-1; break; } } if(TranTable>=0)break; } #pragma endregion 相同字段 } return TranTable; } void WisTableTran::GetOutInf(int TranTable) { if(outinf)delete []outinf; outinf=new OUTINF[m_TTI[TranTable].ZdNum]; for(int n=0;n0||tempName.indexOf("-")>0) { if(tempName.indexOf("+")>0)outinf[n].Sep="+"; if(tempName.indexOf("-")>0)outinf[n].Sep="-"; tempNameList=tempName.split(outinf[n].Sep); varnum=tempNameList.count(); } if(varnum==1)strcpy(outinf[n].InName1,tempName.toStdString().c_str()); else { strcpy(outinf[n].InName1,tempNameList[0].toStdString().c_str()); strcpy(outinf[n].InName2,tempNameList[1].toStdString().c_str()); } } } // DEFAULTTABLE WisTableTran::SetTableInf(QString TableName,QString TableHzName,int num,QStringList ZdName,QStringList HzName,QStringList ZdUnit,QStringList ZdType,QStringList ZdLen,QStringList ZdRes,QString *menu) { DEFAULTTABLE DefTable; memset(&DefTable.tinfo,0,sizeof(DefTable.tinfo)); DefTable.TableName=TableName; DefTable.TableAliasName=TableHzName; DefTable.ZdNum=num; for(int i=0;i=0) { line=line.replace("#",""); DataList=GetStringList(line,1,1,1,1,1); if(DataList.count()<2)continue; TableName=DataList.at(0); TableAliasName=DataList.at(1); for(int m=0;m=0)continue;//枚举行 line=line.toUpper(); if(line.indexOf("#")>=0) { break; } DataList=GetStringList(line,1,1,1,1,1); if(DataList.count()<5)continue; ZdName.append(DataList.at(0));HzName.append(DataList.at(1));ZdUnit.append(DataList.at(2)); bool IsZdType=0; for(int j=0;j<11;j++) { if(DataList.at(3)==QString(Rep_STR[j])) { ZdType.append(QString::number(j+1)); IsZdType=1; break; } } if(!IsZdType)QMessageBox::warning(NULL,"提示","defauletable.ini文件中表"+TableName+"的字段名"+DataList.at(0)+"类型不正确"); ZdLen.append(DataList.at(4)); if(DataList.count()>5)ZdRes.append(DataList.at(5)); else ZdRes.append("0"); } DEFAULTTABLE DefTable=SetTableInf(TableName,TableAliasName,ZdName.count(),ZdName,HzName,ZdUnit,ZdType,ZdLen,ZdRes,NULL); if(IsWis) { //WisDefTable[m].tinfo=new Slf_OBJECT_FIELD[DefTable.ZdNum+1]; memcpy(&WisDefTable[m],&DefTable,sizeof(DefTable)); } else { //SlfDefTable[m].tinfo=new Slf_OBJECT_FIELD[DefTable.ZdNum+1]; memcpy(&SlfDefTable[m],&DefTable,sizeof(DefTable)); } ZdName.clear(),ZdLen.clear(),ZdType.clear(),HzName.clear();ZdUnit.clear(); break; } } } } InFile.close(); return ; }