logplus/DataMgr/src/DataManagger.cpp
2025-10-30 09:50:15 +08:00

1975 lines
62 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <QFileDialog>
#include <QScrollBar>
#include <qformlayout.h>
#include <QInputDialog>
#include <QListWidget>
#include <QCompleter>
#include <qtablewidget.h>
#include <io.h>
#include <QMessageBox>
#include "DataManagger.h"
#include "InDefTableDlg.h"
#include "DataHelper.h"
// #include "DataImport.h"
// #include "ObjWellLogTABLE.h"
// #include "CreateNewCurveDlg.h"
//#include "TableTBCurve.h"
// #include "CurvePropertyEdit.h"
#include "cdialog.h"//"MyListDlg.h"
// #include "curvecomputerDlg.h"
// #include "UnitConvertDlg.h"
// #include "StatisticsDlg.h"
// #include "Statistics2Dlg.h"
// #include "CurveComputePage.h"
// #include "CopyObjectDlg.h"
// #include "WaveComposeDlg.h"//2020.4.14 合成阵列曲线
// #include "ShowWave.h"//波列曲线预览
// #include "ShowCurve.h"//2020.5.12常规曲线预览
#include <QEventLoop>
// #include "tableproeditdlg.h"
// #include "CreateNewTableDlg.h"
#include "BaseFun.h"
#include "DepthProgress.h"
#include "geometryutils.h"
extern DEFAULTTABLE *DefauleTable;//[DefTabNum];
extern int DefTabNum;
//extern char *DataTypea[];
//extern int DataLengtha[];
//namespace Ui{
// class SigelForm;
// class MultForm;
//}
CDataManagger::CDataManagger()
{
DataHelper::InitDefauleTable();//whp add 2019.11.21 初始化系统缺省表结构
}
CDataManagger::~CDataManagger()
{
DataHelper::DelDefauleTable();//清除系统缺省表缓存 whp add 2019.11.21
}
DEFAULTTABLE *CDataManagger::GetDefauleTable()
{
return DefauleTable;
}
int CDataManagger::GetDefTabNum()
{
return DefTabNum;
}
//交互导入数据表
//whp change 2020.3.9 for 统一离散数据入口
void CDataManagger::execInDefTable(int curitemType,
const QString& showWellName,
const QString& wellFileName,const QString& inFile)//const QString& wellFileName)
{
QString DataFile=inFile;//whp add 2020.3.9 for 统一离散数据入口
if(DataFile=="")DataFile = QFileDialog::getOpenFileName(NULL,"打开表数据文件",::GetDataPath(),
"表数据文件(*.txt;*.prn;*.csv;*.las)");
if(DataFile=="")return;
CInDefTableDlg *pDlg=new CInDefTableDlg(curitemType,NULL);
//pDlg->CurItemType=curitemType;
pDlg->FileName=DataFile;
//20191227
if(curitemType)
{
pDlg->m_sigWell->comboBox_WellName->addItem(showWellName);
}
pDlg->m_pUI->tableWidget->setSortingEnabled(true);
pDlg->m_pUI->lineEdit->setText(DataFile);//输入文件
if(DataHelper::m_IsGc)
DataHelper::InitDefauleTable();
QStringList temptable;
for(int i=0;i<DefTabNum;i++){
pDlg->m_pUI->comboBox_Table->addItem(DefauleTable[i].TableAliasName);//系统缺省表列表
temptable << DefauleTable[i].TableAliasName;
}
pDlg->m_pUI->comboBox_Table->addItem("自定义数据表");
temptable << "自定义数据表";
QCompleter *completer = new QCompleter(temptable);
//int t = DefTabNum;
// QCompleter completer2[100] = {temptable};
pDlg->m_pUI->comboBox_Table->setEditable(true);
pDlg->m_pUI->comboBox_Table->setCompleter(completer);
//pDlg->m_pUI->comboBox_Table->autoCompletion();
//delete completer;
pDlg->WellFileName=wellFileName;
if(!pDlg->Init())
return;
pDlg->exec();
}
// //数据对象拷贝
// void CDataManagger::CopyObject(int curitemType,const QString& WellName,const QString& WellRoundName)
// {
// CCopyObjectDlg *pDlg=new CCopyObjectDlg();
// pDlg->curitemType=curitemType;
// pDlg->WellName=WellName;
// pDlg->WellRoundFileName=WellRoundName;
// pDlg->Init();
// pDlg->exec();
// }
//数据表自动导入
//whp change 2020.3.9 for 统一离散数据入口
//void CDataManagger::dataInTable(const QStringList& lst)
void CDataManagger::dataInTable(int curitemType,QString& showWellName,QString& wellFileName)
{
//AfxMessageBox("ddd");
QStringList listFiles = QFileDialog::getOpenFileNames(NULL,"打开表数据文件",::GetDataPath(),
"表数据文件(*.txt;*.prn;*.csv;*.las)");
if(listFiles.size()<1)return ;
char mfi[300];
//2020.7.14 for 单文件导入都要进交互界面
FILE *fp=fopen(listFiles[0].toStdString().c_str(),"rt");
if(fp)
{
fscanf(fp,"%s",mfi);
if(stricmp(mfi,"wellname")) curitemType=1;
fclose(fp);
}
if(curitemType&&wellFileName.isEmpty())
{
QFileInfo ss(listFiles[0]);
wellFileName=ss.baseName();
QString path=GetLogdataPath()+"例子2"/*::GetProject()->GetName()*/;//zzzzz
path+="/#";
path+=ss.baseName();
QString slfpath=path;
path+="/"+ss.baseName();
path+=".slf";
wellFileName=path;
QDir sss;
if(!sss.exists(path))
{
if(QMessageBox::information(NULL,"提示",path+"\n文件不存在,创建文件?",QMessageBox::Yes,QMessageBox::No)!=QMessageBox::Yes) return;
}
CreateDir((char*)slfpath.toStdString().c_str());
}
if(listFiles.size()==1)
{
execInDefTable(curitemType,showWellName,wellFileName,listFiles.at(0));
return ;
}
//
std::vector<QString> fileNameVec;//表文件名
std::vector<QStringList> zdNameVec;//表字段名
std::vector<int>HaveWellName;//首列是否是井名“WELLNAME”标示
std::vector<vector<int>>zdLen;
std::vector<vector<int>>zdType;
//whp change 2020.3.9 for 统一离散数据入口
//listFiles=DataHelper::GetVlidTable(listFiles);
QStringList BadlistFiles;
listFiles=DataHelper::GetVlidTable(curitemType,listFiles,BadlistFiles);
if(listFiles.size()==0)
{
if(BadlistFiles.size()==1)execInDefTable(curitemType,showWellName,wellFileName,BadlistFiles.at(0));
else
{
//设置对话框类型0-只有列表框1-左列表右文本2-只有文本框
CDialog *pDlg=new CDialog();
pDlg->setDialogType(2);
if(!curitemType)pDlg->setTitle("多井离散表数据加载");
else pDlg->setTitle("单井离散表数据加载");
pDlg->setTiShi(0,"您所选择的下列文件全部无法识别");
pDlg->setTiShi(1,"建议您选择单文件打开,进入交互加载");
pDlg->setMessage(BadlistFiles.join("\r\n"));
pDlg->exec();
}
return ;
}
int *DefaultNo=new int[listFiles.size()];
int TableNum=0;
char *pLine=new char[50000];
foreach(QString strFileName, listFiles)
{
fileNameVec.push_back(strFileName);
QFile file(strFileName);
if(!file.open(QIODevice::ReadOnly )) continue;
// QTextStream textstream( &file );
// QString line = textstream.readLine();
file.readLine(pLine,50000);
QByteArray line=pLine;
while(DataHelper::IsNullLine(line)){
file.readLine(pLine,50000);
line=pLine;
}
QStringList StrList,StrListZD=GetStringList(line);//=line.split(",");
zdNameVec.push_back(StrListZD);
int PosWN=0;//井名字段位置
if(StrListZD.at(0).toUpper().indexOf("WELLNAME")>=0)PosWN=1;//if(StrListZD.at(0).toUpper()=="WELLNAME")PosWN=1;
HaveWellName.push_back(PosWN);
int ColNum=StrListZD.size();
int *FieldType=new int[ColNum];
for(int i=0;i<ColNum;i++)FieldType[i]=1;//1-int,2-short,3-long,4-float,5-double,6-string
#pragma region 根据字段内容确定字段值类型
//非数值则为string数值有小数点即为float否则为int
while(!file.atEnd())
{
file.readLine(pLine,50000);
QByteArray line=pLine;
if(DataHelper::IsNullLine(line))continue;
QStringList StrList=GetStringList(line);
int DataCol=StrList.size();
for(int i=0;i<ColNum;i++)
{
if(i>=DataCol)continue;//缺失数据5
QString ss=StrList.at(i);
if(FieldType[i]==1){if(DataHelper::StrType(ss)!=FieldType[i])FieldType[i]=DataHelper::StrType(ss);}
else if(FieldType[i]==4){if(DataHelper::StrType(ss)==6)FieldType[i]=6;}
}
}
#pragma endregion 根据字段内容确定字段值类型
DefaultNo[TableNum++]=DataHelper::GetSimilarTable(ColNum-PosWN,&FieldType[PosWN]);//匹配缺省表,返回缺省表序号
vector<int>m_zdLen;
vector<int>m_zdType;
for(int i=0;i<ColNum;i++)
{
m_zdType.push_back(FieldType[i]);
int ZdLen=RepSize[FieldType[i]];if(FieldType[i]==6)ZdLen=128;
m_zdLen.push_back(ZdLen);
}
zdType.push_back(m_zdType);
zdLen.push_back(m_zdLen);
delete []FieldType;
file.close();
}
delete pLine;
QStringList OutTableName;
QStringList OutWellName;//导入井名
int HaveDefaultTable=0;//匹配上的缺省表个数
//whp add 20200107
CDialog *pDlg=new CDialog();//CMyListDlg *pDlg=new CMyListDlg();
//设置对话框类型0-只有列表框1-左列表右文本2-只有文本框
//beCheck点击确定时是否需要对"导入井名"和"导入表名"列字符串进行有效性检查
if(BadlistFiles.size()==0)pDlg->setDialogType(0,1);
else pDlg->setDialogType(1,1);
if(!curitemType)
{
pDlg->setTitle("导入多井离散表数据");
pDlg->setTiShi(0,"请注意检查和完善“导入井名”和“导入表名”信息");
pDlg->setTiShi(1,"是否继续导入当前数据文件?是--点击确认,否--点击取消");
}
else
{
pDlg->setTitle("导入单井离散表数据");
pDlg->setTiShi(0,"请注意检查和完善“导入表名”信息");
if(curitemType==1)pDlg->setTiShi(1,"您确认将所选择的数据文件导入到当前井中?是--点击确认,否--点击取消");
else pDlg->setTiShi(1,"您确认将所选择的数据文件导入到当前井次文件中?是--点击确认,否--点击取消");
}
if(BadlistFiles.size())
{
pDlg->setTiShi(2,"您所选择的下列文件无法识别");
pDlg->setTiShi(3,"建议您选择单文件打开,进入交互加载");
pDlg->setMessage(BadlistFiles.join("\r\n"));
}
QStringList head;
head<<"输入文件名"<<"导入井名"<<"匹配表名"<<"导入表名";
pDlg->init(TableNum,4,head);
for(int m=0;m<TableNum;m++)
{
QString tablename=listFiles[m],wellname=showWellName;
if(!curitemType)wellname="";//当前选择项是“井”
//ww change 2020.3.13 for 对路径分隔符要进行2种识别
//tablename=tablename.right(tablename.length()-tablename.lastIndexOf("\\")-1);
int index=tablename.lastIndexOf("/");
int index1=tablename.lastIndexOf("\\");
if(index1>index) {
index=index1;
}
tablename=tablename.mid(index+1);
pDlg->setItem(m,0,tablename);//listFiles[m]));
tablename=tablename.left(tablename.lastIndexOf("."));
//文件名中包含井名如well1_table
if(tablename.indexOf("_")>0)
{
if(!curitemType)wellname=tablename.left(tablename.lastIndexOf("_"));
tablename=tablename.right(tablename.length()-tablename.lastIndexOf("_")-1);
}
if(DefaultNo[m]>=0){
tablename=DefauleTable[DefaultNo[m]].TableName;
HaveDefaultTable++;
}
OutTableName.append(tablename);
if(HaveWellName[m])
{
pDlg->setItem(m,1,"多井");
pDlg->setFlags(m,1,Qt::NoItemFlags);
}
else pDlg->setItem(m,1,wellname);
if(DefaultNo[m]>=0)pDlg->setItem(m,2,OutTableName[m]);
else pDlg->setItem(m,2,"");
pDlg->setItem(m,3,OutTableName[m]);
pDlg->setCheckState(m,0,Qt::Checked);
pDlg->setFlags(m,2,Qt::NoItemFlags);
}
if(pDlg->exec()==QDialog::Rejected)
{
delete []DefaultNo;
delete pDlg;
pDlg=NULL;
return ;
}
bool *IsCheck=new bool[TableNum];
OutTableName.clear();
for(int i=0;i<TableNum;i++){
QString ss=pDlg->getItem(i,1);
IsCheck[i]=pDlg->getCheckState(i,0);
OutTableName.append(pDlg->getItem(i,3)) ;
OutWellName.append(pDlg->getItem(i,1)) ;
}
int count=0;
#pragma region 导入表
int ret=0;//QMessageBox提示返回值Yes、AllYes、No、AllNo覆盖、全覆盖、放弃、全放弃
//
//进度提示
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
DepthProgress dp;
dp.CreatProgress(0,listFiles.size(),"开始导入表格数据...");
for(int m=0;m<listFiles.size();m++)//foreach(QString strFileName, listFiles)
{
CLogIO *logio=new CLogIO();
dp.SetDepth(m+1);
if(!IsCheck[m])continue;
QString tablename;
tablename=OutTableName[m];
char tn[100];
QString fi;
strcpy(tn,tablename.toStdString().c_str());
if(HaveWellName[m])continue;//&&(OutWellName[m]=="多井"))continue;
if(OutWellName[m]==showWellName)
{
fi=wellFileName;
logio->Open(fi.toStdString().c_str(),CSlfIO::modeReadWrite);
}
else
{
// CObjWell * pWell =CDataImport::GetWellByName(OutWellName[m]);
// if(!pWell) continue;
// if(pWell->GetWellFileName().isEmpty())
// {
// fi=GetLogdataPath()+GetProject()->GetName()+"\\#"+OutWellName[m];
// CreateDir((char *)fi.toStdString().c_str());
// fi+="\\"+OutWellName[m]+".slf";
// pWell->SetWellFileName(fi);
// logio->Open(fi.toStdString().c_str(),CSlfIO::modeCreate,1024,1024,MACHINE_TYPE,0);
// Slf_FILE_MESSAGE mssage;
// logio->GetFileMessage(mssage);
// int len=strlen(OutWellName[m].toStdString().c_str());
// strncpy(mssage.WellName,OutWellName[m].toStdString().c_str(),len);
// mssage.WellName[len]=0;
// logio->SetFileMessage(mssage);
// }
// else
// {
// fi=pWell->GetWellFileName();
// if(!logio->Open(fi.toStdString().c_str(),CSlfIO::modeReadWrite))continue;
// }
}
int iIndex=logio->OpenTable(tn);
//whp change 2020.3.9 for 当数据表存在时,给出提示
if(iIndex>=0)
{
if(ret!=QMessageBox::YesAll&&ret!=QMessageBox::NoAll)
{
QMessageBox box(QMessageBox::Warning,"提示","文件"+fi+"中已存在数据表"+tablename);
box.setStandardButtons (QMessageBox::Yes|QMessageBox::No|QMessageBox::YesAll|QMessageBox::NoAll);
box.setButtonText (QMessageBox::Yes,QString("覆盖当前\r\n已存在数据表"));
box.setButtonText (QMessageBox::YesAll,QString("覆盖所有\r\n已存在数据表"));
box.setButtonText (QMessageBox::No,QString("放弃当前\r\n数据表加载"));
box.setButtonText (QMessageBox::NoAll,QString("放弃所有\r\n已存在数据表加载"));
ret=box.exec();
}
if(ret==QMessageBox::NoAll||ret==QMessageBox::No)
{
logio->CloseTable(iIndex);
logio->Close();
continue;
}
else
{
logio->DeleteSlfObject(tn);
iIndex=-1;
}
}
//
if (iIndex < 0)
{
QString name,len,ty,bk,hz;
for(int i=0;i<zdNameVec[m].size();i++)
{
if(DefaultNo[m]>=0)
{
name+= QString(QLatin1String(DefauleTable[DefaultNo[m]].tinfo[i].Name));
len+=QString::number(DefauleTable[DefaultNo[m]].tinfo[i].CodeLength);//Length);
ty+=QString::number(DefauleTable[DefaultNo[m]].tinfo[i].RepCode);
bk+="0";
hz+=QString(QLatin1String(DefauleTable[DefaultNo[m]].tinfo[i].Name));
}
else
{
name+=zdNameVec[m].at(i);
len+=QString::number(zdLen[m].at(i));
ty+=QString::number(zdType[m].at(i));
bk+="0";
hz+=zdNameVec[m].at(i);
}
if(i<zdNameVec[m].size()-1) {
name+=",";
len+=",";
ty+=",";
bk+=",";
hz+=",";
}
}
char cname[500],clen[500],cty[500],cbk[500],chz[500];
strcpy(cname,name.toStdString().c_str());
strcpy(clen,len.toStdString().c_str());
strcpy(cty,ty.toStdString().c_str());
strcpy(cbk,bk.toStdString().c_str());
strcpy(chz,hz.toStdString().c_str());
iIndex=logio->Open_Set_Table(tablename.toStdString().c_str(),0,zdNameVec[m].size(),
cname,
clen,//字段长度
cty,//字段类型
cbk,
chz
);//字段备注
}
int rec=logio->GetTableRecordCount(iIndex);
int tcount=logio->GetTableFieldCount(iIndex);
Slf_TABLE_FIELD *field=new Slf_TABLE_FIELD[tcount+1];
logio->GetTableFieldInfo(iIndex,field);
int reclen=logio->GetTableRecordLength(iIndex);
char *Buffer=new char[reclen+1];
QFile file(fileNameVec[m]);
file.open(QIODevice::ReadOnly );
file.readLine(pLine,50000);
QByteArray line=pLine;
while(DataHelper::IsNullLine(line)) {
file.readLine(pLine,50000);
line=pLine;
}
int lineNo=0;
while(!file.atEnd())
{
file.readLine(pLine,50000);
QByteArray line=pLine;
if(DataHelper::IsNullLine(line))continue;
//
QStringList StrList=GetStringList(line);
int DataCol=StrList.size();
int len=0;
for(int i=0;i<tcount;i++)
{
QString DataStr="-9999.";
if(i<DataCol)DataStr=StrList[i];
if(field[i].RepCode!=6)
{
float buf=DataStr.toFloat();
logio->SetData(field[i].RepCode,&Buffer[len],(float *)&buf);
}
else {
strncpy(&Buffer[len],DataStr.toStdString().c_str(),field[i].Length);
}
len+=field[i].Length;
}
logio->WriteTable(iIndex,lineNo+1,Buffer);
lineNo++;
}
if(lineNo>rec) rec=lineNo;
logio->SetTableRecordCount(iIndex,rec);
delete []Buffer;
delete []field;
logio->CloseTable(iIndex);
count++;
delete logio;
// pai::graphics::CDataImport::ChangetoSlf(fi,NULL);
}
#pragma region 导入多井
for(int m=0;m<listFiles.size();m++)//输入数据表文件
{
dp.SetDepth(m+1);
if(!IsCheck[m])continue;
if(!HaveWellName[m])continue;//OutWellName[m]!="多井")continue;
QString tablename;
tablename=OutTableName[m];
char tn[100];
QString fi;
strcpy(tn,tablename.toStdString().c_str());
QStringList WellNameList;
//搜索当前文件包含井名
QFile file(listFiles[m]);
file.open(QIODevice::ReadOnly );
file.readLine(pLine,50000);
QByteArray line=pLine;
while(DataHelper::IsNullLine(line))
{
file.readLine(pLine,50000);
line=pLine;
}
while(!file.atEnd())
{
file.readLine(pLine,50000);
QByteArray line=pLine;
if(DataHelper::IsNullLine(line))continue;
QStringList StrList=GetStringList(line);
bool flag=0;
QString DataStr=StrList[0].toUpper();
for(int j=0;j<WellNameList.size();j++)
{
if(WellNameList.at(j)!=DataStr)continue;
flag=1;break;
}
if(!flag)WellNameList.append(DataStr);
}
//导入
int outnum=0;
for(int n=0;n<WellNameList.size();n++)//导入井名
{
// CObjWell * pWell =CDataImport::GetWellByName(WellNameList.at(n));
// if(!pWell) continue;
CLogIO *logio=new CLogIO();
// QString fi;
// if(pWell->GetWellFileName().isEmpty())
// {
// fi=GetLogdataPath()+GetProject()->GetName()+"\\#"+WellNameList.at(n);
// CreateDir((char *)fi.toStdString().c_str());
// fi+="\\"+WellNameList.at(n)+".slf";
// pWell->SetWellFileName(fi);
// logio->Open(fi.toStdString().c_str(),CSlfIO::modeCreate,1024,1024,MACHINE_TYPE,0);
// Slf_FILE_MESSAGE mssage;
// logio->GetFileMessage(mssage);
// int len=strlen(WellNameList.at(n).toStdString().c_str());
// strncpy(mssage.WellName,WellNameList.at(n).toStdString().c_str(),len);
// mssage.WellName[len]=0;
// logio->SetFileMessage(mssage);
// }
// else
// {
// fi=pWell->GetWellFileName();
// if(logio->Open(fi.toStdString().c_str(),CSlfIO::modeReadWrite))
// {
// int iIndex=logio->OpenTable(tablename.toStdString().c_str());
// if(iIndex>=0)
// {
// //logio->DeleteSlfObject(tablename.toStdString().c_str());
// //whp change 2020.3.9 for 当数据表存在时,给出提示
// if(ret!=QMessageBox::YesAll&&ret!=QMessageBox::NoAll)
// {
// QMessageBox box(QMessageBox::Warning,"提示","文件"+fi+"中已存在数据表"+tablename);
// box.setStandardButtons (QMessageBox::Yes|QMessageBox::No|QMessageBox::YesAll|QMessageBox::NoAll);
// box.setButtonText (QMessageBox::Yes,QString("覆盖当前\r\n已存在数据表"));
// box.setButtonText (QMessageBox::YesAll,QString("覆盖所有\r\n已存在数据表"));
// box.setButtonText (QMessageBox::No,QString("放弃当前\r\n数据表加载"));
// box.setButtonText (QMessageBox::NoAll,QString("放弃所有\r\n已存在数据表加载"));
// ret=box.exec();
// }
// if(ret==QMessageBox::NoAll||ret==QMessageBox::No)
// {
// logio->CloseTable(iIndex);
// logio->Close();
// continue;
// }
// else
// {
// logio->DeleteSlfObject(tablename.toStdString().c_str());
// iIndex=-1;
// }
// }
// }
// }
QString name,len,ty,bk,hz;
for(int i=0;i<zdNameVec[m].size()-1;i++)
{
if(DefaultNo[m]>=0)
{
name+= QString(QLatin1String(DefauleTable[DefaultNo[m]].tinfo[i].Name));
len+=QString::number(DefauleTable[DefaultNo[m]].tinfo[i].CodeLength);//Length);
ty+=QString::number(DefauleTable[DefaultNo[m]].tinfo[i].RepCode);
bk+="0";
hz+=QString(QLatin1String(DefauleTable[DefaultNo[m]].tinfo[i].Name));
}
else
{
name+=zdNameVec[m].at(i+1);
len+=QString::number(zdLen[m].at(i+1));
ty+=QString::number(zdType[m].at(i+1));
bk+="0";
hz+=zdNameVec[m].at(i+1);
}
if(i<zdNameVec[m].size()-2) {
name+=",";
len+=",";
ty+=",";
bk+=",";
hz+=",";
}
}
char cname[500],clen[500],cty[500],cbk[500],chz[500];
strcpy(cname,name.toStdString().c_str());
strcpy(clen,len.toStdString().c_str());
strcpy(cty,ty.toStdString().c_str());
strcpy(cbk,bk.toStdString().c_str());
strcpy(chz,hz.toStdString().c_str());
int iIndex=logio->Open_Set_Table(tablename.toStdString().c_str(),0,zdNameVec[m].size()-1,
cname,
clen,//字段长度
cty,//字段类型
cbk,
chz
);//字段备注
int rec=logio->GetTableRecordCount(iIndex);
int tcount=logio->GetTableFieldCount(iIndex);
Slf_TABLE_FIELD *field=new Slf_TABLE_FIELD[tcount+1];
logio->GetTableFieldInfo(iIndex,field);
int reclen=logio->GetTableRecordLength(iIndex);
char *Buffer=new char[reclen+1];
QFile file(fileNameVec[m]);
file.open(QIODevice::ReadOnly );
file.readLine(pLine,50000);
QByteArray line=pLine;
int lineNo=0;
while(!file.atEnd())
{
file.readLine(pLine,50000);
QByteArray line=pLine;
if(line=="")continue;//whp add 2020.3.11 for 剔除空行
QStringList StrList=GetStringList(line);//line.split(",");
//whp add 2020.3.11 for 剔除空行
bool IsNullLine=1;
for(int kk=0;kk<StrList.size();kk++)
{
if(StrList.at(kk)!="")
{
IsNullLine=0;break;
}
}
if(IsNullLine)continue;
//
if(StrList[0].toUpper()!=WellNameList[n])continue;
int DataCol=StrList.size();
int len=0;
for(int i=0;i<tcount;i++)
{
QString DataStr="-9999.";
if(i<DataCol)DataStr=StrList[i+1];
if(field[i].RepCode!=6)
{
float buf=DataStr.toFloat();
logio->SetData(field[i].RepCode,&Buffer[len],(float *)&buf);
}
else {
strncpy(&Buffer[len],DataStr.toStdString().c_str(),field[i].Length);
}
len+=field[i].Length;
}
logio->WriteTable(iIndex,lineNo+1,Buffer);
lineNo++;
}
if(lineNo>rec) rec=lineNo;
logio->SetTableRecordCount(iIndex,rec);
delete []Buffer;
delete []field;
logio->CloseTable(iIndex);
// pai::graphics::CDataImport::ChangetoSlf(fi,NULL);
delete logio;
outnum++;
}
if(outnum)count++;
}
#pragma endregion 导入多井
//QApplication::restoreOverrideCursor();
delete pDlg;
pDlg=NULL;
delete []IsCheck;
delete []DefaultNo;
#pragma endregion 导入表
QApplication::restoreOverrideCursor();
if(BadlistFiles.size()!=1)AfxMessageBox("完成"+QString::number(count)+"个表数据文件导入!");
else
{
QString ss="而数据文件"+BadlistFiles.at(0)+"无法自动识别,即将进入交互导入";
AfxMessageBox("完成"+QString::number(count)+"个表数据文件导入!\r\n\r\n"+ss);
}
//return BadlistFiles;//whp add 2020.3.9 for 统一离散数据入口
if(BadlistFiles.size()!=1)return;
execInDefTable(curitemType,showWellName,wellFileName,BadlistFiles.at(0));//加载自由数据表
}
// //曲线数值统计
// void CDataManagger::DataStatistics(int Type,const QString& FileName,const QString& CurveName)
// {
// CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
// if(!logio.mFile) return ;
// Slf_CURVE info;
// int index=logio.OpenChannel(CurveName.toStdString().c_str());
// if(index<0)return;
// logio.CloseChannel(index);
// logio.Close();
// if(!Type)
// {
// CStatisticsDlg *pDlg=new CStatisticsDlg();
// pDlg->FileName=FileName;
// pDlg->CurveName=CurveName;
// pDlg->init();
// //pDlg->exec();
// //delete pDlg;
// //pDlg=NULL;
// }
// else
// {
// CStatistics2Dlg *pDlg=new CStatistics2Dlg();
// pDlg->FileName=FileName;
// pDlg->CurveName=CurveName;
// pDlg->init();
// //pDlg->exec();
// //delete pDlg;
// //pDlg=NULL;
// }
// }
// void CDataManagger::DataStatistics(int Type,
// const QString& FileName,
// const QString& CurveName,
// QWidget* parent)
// {
// CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
// if(!logio.mFile) return ;
// Slf_CURVE info;
// int index=logio.OpenChannel(CurveName.toStdString().c_str());
// if(index<0)return;
// logio.CloseChannel(index);
// logio.Close();
// if(!Type)
// {
// CStatisticsDlg *pDlg1=parent->findChild<CStatisticsDlg*>("statView");
// if(NULL == pDlg1 )
// {
// pDlg1=new CStatisticsDlg(parent,0);
// pDlg1->setObjectName("statView");
// }
// /* int width=parent->width();
// int height=parent->height();
// pDlg->resize(QSize(width,height));*/
// pDlg1->FileName=FileName;
// pDlg1->CurveName=CurveName;
// pDlg1->init();
// pDlg1->show();
// //pDlg->exec();
// //delete pDlg;
// //pDlg=NULL;
// }
// //whp add 2020.5.11 for 波列数据编辑和管理 波列曲线数值统计
// else
// {
// CStatistics2Dlg *pDlg2=parent->findChild<CStatistics2Dlg*>("stat2View");
// if(NULL == pDlg2 )
// {
// pDlg2=new CStatistics2Dlg(parent,0);
// pDlg2->setObjectName("stat2View");
// }
// pDlg2->FileName=FileName;
// pDlg2->CurveName=CurveName;
// pDlg2->init();
// pDlg2->show();
// }
// }
// //whp add 2020.4.9 for 波列曲线预览
// void CDataManagger::DisplayWave(const QString& FileName,const QString& WaveName)
// {
// CLogIO *logio=new CLogIO();
// if(!logio->Open(FileName.toStdString().c_str(),CSlfIO::modeRead))
// {
// delete logio;
// QMessageBox::warning(NULL,"提示","打开文件"+FileName+"错误");
// return ;
// }
// int index=logio->OpenWave(WaveName.toStdString().c_str());
// if(index<0){
// delete logio;
// return;
// }
// logio->CloseWave(index);
// delete logio;
// ShowWave *pDlg=new ShowWave();
// pDlg->FileName=FileName,pDlg->WaveName=WaveName;
// pDlg->init();
// pDlg->show();
// }
// //whp add 2020.5.12 for 常规曲线预览
// void CDataManagger::DisplayCurve(const QString& FileName,const QString& CurveName)
// {
// CLogIO *logio=new CLogIO();
// if(!logio->Open(FileName.toStdString().c_str(),CSlfIO::modeRead))
// {
// delete logio;
// QMessageBox::warning(NULL,"提示","打开文件"+FileName+"错误");
// return ;
// }
// int index = logio->OpenCurve(CurveName.toStdString().c_str());
// if(index<0) {
// delete logio;
// return;
// }
// logio->CloseCurve(index);
// delete logio;
// ShowCurve *pDlg = new ShowCurve();
// pDlg->FileName = FileName,pDlg->CurveName = CurveName;
// pDlg->init();
// pDlg->show();
// }
// void CDataManagger::CurvePropertyEdit(int Type,
// const QString& FileName,
// const QString& CurveName,
// QWidget* parent)
// {
// CCurvePropertyEditDlg *pDlg=new CCurvePropertyEditDlg(parent,0);
// connect(pDlg,SIGNAL(destroyed()),this,SLOT(slotCurvePropertyGc()));
// pDlg->FileName=FileName;
// pDlg->CurveName=CurveName;
// pDlg->Type=Type;
// pDlg->init();
// pDlg->show();
// }
// void CDataManagger::CurveCompute(const QString& FileName,
// const QStringList& CurveNameList,
// QWidget* parent)
// {
// if(CurveNameList.count()==1)
// {
// CurveComputePage *pPage=parent->findChild<CurveComputePage*>("computeV");
// if(NULL == pPage)
// {
// pPage=new CurveComputePage(parent);
// pPage->setObjectName("computeV");
// }
// connect(pPage,SIGNAL(signalCompute(QStringList)),this,SLOT(slotCurveComputeGc(QStringList)));
// pPage->CurveCompute(FileName,CurveNameList);
// pPage->init();
// pPage->show();
// }
//else
//{
// CCurveComputerDlg *pDlg=new CCurveComputerDlg();
// pDlg->FileName=FileName;
// pDlg->CurveNameList=CurveNameList;
// pDlg->init();//FileName, CurveNameList);
// //pDlg->exec();
// //delete pDlg;
// //pDlg=NULL;
//}
// }
void CDataManagger::slotCurveComputeGc(QStringList listCurveNames)
{
// PaiObject::m_EventAgent.ObjectPropertyChanged(GetProject(),"Compute",listCurveNames);
}
void CDataManagger::slotCurvePropertyGc()
{
// pai::graphics::CDataImport::ChangetoSlf(m_fileName,NULL);
}
// void CDataManagger::CurvePropertyEdit(int Type,const QString& FileName,const QString& CurveName)
// {
// CCurvePropertyEditDlg *pDlg=new CCurvePropertyEditDlg();
// pDlg->FileName=FileName;
// pDlg->CurveName=CurveName;
// pDlg->Type=Type;
// pDlg->init();
// //波列
// //if (Type == 1)
// {
// pDlg->setWindowFlags(Qt::WindowStaysOnTopHint);
// pDlg->show();
// QEventLoop loop;
// connect(pDlg,SIGNAL(signalsCloseed()),&loop,SLOT(quit()),Qt::UniqueConnection);
// loop.exec();
// delete pDlg;
// pDlg=NULL;
// }
// pai::graphics::CDataImport::ChangetoSlf(FileName,NULL);
// }
// //表属性编辑
// QString CDataManagger::TableProEdit(const QString& wellname,const QString& tablename)
// {
// TableProEditDlg *pDlg=new TableProEditDlg();
// pDlg->FileName=wellname;
// pDlg->TableName=tablename;
// pDlg->init();
// if(pDlg->exec()==QDialog::Accepted)
// {
// QString cs=pDlg->TableName;
// delete pDlg;
// return cs;
// }
// else {
// delete pDlg;
// return "";
// }
// }
QString CDataManagger::Curve2ResultTable(const QString& wellname,const QString& curvename)
{
CLogIO *logio=new CLogIO();
if(!logio->Open(wellname.toStdString().c_str(),CSlfIO::modeRead))
{
delete logio;
QMessageBox::warning(NULL,"提示","打开文件"+wellname+"错误");
return "";
}
int index=logio->OpenCurve(curvename.toStdString().c_str());
if(index<0) {
delete logio;
return "";
}
//gen curve data
Slf_CURVE Info;
logio->GetCurveInfo(index,&Info);
if(Info.EndDepth < Info.StartDepth)
return "";
DWORD count=(Info.EndDepth - Info.StartDepth)/Info.DepLevel+2.5;
float* vVdl;
vVdl=new float[count];
logio->ReadCurve(index, Info.StartDepth, count, vVdl);
logio->CloseCurve(index);
//gen RESULT layer data
int Num = 0;
float *layerSDEP = new float[count];
float *layerEDEP = new float[count];
int *layerRESULT = new int[count];
for(int i = 0; i < (Info.EndDepth - Info.StartDepth)/Info.DepLevel; i++){
if(vVdl[i] > 0){//find headDep
layerSDEP[Num] = Info.StartDepth + i*Info.DepLevel;
if(abs(round(vVdl[i]) - vVdl[i]) > 0.01){
return "";
}
layerRESULT[Num] = vVdl[i];
while(1){
i++;
if(i == (Info.EndDepth - Info.StartDepth)/Info.DepLevel) break;
if(vVdl[i] != layerRESULT[Num]){
layerEDEP[Num] = Info.StartDepth + (i-1)*Info.DepLevel;
if(layerEDEP[Num] < layerSDEP[Num]) layerEDEP[Num] = layerSDEP[Num];
break;
}
}
Num++;
i--;
}
}
//gen new table name
int a = 1;
QString newTableName = curvename + "_" + QString::number(a, 10);
while(1){
if(logio->FindObjectIndex(newTableName.toStdString().c_str()) >= 0)
{
a++;
newTableName = curvename + "_" + QString::number(a, 10);
}
else
break;
}
LAYER_DATA m_Result;
int iIndex = logio->OpenTable(newTableName.toStdString().c_str());
if (iIndex < 0)
{
iIndex=logio->Open_Set_Table(newTableName.toStdString().c_str(),0,22,
"NO,SDEP,EDEP,ZONE,RESULTNO,THICK,TT,MDEPTH1,MDEPTH2,MDEPTH3,MDEPTH4,MDEPTH5,MDEPTH6,MDEPTH7,MDEPTH8,MDEPTH9,MDEPTH10,OIL,POOROIL,OILWATER,GAS,POORGAS,GASWATER,WATERGAS,DEST1,DEST2,DEST3,DEST4,DEST5,DEST6,DEST7,DEST8,DEST9,DEST10",
"4,4,4,8,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,48,48,48,48,48,48,48,48,48,48",//字段长度
"1,4,4,6,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,6,6,6,6,6,6,6,6,6,6",//字段类型
"0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0");//字段备注
}
logio->SetTableRecordCount(iIndex, Num);
for(int j = 0; j < Num; j++) {
//memset(&m_Result,0,sizeof(LAYER_DATA));
m_Result.Order = j+1;
m_Result.EndDepth=layerEDEP[j];
m_Result.StartDepth=layerSDEP[j];
m_Result.Thick=m_Result.EndDepth-m_Result.StartDepth;
m_Result.Result = layerRESULT[j];
//int n=layerNameVec[j].size();
//if(n>8) n=8;
//strncpy(m_Result.Zone,layerNameVec[j].toStdString().c_str(),n);
logio->WriteTable(iIndex,j+1,&m_Result);
}
logio->CloseTable(iIndex);
delete logio;
delete []layerSDEP;
delete []layerEDEP;
delete []layerRESULT;
delete []vVdl;
return "";
}
// //表转曲线
// QString CDataManagger::Table2Curve(const QString& wellname,const QString& tablename)
// {
// int defalutVal = 38;
// CLogIO logio(wellname.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
// if(!logio.mFile) return "";
// int index=logio.FindSlfObjectIndex(tablename.toStdString().c_str());
// if(index<0) return "";
// //char name[64],HzName[64];
// //logio.GetObjectName(index,(char *)&name,NULL,(char *)&HzName);
// index=logio.OpenTable(tablename.toStdString().c_str());
// int fNum=logio.GetSlfTableFieldCount(index);
// Slf_OBJECT_FIELD *info=new Slf_OBJECT_FIELD[fNum+1];
// logio.GetSlfTableFieldInfo(index,&info[0]);
// bool ifSDEP = false;
// bool ifEDEP = false;
// bool ifRESULT = false;
// for(int i=0;i<fNum;i++)
// {
// if(QString(QLatin1String(info[i].Name)) == "SDEP")
// ifSDEP = true;
// if(QString(QLatin1String(info[i].Name)) == "EDEP")
// ifEDEP = true;
// if(QString(QLatin1String(info[i].Name)) == "RESULTNO")
// ifRESULT = true;
// }
// if(ifSDEP && ifEDEP && ifRESULT)
// {
// QStringList ResultList;
// QString ConfigName = ::GetConfPath() + "RESULT.ini";
// QFile InFile3(ConfigName);
// if( !InFile3.open(QIODevice::ReadOnly ) )
// {
// QMessageBox::warning(NULL, "提示", "打开解释结论配置文件" + ConfigName + "错误");
// }
// else
// {
// QTextStream textstream3( &InFile3 );
// QString line;
// while(!textstream3.atEnd())
// {
// line = textstream3.readLine();
// if(line.length() <= 1)
// continue;
// ResultList.append(line);
// }
// InFile3.close();
// }
// float frontD = 0;
// float lastD = 0;
// int recordcount=logio.GetTableRecordCount(index);
// float depRange = 0;
// float frontDV = 0;
// float lastDV = 0;
// char *buf1 = new char [20];
// char *buf2 = new char [20];
// char *buf3 = new char [20];
// float *layerEDep = new float[recordcount];
// float *layerSDep = new float[recordcount];
// float *layerType = new float[recordcount];
// for(int i = 0; i < recordcount; i++)
// {
// logio.GetTableFieldData(index, "SDEP", buf1, i+1);
// logio.GetTableFieldData(index, "EDEP", buf2, i+1);
// logio.GetTableFieldData(index, "RESULTNO", buf3, i+1);
// layerSDep[i] = atof(buf1);
// layerEDep[i] = atof(buf2);
// depRange = layerEDep[i] - layerSDep[i];
// frontDV = depRange * frontD;
// lastDV = depRange * lastD;
// layerSDep[i] += frontDV;
// layerEDep[i] -= lastDV;
// depRange = layerEDep[i] - layerSDep[i];
// if(depRange <= 0)
// layerEDep[i] = layerSDep[i] + 0.1;
// QString str(buf3);
// for(int j = 0; j < ResultList.size(); j++){
// layerType[i] = defalutVal-1;
// if(ResultList[j] == str){
// layerType[i] = j+1;
// break;
// }
// }
// }
// logio.CloseTable(index);
// //CLogIO logio(wellname.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
// //if(!logio.mFile) return ;
// int a = 1;
// QString newCurveName = tablename + "_" + QString::number(a, 10);
// while(1){
// if(logio.FindObjectIndex(newCurveName.toStdString().c_str()) >= 0)
// {
// a++;
// newCurveName = tablename + "_" + QString::number(a, 10);
// }
// else
// break;
// }
// float StartDepth=999999;
// float EndDepth=-999999;
// int count=logio.GetObjectCount();
// for(int i=0;i<count;i++)
// {
// if(logio.GetObjectStatus(i)!=OBJECT_NORMAL) continue;
// short curvetype=logio.GetObjectType(i);
// if(curvetype == CURVE_OBJECT)
// {
// Slf_CURVE acurveinfo;
// logio.GetCurveInfo(i,&acurveinfo);
// if(acurveinfo.StartDepth<StartDepth) StartDepth=acurveinfo.StartDepth;
// if(acurveinfo.EndDepth>EndDepth) EndDepth=acurveinfo.EndDepth;
// }
// }
// Slf_CURVE Slf_curve;
// memset(&Slf_curve,0,sizeof(Slf_CURVE));
// strcpy(Slf_curve.Name,newCurveName.toStdString().c_str());
// strcpy(Slf_curve.AliasName,newCurveName.toStdString().c_str());
// strcpy(Slf_curve.Unit,"");
// strcpy(Slf_curve.AliasUnit,"");
// Slf_curve.RepCode=1;
// Slf_curve.CodeLen=4;
// Slf_curve.MinValue=99999;
// Slf_curve.MaxValue=-99999;
// Slf_curve.DefVal=0;
// Slf_curve.StartDepth = StartDepth;
// Slf_curve.EndDepth = EndDepth;
// Slf_curve.DepLevel = 0.025;
// strcpy(Slf_curve.DepthUnit,"m");
// strcpy(Slf_curve.DepthHZUnit,"m");
// logio.CreateCurve(&Slf_curve,true);
// DWORD num=(Slf_curve.EndDepth-Slf_curve.StartDepth)/Slf_curve.DepLevel+1.5;
// float *val=new float[num];
// float curD;
// for(int i = 0; i < num; i++){
// curD = StartDepth + i * Slf_curve.DepLevel;
// val[i] = defalutVal;
// for(int j = 0; j < recordcount; j++){
// if(curD >= layerSDep[j] && curD <= layerEDep[j]){
// val[i] = layerType[j];
// break;
// }
// }
// }
// index=logio.OpenCurve(Slf_curve.Name);
// if(index > -1) {
// logio.WriteCurve(index,Slf_curve.StartDepth,num,val);
// logio.CloseCurve(index);
// }
// delete []val;
// logio.Close();
// return newCurveName;
// }
// else
// {
// logio.CloseTable(index);
// logio.Close();
// QMessageBox msg;//对话框设置父组件
// msg.setWindowTitle("生成曲线");//对话框标题
// msg.setText("无法在表格中找到相关深度或结论信息!");//对话框提示文本
// msg.setIcon(QMessageBox::Information);//设置图标类型
// msg.setStandardButtons(QMessageBox::Ok);//对话框上包含的按钮
// msg.exec();
// return "";
// }
// }
//whp 2020.7.21
//创建新表
// QString CDataManagger::CreateNewTable(const QString& wellname)
// {
// if(DataHelper::m_IsGc)DataHelper::InitDefauleTable();
// CCreateNewTableDlg *pDlg=new CCreateNewTableDlg();
// pDlg->FileName=wellname;
// if(pDlg->exec()==QDialog::Accepted)
// {
// QString cs=pDlg->TableName;
// delete pDlg;
// return cs;
// }
// else {
// delete pDlg;
// return "";
// }
// }
// QString CDataManagger::CreateNewCurve(const QString& wellname)
// {
// CCreateNewCurveDlg *pDlg=new CCreateNewCurveDlg();
// pDlg->wellname=wellname;
// QString Curvename="";
// if(pDlg->exec()==QDialog::Accepted){
// Curvename=pDlg->CurveName;
// }
// delete pDlg;
// pDlg=NULL;
// return Curvename;
// }
// //单位转换
// void CDataManagger::UnitConvert(const QString& FileName)//,CObjWelllogRound* pround)
// {
// CMemRdWt *mrw=new CMemRdWt();
// if(!mrw->Open(FileName.toStdString().c_str(),CSlfIO::modeReadWrite))
// {
// delete mrw;
// QMessageBox::warning(NULL,"提示","打开文件"+FileName+"错误\r\n");
// return ;
// }
// int ObjectNumber=mrw->GetObjectCount();
// int CurveCount=0,WaveCount=0;
// char Name[200];
// for(int i=0;i<ObjectNumber;i++)
// {
// if(mrw->GetObjectStatus(i)!=OBJECT_NORMAL)
// {
// continue;
// }
// mrw->GetObjectName(i,Name);
// short Attribute,SubAttribute;
// Attribute=mrw->GetObjectType(i);
// if(Attribute==CURVE_OBJECT)
// {
// CurveCount++;
// }
// else if(Attribute==WAVE_OBJECT)
// {
// WaveCount++;
// }
// }
// delete mrw;
// if(CurveCount+WaveCount==0)
// {
// QMessageBox::warning(NULL,"提示","您所选择的文件中没有曲线存在\r\n");
// return;
// }
// CUnitConvertDlg *pDlg=new CUnitConvertDlg();
// pDlg->FileName=FileName;
// //pDlg->pround=pround;
// pDlg->init();
// pDlg->exec();
// delete pDlg;
// pDlg=NULL;
// pai::graphics::CDataImport::ChangetoSlf(FileName,NULL);
// }
// //whp add 2020.4.14 合成阵列曲线
// QString CDataManagger::WaveCompose(const QString& FileName,const QStringList& CurveNameList)
// {
// CWaveComposeDlg *pDlg=new CWaveComposeDlg();
// pDlg->FileName=FileName;
// pDlg->CurveNameList=CurveNameList;
// pDlg->init();
// pDlg->show();//exec();
// QString WaveName="";
// return WaveName;
// }
void CDataManagger::accept2()
{
// QDialog*pd=(QDialog*)sender();
// int sdep=m_edit1->text().toFloat();
// int edep=m_edit2->text().toFloat();
// if(sdep>edep)
// {
// QMessageBox::information(pd,"提示","起始深度不能大于终止深度!",QMessageBox::Yes);
// return;
// }
// QString newCurve;
// CMemRdWt *mrw=new CMemRdWt();
// if(!mrw->Open(m_FileName.toStdString().c_str(),CSlfIO::modeReadWrite)) {
// delete mrw;
// return;
// }
// QString m_Function=m_edit3->text();
// m_Function.toUpper();
// m_Function.replace("\"DEPTH\"","CURRENT_HD.DEP");
// float CurveValue,rlev;
// Function fun;
// int noi=fun.GetExpress(m_Function);
// if(noi<0)
// {
// delete mrw;
// return ;//输入公式中没有“=”号,或含有不能处理的字符
// }
// //检查公式合理性
// for(int j=0;j<noi;j++)
// {
// fun.val[j]=j+1;
// }
// fun.prog=fun.TempProg;
// int re=fun.get_exp(&CurveValue);
// if(re>0)
// {
// static char *e[]={
// "语法错误",//"syntax error.",
// "不对称的括号",//"unbalanced parentheses",
// "非法运算符"//"no expression present"
// };
// QMessageBox::warning(NULL,"提示",QString(QLatin1String(e[re-1]))+m_Function);
// delete mrw;
// return ;
// }
// char name[20];
// strcpy(name,fun.csOutName.toStdString().c_str());
// int index[20];
// int index1=mrw->OpenTable(m_ObjList.at(0)->GetName().toStdString().c_str());
// if(index1<0) {
// delete mrw;
// return;
// }
// int fcount=mrw->GetTableFieldCount(index1);
// if(fcount<1) {
// delete mrw;
// AfxMessageBox("表无效!");
// return;
// }
// int rcount=mrw->GetTableRecordCount(index1);
// Slf_TABLE_FIELD *pInfo=new Slf_TABLE_FIELD[fcount+1];
// mrw->GetTableFieldInfo(index1,pInfo);
// QStringList strs;
// for(int j=0;j<fcount;j++)
// {
// strs.append(QString(pInfo[j].Name).toUpper());
// }
// QString Name=QString(name).toUpper();
// int oindexfield=strs.indexOf(Name);
// if(oindexfield<0) {
// AfxMessageBox(Name+"不存在,表格计算不支持创建新字段,无法进行计算!");
// delete mrw;
// delete []pInfo;
// return;
// }
// for(int i=0;i<noi;i++)
// {
// if(fun.csName[i]=="CURRENT_HD.DEP")continue;
// index[i]=strs.indexOf(fun.csName[i]);
// if(index[i]<0) {
// AfxMessageBox(fun.csName[i]+"不存在!");
// delete mrw;
// delete []pInfo;
// return;
// }
// }
// QString newnm=m_ObjList.at(0)->GetName()+"1";
// delete []pInfo;
// {
// //生成导入曲线
// int sdep=m_edit1->text().toFloat();
// int edep=m_edit2->text().toFloat();
// int sample=edep-sdep;
// int oindex=mrw->OpenTable((char*)newnm.toStdString().c_str());
// if(oindex<0) {
// mrw->CopyObject(m_ObjList.at(0)->GetName().toStdString().c_str(),newnm.toStdString().c_str());
// oindex=mrw->OpenTable((char*)newnm.toStdString().c_str());
// }
// for (int i=0; i<sample; i++)
// {
// for(int j=0;j<noi;j++)
// {
// if(fun.csName[j]=="CURRENT_HD.DEP") fun.val[j]=sdep+i;
// else {
// mrw->GetTableFieldData(index1,index[j],i+1,(char*)&fun.val[j]);
// }
// }
// fun.prog=fun.TempProg;
// fun.get_exp(&CurveValue);
// mrw->SetTableFieldData(oindex,oindexfield,(char*)&CurveValue,i+1);
// }
// mrw->CloseTable(oindex);
// }
// CObjWellLogTABLE *a=dynamic_cast<CObjWellLogTABLE *>(m_ObjList.at(0));
// // AddToWellRound(newnm,a,GetClassID_WellLogTABLE(),TABLEE_OBJECT);
// CObjWelllogRound *pWelllogRound=dynamic_cast<CObjWelllogRound*>(a->GetWelllogRound());
// if(pWelllogRound) {
// PaiObject*pBase=pWelllogRound->GetObjectByName(newnm,GetClassID_WellLogTABLE());
// if(!dynamic_cast<CObjWellLogTABLE *>(pBase)){
// CObjWellLog * acurve=new CObjWellLogTABLE();
// if(acurve) {
// acurve->m_ObjectType=TABLEE_OBJECT;
// acurve->SetName(newnm);
// acurve->SetAliasName(newnm);
// acurve->SetSlfFileName(a->GetSlfFileName());
// acurve->SetWell(pWelllogRound->GetWell());
// pWelllogRound->AddChild(acurve);
// }
// }
// }
// Slf_FILE_MESSAGE msag;
// mrw->GetFileMessage(msag);
// delete mrw;
// GetObjectEvent().OnDeAttchData(a->GetSlfFileName(),newnm);
// GetObjectEvent().OnRefreshData(a->GetSlfFileName(),newnm,this);
// /*
// QStringList CurveNames;
// CurveNames.push_back(msag.WellName);
// CurveNames.push_back(m_FileName);
// CurveNames.push_back(newnm);
// PaiObject::m_EventAgent.ObjectPropertyChanged(GetProject(),"Compute",CurveNames);
// */
// QMessageBox::information(m_pDialog,"提示","计算完毕!",QMessageBox::Ok);
}
void CDataManagger::accept1()
{
// QDialog*pd=(QDialog*)sender();
// int sdep=m_edit1->text().toFloat();
// int edep=m_edit2->text().toFloat();
// if(sdep>edep)
// {
// QMessageBox::information(pd,"提示","起始深度不能大于终止深度!",QMessageBox::Yes);
// return;
// }
// QString newCurve;
// CMemRdWt *mrw=new CMemRdWt();
// if(!mrw->Open(m_FileName.toStdString().c_str(),CSlfIO::modeReadWrite)) {
// delete mrw;
// return;
// }
// QString m_Function=m_edit3->text();
// m_Function.toUpper();
// m_Function.replace("\"DEPTH\"","CURRENT_HD.DEP");
// bool OutCurveExist=1;
// float CurveValue,rlev;
// Function fun;
// int noi=fun.GetExpress(m_Function);
// if(noi<0)
// {
// delete mrw;
// return ;//输入公式中没有“=”号,或含有不能处理的字符
// }
// //检查公式合理性
// for(int j=0;j<noi;j++)
// {
// fun.val[j]=j+1;
// }
// fun.prog=fun.TempProg;
// int re=fun.get_exp(&CurveValue);
// if(re>0)
// {
// static char *e[]={
// "语法错误",//"syntax error.",
// "不对称的括号",//"unbalanced parentheses",
// "非法运算符"//"no expression present"
// };
// QMessageBox::warning(pd,"提示",QString(QLatin1String(e[re-1]))+m_Function);
// delete mrw;
// return ;
// }
// char name[20];
// strcpy(name,fun.csOutName.toStdString().c_str());
// int in=mrw->FindObjectIndex(name);
// if(in>=0)
// {
// short objectType=mrw->GetObjectType(in);
// short Attribute,SubAttribute;
// mrw->GetObjectAttribute(in,&Attribute,&SubAttribute);
// if(mrw->GetObjectStatus(in)!=0)//删除状态
// {
// QMessageBox::warning(m_pDialog,"提示",fun.csOutName+"曲线已存在,但该曲线处于删除状态,无法进行计算 !!!");
// delete mrw;
// return ;
// }
// if(objectType >CARD_OBJECT||objectType==0||objectType==CURVE_OBJECT)
// {
// }
// else
// {
// QMessageBox::warning(m_pDialog,"提示",fun.csOutName+"对象已存在,但其属性不是曲线 !!!");
// delete mrw;
// return ;
// }
// }
// else
// { // 导入曲线不存在
// QString ss="目标曲线"+fun.csOutName+"不存在 \n 是否生成 \n";
// int flag = QMessageBox::warning(m_pDialog,tr("提示"),ss,QMessageBox::Yes,QMessageBox::No);
// if(flag != QMessageBox::Yes){
// delete mrw;
// return ;
// }
// OutCurveExist=0;
// }
// int index[20],indexout;
// float MinRlev=9999;
// DWORD CurveSample[20];
// float CurveRlev[20];
// Slf_CURVE info;
// for(int i=0;i<noi;i++)
// {
// if(fun.csName[i]=="CURRENT_HD.DEP")continue;
// if(mrw->GetObjectType(fun.csName[i].toStdString().c_str())!=CURVE_OBJECT)
// {
// QMessageBox::warning(m_pDialog,"提示","输入曲线"+fun.csName[i]+"不是曲线类型,不能进行计算!!!\r\n请参考常规曲线计算规则输入正确的计算公式");
// delete mrw;
// return ;
// }
// index[i]=mrw->OpenCurve(fun.csName[i].toStdString().c_str());
// if(index[i]<0)
// {
// delete mrw;
// QMessageBox::warning(m_pDialog,"提示","打开曲线"+fun.csName[i]+"出错,不能进行计算!!!");
// return ;
// }
// mrw->GetCurveInfo(index[i],&info);
// if(MinRlev>info.DepLevel)MinRlev=info.DepLevel;
// CurveRlev[i]=info.DepLevel;
// }
// if(MinRlev==9999)MinRlev=0.125;//表达式中没有实际曲线只有CURRENT_HD.DEP“深度”标识
// //生成导入曲线
// if(OutCurveExist==0)
// {
// indexout=-1;
// for(int i=0;i<noi;i++)
// {
// if(fun.csName[i]=="CURRENT_HD.DEP")continue;
// mrw->GetCurveInfo(index[i],&info);
// sprintf(info.AliasName,"%s",fun.csOutName.toStdString().c_str());
// sprintf(info.Name,"%s",fun.csOutName.toStdString().c_str());
// info.StartDepth=m_edit1->text().toFloat();
// info.EndDepth=m_edit2->text().toFloat();
// indexout=mrw->OpenCurve(&info);
// break;
// }
// if(indexout==-1)//表达式中没有实际曲线只有CURRENT_HD.DEP“深度”标识
// {
// newCurve=fun.csOutName;
// sprintf(info.AliasName,"%s",fun.csOutName.toStdString().c_str());
// sprintf(info.Name,"%s",fun.csOutName.toStdString().c_str());
// info.StartDepth=m_edit1->text().toFloat();
// info.EndDepth=m_edit2->text().toFloat();
// info.DepLevel=0.125;
// info.CodeLen=4;
// info.RepCode=4;
// info.DefVal=-999.25;
// info.MaxValue=100;
// info.MinValue=0;
// strcpy(info.DepthHZUnit,"米");
// strcpy(info.DepthUnit,"m");
// strcpy(info.Unit,"");
// strcpy(info.AliasUnit,"");
// indexout=mrw->OpenCurve(&info);
// }
// }
// else
// {
// indexout=mrw->OpenCurve(fun.csOutName.toStdString().c_str());
// if(indexout>-1)mrw->GetCurveInfo(indexout,&info);
// }
// if(indexout<0)
// {
// delete mrw;
// QMessageBox::warning(m_pDialog,"提示","导入曲线不存在,而且输入曲线中没有可参考的常规曲线,无法进行曲线计算\r\n请参考常规曲线计算规则输入正确的计算公式");
// return ;
// }
// //检查导入曲线深度
// rlev = info.DepLevel;
// sdep = info.StartDepth;
// edep = info.EndDepth ;
// if(MinRlev>rlev)MinRlev=rlev;
// if ( m_edit1->text().toFloat() < sdep-rlev || m_edit2->text().toFloat() > edep+rlev)
// {
// int flag=QMessageBox::warning(m_pDialog,"提示","导入曲线的深度范围("+m_edit1->text()+"--"+m_edit2->text()+")超出输入曲线("+QString::number(sdep)+"--"+QString::number(edep)+"\n继续计算吗?",QMessageBox::Yes,QMessageBox::No);
// if(flag != QMessageBox::Yes){
// delete mrw;
// return ;
// }
// }
// int sample=(int)((m_edit2->text().toFloat()-m_edit1->text().toFloat())/rlev+1.5);//0.5);
// int sampleIn=(int)((m_edit2->text().toFloat()-m_edit1->text().toFloat())/MinRlev+1.5);//0.5);
// float **indata,*outdata;
// indata=new float*[noi];
// outdata=new float[sample+10];
// float *tDep,*aDep;
// tDep=new float[sample];
// for(int k=0; k<sample; k++) tDep[k]=sdep+k*rlev;
// for(int j=0;j<noi;j++)
// {
// if(fun.csName[j]=="CURRENT_HD.DEP")continue;
// indata[j]=new float[sampleIn];
// //whp change 2018.10.15 保证读写一致
// CurveSample[j]=(m_edit2->text().toFloat()-m_edit1->text().toFloat())/CurveRlev[j]+1.5;//0.5;
// mrw->ReadCurve(index[j],m_edit1->text().toFloat(),CurveSample[j],&indata[j][0]);
// if(fabs(CurveRlev[j]-rlev)/rlev>0.1)
// {
// aDep=new float[CurveSample[j]];
// for(int k=0; k<CurveSample[j]; k++) aDep[k]=sdep+k*CurveRlev[j];
// Resample::ReSampling(&indata[j][0],CurveSample[j],1,aDep,tDep,sample);
// delete []aDep;
// }
// }
// for (int i=0; i<sample; i++)
// {
// //sdep = sdeps + rlev * i;
// for(int j=0;j<noi;j++)
// {
// if(fun.csName[j]=="CURRENT_HD.DEP")fun.val[j]=m_edit1->text().toFloat()+i*rlev;
// else fun.val[j]=indata[j][i];
// }
// fun.prog=fun.TempProg;
// fun.get_exp(&CurveValue);
// outdata[i]=CurveValue;
// //2013.11.20 whp add for 为曲线计算添加数值类型选项常规不控制数值大小方位控制到0-360
// }
// mrw->WriteCurve(indexout,m_edit1->text().toFloat(),sample,&outdata[0]);
// delete []tDep;
// for (int i=0; i<noi;i++)
// {
// if(fun.csName[i]=="CURRENT_HD.DEP")continue;
// mrw->CloseCurve(index[i]);
// }
// mrw->CloseCurve(indexout);
// for(int j=0;j<noi;j++)
// {
// if(fun.csName[j]=="CURRENT_HD.DEP")continue;
// delete indata[j];
// }
// delete []indata;
// delete []outdata;
// Slf_FILE_MESSAGE msag;
// mrw->GetFileMessage(msag);
// delete mrw;
// GetObjectEvent().OnDeAttchData(m_FileName,fun.csOutName);
// GetObjectEvent().OnRefreshData(m_FileName,fun.csOutName,this);
// QStringList CurveNames;
// CurveNames.push_back(msag.WellName);
// CurveNames.push_back(m_FileName);
// CurveNames.push_back(fun.csOutName);
// if(!newCurve.isEmpty())CurveNames.push_back(newCurve);
// PaiObject::m_EventAgent.ObjectPropertyChanged(GetProject(),"Compute",CurveNames);
// QMessageBox::information(m_pDialog,"提示","计算完毕!",QMessageBox::Ok);
}
//曲线计算
// void CDataManagger::CurveCompute(QList<CObjWellLog*>objs,int no)
// {
// m_ObjList=objs;
// if(objs.count()==1)
// {
// QString FileName=objs.at(0)->GetSlfFileName();
// QDialog dialog(NULL);
// dialog.setModal(false);
// m_pDialog=&dialog;
// Qt::WindowFlags flags = dialog.windowFlags();
// flags |= Qt::WindowStaysOnTopHint;
// flags &= ~Qt::WindowContextHelpButtonHint;
// dialog.setWindowFlags(flags);
// dialog.setWindowTitle(QString("曲线计算"));
// QFormLayout form(&dialog);
// m_FileName=FileName;
// CMemRdWt *mrw=new CMemRdWt();
// if(!mrw->Open(FileName.toStdString().c_str(),CSlfIO::modeReadWrite)) {
// delete mrw;
// return;
// }
// int index=mrw->OpenTable(objs.at(0)->GetName().toStdString().c_str());
// if(index<0) {
// delete mrw;
// return;
// }
// int fcount=mrw->GetTableFieldCount(index);
// if(fcount<1) {
// delete mrw;
// AfxMessageBox("表无效!");
// ; return;
// }
// int rcount=mrw->GetTableRecordCount(index);
// Slf_TABLE_FIELD *pInfo=new Slf_TABLE_FIELD[fcount+1];
// mrw->GetTableFieldInfo(index,pInfo);
// delete mrw;
// if(no>=fcount) no=fcount-1;
// if(no<0) no=0;
// m_CurveName=pInfo[no].Name;
// delete []pInfo;
// // 开始深度
// QString value1 = QString("开始层号: ");
// QLineEdit *edit1 = new QLineEdit(&dialog);
// m_edit1=edit1;
// form.addRow(value1, edit1);
// edit1->setText(QString::number(0));
// // 终止深度
// QString value2 = QString("终止层号: ");
// QLineEdit *edit2 = new QLineEdit(&dialog);
// m_edit2=edit2;
// form.addRow(value2, edit2);
// edit2->setText(QString::number(rcount));
// //计算公式
// QString value3 = QString("计算公式: ");
// QLineEdit *edit3 = new QLineEdit(&dialog);
// form.addRow(value3, edit3);
// QString ss=m_CurveName+"=1.0*"+m_CurveName+"+0.0";
// edit3->setText(ss);
// m_edit2=edit2;
// m_edit3=edit3;
// QString value4 = QString("\n常用数学运算符:\n 加:+,减:-,乘:*,除:/,取余:%,乘方:^,对数:!\n")+
// QString(" 如PAR =SP/CAL+RT^2.5-10!AC\n 10!表示取以10为底的对数,1! 表示取自然对数");
// QString value5 = QString("\n规则及约定:\n 1、输入对象必须是常规曲线名、深度标识或常量\n")+
// QString(" 如:GR=2*GR+5GR2=45TEMP=18+0.038*\"DEPTH\"\n")+
// QString(" 其中:\"DEPTH\"表示深度;\n")+
// QString(" 2、当导入曲线不存在时:\n 如果有输入曲线存在,程序自动根据第一条输入曲线的属性产生导入曲线;\n")+
// QString(" 否则程序自动产生一条浮点类型的导入曲线采样间隔为0.125。");
// form.addRow(new QLabel(value4));
// form.addRow(new QLabel(value5));
// // Add Cancel and OK button
// QDialogButtonBox buttonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel,
// Qt::Horizontal, &dialog);
// form.addRow(&buttonBox);
// QObject::connect(&buttonBox, SIGNAL(accepted()), this, SLOT(accept2()));
// QObject::connect(&buttonBox, SIGNAL(rejected()), &dialog, SLOT(reject()));
// // Process when OK button is clicked
// dialog.show();
// if (dialog.exec() == QDialog::Accepted)
// {
// }
// // pai::graphics::CDataImport::ChangetoSlf(FileName,NULL);
// }
// }
// void CDataManagger::CurveCompute(const QString& FileName,const QStringList& CurveNameList)
// {
// m_CurveNameList=CurveNameList;
// if(CurveNameList.count()==1)
// {
// QDialog dialog(NULL);
// dialog.setModal(false);
// m_pDialog=&dialog;
// Qt::WindowFlags flags = dialog.windowFlags();
// flags |= Qt::WindowStaysOnTopHint;
// flags &= ~Qt::WindowContextHelpButtonHint;
// dialog.setWindowFlags(flags);
// dialog.setWindowTitle(QString("曲线计算"));
// QFormLayout form(&dialog);
// QString CurveName=CurveNameList[0];
// m_CurveName=CurveNameList[0];
// m_FileName=FileName;
// CMemRdWt *mrw=new CMemRdWt();
// if(!mrw->Open(FileName.toStdString().c_str(),CSlfIO::modeReadWrite)) {
// delete mrw;
// return;
// }
// int index=mrw->OpenCurve(CurveName.toStdString().c_str());
// if(index<0) {
// delete mrw;
// return;
// }
// Slf_CURVE pInfo;
// mrw->GetCurveInfo(index,&pInfo);
// Slf_FILE_MESSAGE msag;
// mrw->GetFileMessage(msag);
// delete mrw;
// // 开始深度
// QString value1 = QString("开始深度: ");
// QLineEdit *edit1 = new QLineEdit(&dialog);
// m_edit1=edit1;
// form.addRow(value1, edit1);
// edit1->setText(QString::number(pInfo.StartDepth));
// edit1->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
// // 终止深度
// QString value2 = QString("终止深度: ");
// QLineEdit *edit2 = new QLineEdit(&dialog);
// edit2->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
// m_edit2=edit2;
// form.addRow(value2, edit2);
// edit2->setText(QString::number(pInfo.EndDepth));
// //计算公式
// QString value3 = QString("计算公式: ");
// QLineEdit *edit3 = new QLineEdit(&dialog);
// form.addRow(value3, edit3);
// QString ss=CurveName+"=1.0*"+CurveName+"+0.0";
// edit3->setText(ss);
// m_edit2=edit2;
// m_edit3=edit3;
// QString value4 = QString("\n常用数学运算符:\n 加:+,减:-,乘:*,除:/,取余:%,乘方:^,对数:!\n")+
// QString(" 如PAR =SP/CAL+RT^2.5-10!AC\n 10!表示取以10为底的对数,1! 表示取自然对数");
// QString value5 = QString("\n规则及约定:\n 1、输入对象必须是常规曲线名、深度标识或常量\n")+
// QString(" 如:GR=2*GR+5GR2=45TEMP=18+0.038*\"DEPTH\"\n")+
// QString(" 其中:\"DEPTH\"表示深度;\n")+
// QString(" 2、当导入曲线不存在时:\n 如果有输入曲线存在,程序自动根据第一条输入曲线的属性产生导入曲线;\n")+
// QString(" 否则程序自动产生一条浮点类型的导入曲线采样间隔为0.125。");
// form.addRow(new QLabel(value4));
// form.addRow(new QLabel(value5));
// // Add Cancel and OK button
// QDialogButtonBox buttonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel,
// Qt::Horizontal, &dialog);
// form.addRow(&buttonBox);
// QObject::connect(&buttonBox, SIGNAL(accepted()), this, SLOT(accept1()));
// QObject::connect(&buttonBox, SIGNAL(rejected()), &dialog, SLOT(reject()));
// // Process when OK button is clicked
// dialog.show();
// if (dialog.exec() == QDialog::Accepted)
// {
// }
// pai::graphics::CDataImport::ChangetoSlf(FileName,NULL);
// }
// else
// {
// CCurveComputerDlg *pDlg=new CCurveComputerDlg();
// pDlg->FileName=FileName;
// pDlg->CurveNameList=CurveNameList;
// pDlg->init();//FileName, CurveNameList);
// pDlg->setModal(false);
// Qt::WindowFlags flags = pDlg->windowFlags();
// flags |= Qt::WindowStaysOnTopHint;
// pDlg->setWindowFlags(flags);
// pDlg->exec();
// delete pDlg;
// pDlg=NULL;
// pai::graphics::CDataImport::ChangetoSlf(FileName,NULL);
// QMessageBox::information(NULL,"提示","计算完毕!",QMessageBox::Ok);
// }
// }
// void CDataManagger::CallDisplayWaveOrCurve(int Type, const QString& FileName,
// const QString& CurveName, QWidget* parent)
// {
// CLogIO *logio=new CLogIO();
// if(!logio->Open(FileName.toStdString().c_str(),CSlfIO::modeRead))
// {
// delete logio;
// QMessageBox::warning(NULL,"提示","打开文件"+FileName+"错误");
// return ;
// }
// //常规曲线
// if (Type == 0)
// {
// int index=logio->OpenCurve(CurveName.toStdString().c_str());
// if(index<0) {
// delete logio;
// return;
// }
// logio->CloseCurve(index);
// delete logio;
// ShowCurve *pDlg=parent->findChild<ShowCurve*>("curveView");
// if(NULL == pDlg)
// {
// pDlg=new ShowCurve(parent);
// pDlg->setObjectName("curveView");
// }
// pDlg->FileName=FileName;
// pDlg->CurveName=CurveName;
// pDlg->init();
// pDlg->show();
// //波列 1
// }else
// {
// int index=logio->OpenWave(CurveName.toStdString().c_str());
// if(index<0) {
// delete logio;
// return;
// }
// logio->CloseWave(index);
// delete logio;
// ShowWave *pDlgwage=parent->findChild<ShowWave*>("waveView");
// if(NULL == pDlgwage)
// {
// pDlgwage=new ShowWave(parent);
// pDlgwage->setObjectName("waveView");
// }
// pDlgwage->FileName=FileName;
// pDlgwage->WaveName=CurveName;
// pDlgwage->init();
// pDlgwage->show();
// }
// }
// void CDataManagger::CallDisplayCurveVerChange(int Type, const QString& FileName,
// const QString& CurveName, QWidget* parent, int value, float tipValue)
// {
// //常规曲线
// if (Type == 0)
// {
// ShowCurve *pDlg=parent->findChild<ShowCurve*>("curveView");
// if(NULL == pDlg)
// {
// pDlg=new ShowCurve(parent);
// pDlg->setObjectName("curveView");
// pDlg->FileName=FileName;
// pDlg->CurveName=CurveName;
// pDlg->init();
// pDlg->show();
// }
// pDlg->linkVerDeptSliderValueChange(value, tipValue);
// }
// }
// void CDataManagger::sendTableP2Mgr(QWidget* parent, QScrollBar *p, QTableWidget *t)
// {
// ShowCurve *pDlg = parent->findChild<ShowCurve*>("curveView");
// if(NULL == pDlg) return;
// pDlg->setTableBro(p);
// pDlg->setCurveTable(t);
// }
/*
void CDataManagger::ListMessage(const QString& listName,const QStringList& header,const QStringList& listMessage)
{
CMyListDlg *pDlg=new CMyListDlg();
pDlg->setWindowTitle(listName);
int col=header.size();
int row=listMessage.size()/header.size();
pDlg->init(row,col,header);
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
pDlg->m_pUI->tableWidget->setItem(i,j,new QTableWidgetItem(listMessage.at(i*col+j)));
}
pDlg->exec();
}*/