1837 lines
56 KiB
C++
1837 lines
56 KiB
C++
#pragma warning(push,0)
|
||
#include "DataHelper.h"
|
||
// #include "Family.h"
|
||
#include <QMessageBox>
|
||
#include <QFileDialog>
|
||
#include <QTextStream>
|
||
#include "InDefTableDlg.h"
|
||
#include "ui_InDefTable.h"
|
||
#include "CStringType.h"
|
||
// #include "ObjWell.h"
|
||
#include "TiShiDlg.h"
|
||
#include "ui_TiShi.h"
|
||
// #include "DataImport.h"
|
||
#include <QHBoxLayout>
|
||
#include <QListView>
|
||
#include "AdaptionComboBox.h"
|
||
//////////////////////////////////////////////////////////////////////////
|
||
//#include "SigelWellCtl.h"
|
||
//#include "MultWellCtl.h"
|
||
#include "geometryutils.h"
|
||
#include "BaseFun.h"
|
||
#pragma execution_character_set("utf-8")
|
||
//extern DEFAULTTABLE DefauleTable[DefTabNum];
|
||
extern DEFAULTTABLE *DefauleTable;//[DefTabNum];
|
||
extern int DefTabNum;
|
||
#pragma warning(pop)
|
||
// using namespace pai::ios::welllog;
|
||
using namespace Ui;
|
||
|
||
#define MAPPINGTABLENUM 10
|
||
#define MNUMBER 3
|
||
|
||
BEGIN_OSGGRAPHICS_NAMESPACE
|
||
CInDefTableDlg::CInDefTableDlg(int curitemType,QWidget * parent, Qt::WindowFlags flags)
|
||
: QDialog(parent,flags),m_sigWell(NULL),m_mutlWell(NULL)
|
||
{
|
||
|
||
WellNameCol=0;//1;
|
||
CurItemType=curitemType;
|
||
m_pUI = new Ui_InDefTable();
|
||
m_pUI->setupUi(this);
|
||
m_sigWell=new SigelForm;
|
||
m_mutlWell=new MultForm;
|
||
|
||
m_pUI->tableWidget->setMouseTracking(true);
|
||
QObject::connect(m_pUI->okbtn, SIGNAL(clicked()), this, SLOT(slotSave()));
|
||
QObject::connect(m_pUI->cancelbtn, SIGNAL(clicked()), this, SLOT(slotCancel()));
|
||
QObject::connect(m_pUI->pushButtonFind, SIGNAL(clicked()), this, SLOT(slotOpenFile()));
|
||
QObject::connect(m_pUI->comboBox_Table, SIGNAL(currentIndexChanged(int)),this, SLOT(changeTabletype()));
|
||
QObject::connect(m_pUI->spinBox_Var,SIGNAL(valueChanged(int)),this,SLOT(slotVarLineChanged(int)));
|
||
QObject::connect(m_pUI->spinBox_Data,SIGNAL(valueChanged(int)),this,SLOT(slotDataLineChanged(int)));
|
||
// QObject::connect(m_pUI->pushButton_PreView, SIGNAL(clicked()), this, SLOT(slotPreView()));
|
||
QObject::connect(m_pUI->checkBox_Space, SIGNAL(clicked()), this, SLOT(slotCheckSpace()));
|
||
QObject::connect(m_pUI->checkBox_Comma, SIGNAL(clicked()), this, SLOT(slotCheckComma()));
|
||
QObject::connect(m_pUI->checkBox_Semicolon, SIGNAL(clicked()), this, SLOT(slotCheckSem()));
|
||
QObject::connect(m_pUI->checkBox_Tab, SIGNAL(clicked()), this, SLOT(slotCheckTab()));
|
||
QObject::connect(m_pUI->checkBox_Spa_2, SIGNAL(clicked()), this, SLOT(slotCheckDubSpace()));
|
||
QObject::connect(m_pUI->tableWidget, SIGNAL(cellClicked(int,int)), this, SLOT(slotRefreshZd(int,int)));
|
||
//whp add 2020.4.20
|
||
QObject::connect(m_pUI->comboBox_DefStr,SIGNAL(currentIndexChanged(int)),this, SLOT(slotChangeDefValue()));
|
||
QObject::connect(m_pUI->comboBox_DefValue,SIGNAL(currentIndexChanged(int)),this, SLOT(slotChangeDefValue()));
|
||
if (!CurItemType)
|
||
{setWindowTitle(" 多井离散数据导入交互界面");
|
||
m_mutlWell->setupUi(m_pUI->showWellPart);
|
||
connect(m_mutlWell->pushButton_SelAll, SIGNAL(clicked()), this, SLOT(slotSelAll()));
|
||
connect(m_mutlWell->pushButton_NotSelAll, SIGNAL(clicked()), this, SLOT(slotNotSelAll()));
|
||
connect(m_mutlWell->pushButton_ReSel, SIGNAL(clicked()), this, SLOT(slotReverseSel()));
|
||
}else
|
||
{
|
||
setWindowTitle(" 单井离散数据导入交互界面");
|
||
m_sigWell->setupUi(m_pUI->showWellPart);
|
||
}
|
||
|
||
|
||
m_pUI->lineEdit->setText("");
|
||
TableType=DefTabNum;
|
||
VarLine=0;//变量名所在行
|
||
UnitLine=0;//单位所在行
|
||
DataLine=1;//数据开始行
|
||
TotalLine=0;
|
||
IsSpa=IsTab=IsCom=IsSem=DelDubSpa=0;
|
||
|
||
//m_pUI->okbtn->setStyleSheet("QPushButton:checked{background-color:green}");
|
||
//m_pUI->cancelbtn->setStyleSheet("QPushButton:checked{background-color:blue}");
|
||
/*this->setStyleSheet("QPushButton{background-color:black;\
|
||
color: white; border-radius: 30px; border: 3px groove gray;\
|
||
border-style: outset;}"
|
||
"QPushButton:hover{background-color:red; color: white;}"
|
||
"QPushButton:pressed{background-color:rgb(85, 170, 255);\
|
||
border-style: inset; }");*/
|
||
//QHeaderView* headerView = m_pUI->tableWidget->horizontalHeader();
|
||
//headerView->setHidden(true); //行名隐藏 隐藏后无法改变列宽了????
|
||
}
|
||
//whp add 2020.4.20
|
||
void CInDefTableDlg::slotChangeDefValue()
|
||
{
|
||
int FirstCol=0;
|
||
if(!CurItemType)FirstCol=1;
|
||
int colIndex;
|
||
int num=m_pUI->tableWidget->columnCount();
|
||
for(int col=0;col<m_pUI->tableWidget->columnCount();col++)
|
||
{
|
||
if(!col&&!CurItemType)continue;// du多井时第一列是井名
|
||
QWidget *widget=m_pUI->tableWidget->cellWidget(0,col);
|
||
QComboBox *combox=(QComboBox*)widget;
|
||
QString ss=combox->currentText();
|
||
if(ss!="不导入")continue;
|
||
for(int Row=0;Row<m_pUI->tableWidget->rowCount();Row++)
|
||
{
|
||
QString DataStr;
|
||
if(DefauleTable[TableType].tinfo[col-FirstCol].RepCode!=6)DataStr=m_pUI->comboBox_DefValue->currentText();
|
||
else DataStr=m_pUI->comboBox_DefStr->currentText();
|
||
m_pUI->tableWidget->setItem(Row+1,col,new QTableWidgetItem(DataStr));
|
||
}
|
||
}
|
||
|
||
}
|
||
void CInDefTableDlg::mRefresh()
|
||
{
|
||
slotVarLineChanged(VarLine);
|
||
slotDataLineChanged(DataLine);
|
||
InitList1();
|
||
PreView(1);
|
||
}
|
||
void CInDefTableDlg:: slotCheckSpace(){IsSpa=!IsSpa;mRefresh();}
|
||
void CInDefTableDlg:: slotCheckComma(){IsCom=!IsCom;mRefresh();}
|
||
void CInDefTableDlg:: slotCheckSem(){IsSem=!IsSem;mRefresh();}
|
||
void CInDefTableDlg:: slotCheckTab(){IsTab=!IsTab;mRefresh();}
|
||
void CInDefTableDlg:: slotCheckDubSpace(){DelDubSpa=!DelDubSpa;mRefresh();}
|
||
void CInDefTableDlg::changeTabletype()
|
||
{
|
||
TableType=m_pUI->comboBox_Table->currentIndex();
|
||
m_pUI->lineEdit_TableAliasName->setText(m_pUI->comboBox_Table->currentText());
|
||
if(TableType < DefTabNum)
|
||
{
|
||
m_pUI->lineEdit_TableName->setText(DefauleTable[TableType].TableName);
|
||
m_pUI->lineEdit_des->setText(DefauleTable[TableType].TableName);
|
||
}
|
||
else if(TableType == DefTabNum)
|
||
{
|
||
m_pUI->lineEdit_TableName->setText("Custom");
|
||
m_pUI->lineEdit_des->setText("");
|
||
}
|
||
else{
|
||
TableType = DefTabNum;
|
||
m_pUI->comboBox_Table->setCurrentIndex(DefTabNum);
|
||
m_pUI->lineEdit_TableName->setText("Custom");
|
||
m_pUI->lineEdit_des->setText("");
|
||
}
|
||
PreView(0);
|
||
}
|
||
void CInDefTableDlg::slotSave()
|
||
{
|
||
if(m_pUI->lineEdit->text().isEmpty()) {
|
||
AfxMessageBox("请输入文件名称");
|
||
return;
|
||
}
|
||
|
||
FileName = m_pUI->lineEdit->text();
|
||
|
||
//accept();
|
||
slotEnterOk();
|
||
}
|
||
/**
|
||
*@brief 取消槽函数
|
||
*/
|
||
void CInDefTableDlg::slotCancel()
|
||
{
|
||
reject ();
|
||
}
|
||
void CInDefTableDlg::slotOpenFile()
|
||
{
|
||
QString DataFile = QFileDialog::getOpenFileName(NULL,"打开表数据文件",::GetDataPath(),
|
||
"表数据文件(*.txt;*.prn;*.csv;*.las)");
|
||
if(DataFile=="")return;
|
||
FileName=DataFile;
|
||
VarLine=0;//变量名所在行
|
||
UnitLine=0;//单位所在行
|
||
DataLine=1;//数据开始行
|
||
TotalLine=0;
|
||
IsSpa=IsTab=IsCom=IsSem=DelDubSpa=0;
|
||
Init();
|
||
this->resize(this->size() - QSize(1,1));
|
||
this->resize(this->size() + QSize(1,1));
|
||
}
|
||
|
||
void CInDefTableDlg::PreView(bool RefreshW)//RefreshW是否刷新勾选井名表格
|
||
{
|
||
if(!TotalLine)
|
||
return;//whp add 2020.3.6
|
||
|
||
m_pUI->tableWidget->clearContents();
|
||
if(!DataLine)
|
||
return;
|
||
|
||
//当前选择项是“井”,第一列是井名
|
||
int WellNum = 0;
|
||
WellNameList.clear();
|
||
|
||
#pragma region 确定数据列数-->TableCol
|
||
int TableCol = 0;
|
||
if(TableType < DefTabNum)
|
||
{
|
||
TableCol = DefauleTable[TableType].ZdNum;
|
||
if(!CurItemType)
|
||
TableCol += 1;
|
||
}
|
||
else if(TableType == DefTabNum) //自定义表
|
||
{
|
||
if(VarLine)
|
||
TableCol = VarNameList.size();
|
||
else TableCol = VarNameList.size();
|
||
}
|
||
else{
|
||
TableType = DefTabNum;
|
||
if(VarLine)
|
||
TableCol = VarNameList.size();
|
||
}
|
||
m_pUI->tableWidget->setColumnCount(TableCol);
|
||
#pragma endregion
|
||
|
||
QStringList header;
|
||
if(!CurItemType)
|
||
header << "井名";
|
||
|
||
#pragma region 字段名-->tableWidget
|
||
if(TableType < DefTabNum)
|
||
{
|
||
for(int i = 0; i < DefauleTable[TableType].ZdNum; i++)
|
||
header << QString(QLatin1String(DefauleTable[TableType].tinfo[i].Name));
|
||
}
|
||
else
|
||
{
|
||
if(!CurItemType)
|
||
for(int i = 1; i < VarNameList.size(); i++)
|
||
header << VarNameList.at(i);
|
||
else
|
||
for(int i = 0; i < VarNameList.size(); i++)
|
||
header << VarNameList.at(i);
|
||
}
|
||
m_pUI->tableWidget->setHorizontalHeaderLabels(header);
|
||
#pragma endregion
|
||
if(TableType<DefTabNum){
|
||
if(DefauleTable[TableType].ZdNum < 10)
|
||
m_pUI->tableWidget->horizontalHeader()->resizeSections(QHeaderView::Stretch);
|
||
else
|
||
m_pUI->tableWidget->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents);
|
||
}
|
||
else {
|
||
m_pUI->tableWidget->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents);
|
||
}
|
||
m_pUI->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
|
||
|
||
#pragma region 生成comboBox内容-->header
|
||
header.clear();
|
||
int len=DataList.size();
|
||
|
||
if(VarLine) //若已发现数据中的字段名,生成带有字段名的header
|
||
{
|
||
for(int i = 0; i < VarNameList.size(); i++)
|
||
header << "第" + QString::number(i + 1) + "列:" + VarNameList[i];
|
||
len = VarNameList.size();
|
||
}
|
||
else //若没有发现字段名,根据数据列数生成非字段名的header
|
||
for(int i = 0; i < DataList.size(); i++)
|
||
header << "第" + QString::number(i + 1) + "列";//QString::number(i+1);
|
||
//whp add 2020.1.8
|
||
header<<"不导入"; //额外情况
|
||
//whp change 2020.3.6
|
||
//m_pUI->tableWidget->setRowCount(TotalLine-DataLine+1+1);
|
||
//2020.8.2 for刷新慢
|
||
#pragma endregion
|
||
|
||
#pragma region 设置table行数
|
||
int LineNum = MapData.count(); //数据行数
|
||
//if(MapData.count()>=100)LineNum=100;
|
||
m_pUI->tableWidget->setRowCount(LineNum);//MapData.count()+1);
|
||
#pragma endregion
|
||
|
||
int FirstCol = 0;
|
||
if(!CurItemType)
|
||
FirstCol = 1;
|
||
|
||
//首行为字段选择行
|
||
#pragma region 初次生成首行的选择框,
|
||
for(int i = 0; i < TableCol; i++)
|
||
{
|
||
AdaptionComboBox *comboBox = new AdaptionComboBox();
|
||
|
||
//comboBox->setEditable(true);
|
||
comboBox->addItems( header ); //每个选择框中的内容相同
|
||
|
||
if(!i && !CurItemType) //首列且是“井”
|
||
{
|
||
comboBox->setCurrentIndex(WellNameCol); //指向井名列
|
||
}
|
||
else
|
||
{
|
||
int sel = VarNameList.size(); //先指向“不导入”
|
||
|
||
if(TableType == DefTabNum) //按实际数据字段列顺序即可
|
||
sel = i;
|
||
#pragma region 确定该字段是数据中的哪一列(从0开始)
|
||
else
|
||
{
|
||
QString name = QString(QLatin1String(DefauleTable[TableType].tinfo[i-FirstCol].Name));
|
||
for(int m = 0; m < VarNameList.size(); m++)
|
||
{
|
||
if(VarNameList[m].toUpper() == name.toUpper())
|
||
{
|
||
sel = m;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
#pragma endregion
|
||
|
||
comboBox->setCurrentIndex(sel); //确定初始选择框中的默认内容
|
||
}
|
||
|
||
//信槽链接——当前值改变——》slotComboxSelectChange(int)
|
||
connect(comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(slotComboxSelectChange(int)));
|
||
|
||
comboBox->setProperty("row", 0);
|
||
comboBox->setProperty("col", i);
|
||
m_pUI->tableWidget->setCellWidget( 0, i, comboBox );
|
||
//slotRefreshZd(0,i);//whp add 2020.1.8
|
||
}
|
||
#pragma endregion
|
||
|
||
//whp change 2020.1.8
|
||
int colIndex;
|
||
|
||
#pragma region 将数值填入
|
||
for(int Row = 0; Row < LineNum; Row++) //遍历每行数据
|
||
{
|
||
QStringList List = MapData.find(Row).value();
|
||
QString DataStr;
|
||
for(int i = 0; i < TableCol; i++)
|
||
{
|
||
if(!i && !CurItemType) //井的第0列是井名
|
||
{
|
||
colIndex=WellNameCol;
|
||
}
|
||
#pragma region 确定该字段是数据中的哪一列(从0开始)--> colIndex
|
||
else
|
||
{
|
||
int sel = VarNameList.size(); //不导入
|
||
|
||
if(TableType == DefTabNum)
|
||
sel = i;
|
||
else
|
||
{
|
||
QString name = QString(QLatin1String(DefauleTable[TableType].tinfo[i - FirstCol].Name));
|
||
for(int m = 0; m < VarNameList.size(); m++)
|
||
{
|
||
if(VarNameList[m].toUpper() == name.toUpper())
|
||
{
|
||
sel=m;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
colIndex=sel;
|
||
}
|
||
#pragma endregion
|
||
|
||
#pragma region 提取该行该列值
|
||
if(colIndex>=0&&colIndex < List.size())
|
||
DataStr = List[colIndex];
|
||
else
|
||
{
|
||
if(TableType==DefTabNum)
|
||
DataStr="";
|
||
else{
|
||
if(DefauleTable[TableType].tinfo[i-FirstCol].RepCode != 6)
|
||
DataStr = m_pUI->comboBox_DefValue->currentText();
|
||
else
|
||
DataStr = m_pUI->comboBox_DefStr->currentText();
|
||
}
|
||
}
|
||
m_pUI->tableWidget->setItem( Row+1, i, new QTableWidgetItem(DataStr));
|
||
#pragma endregion
|
||
}
|
||
}
|
||
#pragma endregion
|
||
|
||
#pragma region 井名处理
|
||
if(RefreshW && !CurItemType)//当前选择项是“井”时,显示所有井名
|
||
{
|
||
//统计所有井名
|
||
/*int num=Mm_pUI->tableWidget->rowCount();//3.6
|
||
for(int i=1;i<m_pUI->tableWidget->rowCount();i++)
|
||
{
|
||
bool flag=0;
|
||
QString DataStr=List[WellNameCol];//m_pUI->tableWidget->item(i,0)->text();
|
||
for(int j=0;j<WellNameList.size();j++)
|
||
{
|
||
if(WellNameList.at(j)!=DataStr)continue;
|
||
flag=1;break;
|
||
}
|
||
if(!flag)WellNameList.append(DataStr);
|
||
}*/
|
||
int num = MapData.count();
|
||
for(int i = 0; i < num; i++)
|
||
{
|
||
QStringList List=MapData.find(i).value();
|
||
bool flag=0;
|
||
QString DataStr=List[WellNameCol];//m_pUI->tableWidget->item(i,0)->text();
|
||
for(int j=0;j<WellNameList.size();j++)
|
||
{
|
||
if(WellNameList.at(j)!=DataStr)
|
||
continue;
|
||
flag=1;
|
||
break;
|
||
}
|
||
if(!flag)
|
||
WellNameList.append(DataStr);
|
||
}
|
||
//20191227
|
||
m_mutlWell->tableWidget_WellName->clearContents();
|
||
m_mutlWell->tableWidget_WellName->setColumnCount(1);
|
||
QStringList header;
|
||
header<<"导入井名";
|
||
m_mutlWell->tableWidget_WellName->setHorizontalHeaderLabels(header);
|
||
m_mutlWell->tableWidget_WellName->horizontalHeader()->setStretchLastSection(true);
|
||
m_mutlWell->tableWidget_WellName->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
|
||
m_mutlWell->tableWidget_WellName->setRowCount(WellNameList.size());
|
||
for(int i=0;i<WellNameList.size();i++)
|
||
{
|
||
m_mutlWell->tableWidget_WellName->setItem(i,0,new QTableWidgetItem(WellNameList.at(i)));
|
||
m_mutlWell->tableWidget_WellName->item(i,0)->setCheckState(Qt::Checked);
|
||
}
|
||
}
|
||
#pragma endregion
|
||
}
|
||
|
||
void CInDefTableDlg::slotVarLineChanged(int LineNo)//变量名所在行
|
||
{
|
||
VarLine=LineNo;
|
||
QFile file(FileName);
|
||
if(!file.open(QIODevice::ReadOnly )) {
|
||
AfxMessageBox("文件无法打开!");
|
||
return;
|
||
}
|
||
char*pLine=new char[5000];
|
||
//略过变量名行前的行
|
||
for(int i=0;i<LineNo-1;i++){
|
||
file.readLine(pLine,50000);
|
||
}
|
||
#pragma region whp add 自动匹配缺省表(表类型)
|
||
file.readLine(pLine,50000);
|
||
{
|
||
char *p=strstr(pLine,"\r\n");
|
||
if(p) *p=0;
|
||
}
|
||
QByteArray line=pLine;
|
||
line=line.toUpper();
|
||
VarNameList = GetStringList(line,IsSpa,IsTab,IsCom,IsSem,DelDubSpa);//line.split(",");
|
||
|
||
for(int i = 0; i < DefTabNum; i++) //遍历所有表类型
|
||
{
|
||
int num=0;
|
||
for(int j = 0; j < DefauleTable[i].ZdNum; j++) //ZdNum暂且猜测是该表类型下拥有的字段数
|
||
{
|
||
QString zdm = QString(QLatin1String(DefauleTable[i].tinfo[j].Name)).toUpper();
|
||
if(line.indexOf(zdm) >= 0) //数据中有该字段
|
||
num++;
|
||
}
|
||
if(num == DefauleTable[i].ZdNum) //该表类型符合当前数据文件
|
||
{
|
||
TableType = i;
|
||
m_pUI->comboBox_Table->setCurrentIndex(i); //修改窗口的表类型显示
|
||
break;
|
||
}
|
||
}
|
||
#pragma endregion
|
||
|
||
if(CurItemType==0)
|
||
for(int i=0;i<VarNameList.size();i++)
|
||
{
|
||
QString str=VarNameList.at(i).toUpper();
|
||
if(str.indexOf("WELLNAME")>=0)
|
||
{
|
||
WellNameCol=i;//+1;
|
||
break;
|
||
}
|
||
}
|
||
|
||
file.close();
|
||
InitList1();
|
||
PreView(1);
|
||
delete pLine;
|
||
}
|
||
void CInDefTableDlg::slotDataLineChanged(int LineNo)//数据开始行
|
||
{
|
||
DataLine=LineNo;
|
||
QFile file(FileName);
|
||
file.open(QIODevice::ReadOnly );
|
||
char*pLine=new char[5000];
|
||
for(int i=0;i<LineNo-1;i++){
|
||
file.readLine(pLine,50000);
|
||
}
|
||
file.readLine(pLine,50000);
|
||
{
|
||
char *p=strstr(pLine,"\r\n");
|
||
if(p) *p='\0';
|
||
}
|
||
QByteArray line=pLine;
|
||
DataList = GetStringList(line,IsSpa,IsTab,IsCom,IsSem,DelDubSpa);//line.split(",");
|
||
delete pLine;
|
||
file.close();
|
||
|
||
InitList1();
|
||
PreView(1);
|
||
}
|
||
bool CInDefTableDlg::Init()
|
||
{
|
||
//AfxMessageBox("ddd");
|
||
QHBoxLayout *hboxLayout=new QHBoxLayout();
|
||
MaxCol=0; ////预览数据最大列数
|
||
m_pUI->showWellPart->setLayout(hboxLayout);
|
||
QFile file(FileName);
|
||
file.open(QIODevice::ReadOnly );
|
||
int Row=0;
|
||
char*pLine=new char[5000];
|
||
QByteArray line, line1 = "";
|
||
|
||
#pragma region 自动判断需要使用的分隔符并打钩
|
||
int DubTab=-1,DubSem=-1,DubCom=-1,DubSpa=-1;//是否有连续的Tab、逗号、分号和空格
|
||
int Tab=-1,Sem=-1,Com=-1,Spa=-1;//是否有Tab、逗号、分号和空格分隔符
|
||
while(!file.atEnd())
|
||
{
|
||
file.readLine(pLine,5000);
|
||
{
|
||
char *p=strstr(pLine,"\r\n");
|
||
if(p) *p='\0';
|
||
}
|
||
line = pLine;
|
||
if(Row<100) //仅仅检查前100行是否有连续空格、单空格、Tab、逗号、分号
|
||
{
|
||
//if(DubTab<0)DubTab=line.indexOf(" ");
|
||
//if(DubSem<0)DubSem=line.indexOf(";;");
|
||
//if(DubCom<0)DubCom=line.indexOf(",,");
|
||
if(DubSpa<0)DubSpa=line.indexOf(" ");
|
||
if(Tab<0)Tab=line.indexOf(" ");
|
||
if(Sem<0)Sem=line.indexOf(";");
|
||
if(Com<0)Com=line.indexOf(",");
|
||
if(Spa<0)Spa=line.indexOf(" ");
|
||
}
|
||
//m_pUI->textEdit->append("Line "+QString::number(Row+1)+":"+line);
|
||
Row++;
|
||
}//分隔符选择框
|
||
if(Tab>=0){
|
||
IsTab=1;
|
||
m_pUI->checkBox_Tab->setChecked(IsTab);
|
||
}
|
||
if(Sem>=0){
|
||
IsSem=1;
|
||
m_pUI->checkBox_Semicolon->setChecked(IsSem);
|
||
}
|
||
if(Com>=0){
|
||
IsCom=1;
|
||
m_pUI->checkBox_Comma->setChecked(IsCom);
|
||
}
|
||
if(Spa>=0){
|
||
IsSpa=1;
|
||
m_pUI->checkBox_Space->setChecked(IsSpa);
|
||
}
|
||
if(DubSpa>=0){
|
||
DelDubSpa=1;
|
||
m_pUI->checkBox_Spa_2->setChecked(DelDubSpa);
|
||
}
|
||
#pragma endregion
|
||
|
||
m_pUI->spinBox_Var->setMinimum(0);m_pUI->spinBox_Var->setMaximum(Row);
|
||
m_pUI->spinBox_Data->setMinimum(0);m_pUI->spinBox_Data->setMaximum(Row);
|
||
m_pUI->comboBox_DefValue->addItem("-99999.");
|
||
m_pUI->comboBox_DefValue->addItem("-9999.");
|
||
m_pUI->comboBox_DefValue->addItem("-999.25");
|
||
m_pUI->comboBox_DefValue->addItem("-32767");
|
||
m_pUI->comboBox_DefValue->addItem("0");//whp add 2020.4.9
|
||
m_pUI->comboBox_DefStr->addItem("");
|
||
m_pUI->comboBox_DefStr->addItem("NULL");
|
||
m_pUI->comboBox_DefStr->addItem("NONE");
|
||
|
||
//初步判断变量行和数据行
|
||
file.seek(0);
|
||
int pos=Row;
|
||
if(Row > 20)
|
||
pos = Row - 1;//尽量避开尾部空行*********************************
|
||
MaxRow = pos; //总行数
|
||
#pragma region 记录最大列数
|
||
for(int i = 0; i < pos; i++)
|
||
{
|
||
file.readLine(pLine,50000);
|
||
{
|
||
char *p=strstr(pLine,"\r\n");
|
||
if(p) *p='\0';
|
||
}
|
||
QByteArray line=pLine;
|
||
DataList=GetStringList(line, IsSpa, IsTab, IsCom, IsSem, DelDubSpa);
|
||
if(DataList.size() < 2)continue; //数据量过少的直接抛弃*********************
|
||
line1 = line;
|
||
if(MaxCol < DataList.size())
|
||
MaxCol = DataList.size(); //重置最大列数,初始为0
|
||
}
|
||
if(MaxCol==0)
|
||
{
|
||
QMessageBox::warning(NULL,"错误"," 无法识别数据文件:\r\n"+FileName);
|
||
file.close();
|
||
delete pLine;
|
||
return 0;
|
||
}
|
||
#pragma endregion
|
||
|
||
//保存末行的列数,暂且作为数据列数
|
||
DataList = GetStringList(line1,IsSpa,IsTab,IsCom,IsSem,DelDubSpa);//line.split(",");//取数据行
|
||
int VarNum=DataList.size();
|
||
//if(MaxCol<VarNum)MaxCol=VarNum;
|
||
|
||
#pragma region 确定字段名起始行,以及数据起始行
|
||
file.seek(0);
|
||
for(int i = 0; i < pos - 1; i++)//**************************
|
||
{
|
||
file.readLine(pLine,50000);
|
||
{
|
||
char *p=strstr(pLine,"\r\n");
|
||
if(p) *p='\0';
|
||
}
|
||
line=pLine;
|
||
DataList=GetStringList(line,IsSpa,IsTab,IsCom,IsSem,DelDubSpa);//line.split(",");//取变量名行
|
||
//if(MaxCol<DataList.size())MaxCol=DataList.size();
|
||
bool NotVarLine=0;
|
||
if( VarNum == DataList.size())//找到符合数据行列数要求的行,初步判断为字段名行或者数据行*********************************************
|
||
{
|
||
for(int j = 0; j < VarNum; j++)
|
||
{
|
||
if(mIsNumber(DataList[j]))
|
||
{
|
||
NotVarLine=1; //非字段名行
|
||
break;
|
||
}
|
||
}
|
||
if(NotVarLine){ //认为是数据行,跳出(实际数据行数 = i+1)
|
||
DataLine = i + 1;
|
||
break;
|
||
}
|
||
VarLine=i+1;
|
||
DataLine=i+2;
|
||
break;
|
||
}
|
||
}
|
||
#pragma endregion
|
||
|
||
file.close();
|
||
delete pLine;
|
||
m_pUI->spinBox_Var->setValue(VarLine);
|
||
m_pUI->spinBox_Data->setValue(DataLine);
|
||
slotVarLineChanged(VarLine);
|
||
TotalLine=Row;
|
||
if(VarLine || DataLine)
|
||
{
|
||
InitList1();
|
||
PreView(1);
|
||
}
|
||
|
||
return 1;
|
||
}
|
||
|
||
//处理上面的table
|
||
void CInDefTableDlg::InitList1()
|
||
{
|
||
if(!TotalLine)
|
||
return;//whp add 2020.3.6
|
||
|
||
int ZdNum;
|
||
if(VarLine)//字段名行数
|
||
ZdNum = VarNameList.size(); //列数(字段数)
|
||
else
|
||
{
|
||
if(VarNameList.size()>DataList.size()) ZdNum=VarNameList.size();
|
||
else ZdNum = DataList.size();
|
||
}
|
||
if(ZdNum <= 0)
|
||
return;
|
||
|
||
MapData.clear();
|
||
m_pUI->tableWidget_1->clearContents();
|
||
m_pUI->tableWidget_1->setColumnCount(MaxCol);//设置表格最大列数:MaxCol 最大列数, tableWidget->setRowCount(10);是设置行数
|
||
|
||
QStringList header;
|
||
for(int i = 0; i < MaxCol; i++)//for(int i=0;i<ZdNum;i++)
|
||
{
|
||
if(VarLine <= 0 || i >= ZdNum) //不确定该列的字段名
|
||
header << "第" + QString::number(i+1) + "列";
|
||
else
|
||
header << "第" + QString::number(i+1) + "列\r\n" + VarNameList.at(i);
|
||
}
|
||
m_pUI->tableWidget_1->setHorizontalHeaderLabels(header); //设置表头
|
||
m_pUI->tableWidget_1->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
|
||
|
||
QFile file(FileName);
|
||
file.open(QIODevice::ReadOnly );
|
||
m_pUI->tableWidget_1->setRowCount(MaxRow + 10); //设置行数,10行作为额外行
|
||
int Row = 0, row = 0; //row:记录当前待处理行
|
||
QByteArray line;
|
||
char*pLine=new char[5000];
|
||
//所有行遍历开始
|
||
while(!file.atEnd())
|
||
{
|
||
file.readLine(pLine,50000);
|
||
{
|
||
char *p=strstr(pLine,"\r\n");
|
||
if(p) *p='\0';
|
||
}
|
||
line=pLine;
|
||
#pragma region 将该行内容写入tableWidget_1
|
||
QStringList List = GetStringList(line,IsSpa,IsTab,IsCom,IsSem,DelDubSpa);
|
||
|
||
QString DataStr;
|
||
//if(row<100) //2020.8.2 for刷新慢
|
||
{
|
||
for(int i = 0; i < MaxCol; i++)
|
||
{
|
||
if(i < List.size())
|
||
DataStr = List[i];
|
||
else
|
||
DataStr="";
|
||
|
||
//将new QTableWidgetItem(DataStr)作为一个元素值放入对应位置(row行,i列)
|
||
m_pUI->tableWidget_1->setItem(row, i, new QTableWidgetItem(DataStr));//List[colIndex[i]]));
|
||
}
|
||
}
|
||
#pragma endregion
|
||
row++;
|
||
|
||
#pragma region 如果是空行就不用再判断是不是数据行了
|
||
QString sss;
|
||
bool IsNullLine = 1;
|
||
for(int kk = 0; kk < List.size(); kk++)
|
||
{
|
||
sss = List.at(kk);
|
||
if(sss != ""){
|
||
IsNullLine = 0;
|
||
break;
|
||
}
|
||
}
|
||
if(IsNullLine)
|
||
continue;
|
||
#pragma endregion
|
||
|
||
#pragma region 将数据行内容写入MapData
|
||
//m_pUI->tableWidget_1->setRowCount(Row+1);
|
||
if(Row >= DataLine - 1) //DataLine是实际行数,因此要减1, 判断当前处理行是否属于数据行
|
||
MapData.insert(Row - (DataLine - 1), List);//MapData.insert(Row,List);whp change 2020.5.21
|
||
#pragma endregion
|
||
Row++;
|
||
|
||
}//while(!textstream.atEnd())
|
||
|
||
delete pLine;
|
||
//2020.8.2 for刷新慢
|
||
m_pUI->tableWidget_1->setRowCount(row); //重置table行数
|
||
//if(row>=100)m_pUI->tableWidget_1->setRowCount(100);
|
||
file.close();
|
||
if(!CurItemType)
|
||
{
|
||
/* m_pUI->comboBox_WellName->clear();
|
||
for(int i=0;i<ZdNum;i++)m_pUI->comboBox_WellName->addItem("第"+QString::number(i+1)+"列");
|
||
m_pUI->comboBox_WellName->setCurrentIndex(0);*/
|
||
}
|
||
}
|
||
|
||
BOOL CInDefTableDlg::mIsNumber(QString str)//判断字符串是否为数值
|
||
{
|
||
QByteArray ba = str.toLatin1();//QString 转换为 char*
|
||
const char *buf = ba.data();
|
||
int len=strlen(str.toStdString().c_str());//str.length();//whp change 2020.3.16
|
||
int dig[30];
|
||
int DotNum=0;//小数点个数
|
||
BOOL IsDigital=1;
|
||
for(int i=0;i<len;i++)
|
||
{
|
||
if(i==0&&buf[i]=='-')continue;//可能是负数
|
||
if(buf[i]=='.')DotNum++;
|
||
else if(!isdigit(buf[i])){IsDigital=0;break;}
|
||
if(DotNum>1){IsDigital=0;break;}
|
||
}
|
||
if(!IsDigital)return 0;//字符串0
|
||
else return 1;//是数值
|
||
}
|
||
|
||
void CInDefTableDlg::slotRefreshZd(int row,int col)
|
||
{
|
||
//刷新当前字段内容
|
||
if(row)return;
|
||
QWidget *widget=m_pUI->tableWidget->cellWidget(row,col);
|
||
QComboBox *combox=(QComboBox*)widget;
|
||
int colIndex=combox->currentIndex();
|
||
int FirstCol=0;
|
||
if(!CurItemType)FirstCol=1;
|
||
for(int Row=0;Row<MapData.count();Row++)
|
||
{
|
||
QStringList List=MapData.find(Row).value();
|
||
QString DataStr;
|
||
|
||
if(colIndex>=0&&colIndex<List.size())DataStr=List[colIndex];
|
||
else
|
||
{
|
||
if(DefauleTable[TableType].tinfo[col-FirstCol].RepCode!=6)DataStr=m_pUI->comboBox_DefValue->currentText();
|
||
else DataStr=m_pUI->comboBox_DefStr->currentText();
|
||
}
|
||
m_pUI->tableWidget->setItem(Row+1,col,new QTableWidgetItem(DataStr));//List[colIndex[i]]));
|
||
if(!CurItemType)//当前选择项是“井”时,统计所有井名
|
||
{
|
||
if(col==0)
|
||
{
|
||
bool flag=0;
|
||
DataStr=DataStr.toUpper();
|
||
for(int j=0;j<WellNameList.size();j++)
|
||
{
|
||
if(WellNameList.at(j)!=DataStr)continue;
|
||
flag=1;break;
|
||
}
|
||
if(!flag)WellNameList.append(DataStr);
|
||
}
|
||
}
|
||
}
|
||
//当前选择项是“井”时,刷新井名列表
|
||
|
||
//////////////////////////////////////////////////////////////////////////
|
||
if(CurItemType==0&&row==0)
|
||
{
|
||
m_mutlWell->tableWidget_WellName->clearContents();
|
||
m_mutlWell->tableWidget_WellName->setColumnCount(1);
|
||
QStringList header;
|
||
header<<"井名";
|
||
m_mutlWell->tableWidget_WellName->setHorizontalHeaderLabels(header);
|
||
m_mutlWell->tableWidget_WellName->horizontalHeader()->setStretchLastSection(true);
|
||
m_mutlWell->tableWidget_WellName->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
|
||
m_mutlWell->tableWidget_WellName->setRowCount(WellNameList.size());
|
||
for(int i=0;i<WellNameList.size();i++)
|
||
{
|
||
m_mutlWell->tableWidget_WellName->setItem(i,0,new QTableWidgetItem(WellNameList.at(i)));
|
||
m_mutlWell->tableWidget_WellName->item(i,0)->setCheckState(Qt::Checked);
|
||
}
|
||
}
|
||
|
||
}
|
||
void CInDefTableDlg::slotSelAll()
|
||
{
|
||
for(int i=0;i<WellNameList.size();i++)m_mutlWell->tableWidget_WellName->item(i,0)->setCheckState(Qt::Checked);
|
||
}
|
||
void CInDefTableDlg::slotNotSelAll()
|
||
{
|
||
for(int i=0;i<WellNameList.size();i++)
|
||
m_mutlWell->tableWidget_WellName->item(i,0)->setCheckState(Qt::Unchecked);
|
||
}
|
||
//mult well
|
||
void CInDefTableDlg::slotReverseSel()
|
||
{
|
||
|
||
|
||
//////////////////////////////////////////////////////////////////////////
|
||
for(int i=0;i<WellNameList.size();i++)
|
||
{
|
||
Qt::CheckState eState= m_mutlWell->tableWidget_WellName->item(i,0)->checkState();
|
||
if (eState==Qt::Checked)m_mutlWell->tableWidget_WellName->item(i,0)->setCheckState(Qt::Unchecked);
|
||
else m_mutlWell->tableWidget_WellName->item(i,0)->setCheckState(Qt::Checked);
|
||
}
|
||
}
|
||
|
||
void CInDefTableDlg::slotEnterOk()
|
||
{
|
||
int ResultCol2;
|
||
int ResultCol[10] = {-1};
|
||
int ResultCol2Map[10] = {-1};
|
||
int SpColNum = 0;
|
||
bool TranResult = 0;
|
||
QStringList tempList;
|
||
QStringList ResultList;
|
||
map<QString, QString> ResultMap; //文字, 数值
|
||
map<QString, QString> GujingMap;
|
||
map<QString, QString> CoreOilMap;
|
||
map<QString, QString> CoreLithMap;
|
||
map<QString, QString> CorecolorMap;
|
||
int mappingTable[MAPPINGTABLENUM] = {0};
|
||
|
||
#pragma region 加载需要的映射表
|
||
if(TableType < DefTabNum)
|
||
{
|
||
//为了多表部分可以运行,暂时留着
|
||
if(DefauleTable[TableType].TableName == "RESULT")
|
||
{
|
||
#pragma region RESULT解释结论表类型
|
||
#pragma region 确定result字段所在列数+提取该列comboBox combox
|
||
if(CurItemType) //非“井”
|
||
ResultCol2 = 4;
|
||
else
|
||
ResultCol2 = 5;
|
||
|
||
QWidget *widget = m_pUI->tableWidget->cellWidget(0, ResultCol2);
|
||
QComboBox *combox = (QComboBox*)widget;
|
||
#pragma endregion
|
||
|
||
if(combox->currentText() != "不导入")
|
||
{
|
||
#pragma region TranResult标签值
|
||
for(int i = 1; i < m_pUI->tableWidget->rowCount(); i++)
|
||
{
|
||
QString str = m_pUI->tableWidget->item(i, ResultCol2)->text();
|
||
|
||
if(DataHelper::StrType(str) == 6)//结论列是文字结论,需要转换(6:文字结论, 4:浮点数, 1:整型)
|
||
{
|
||
TranResult = 1;
|
||
break;
|
||
}
|
||
}
|
||
#pragma endregion
|
||
|
||
if(TranResult)
|
||
{
|
||
#pragma region 打开RESULT.ini文件并传入 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();
|
||
}
|
||
#pragma endregion
|
||
}
|
||
}
|
||
#pragma endregion
|
||
}
|
||
|
||
//20201126 GZL change
|
||
for(int zdc = 0; zdc < DefauleTable[TableType].ZdNum; zdc++)
|
||
{
|
||
QStringList ress;
|
||
ress.append(QString(DefauleTable[TableType].tinfo[zdc].Reserved));
|
||
if(ress[0].toFloat() < 1)
|
||
continue;
|
||
|
||
#pragma region 记录特殊字段所在列(标准表中的列数)
|
||
if(CurItemType) //非“井”
|
||
ResultCol[SpColNum] = zdc;
|
||
else
|
||
ResultCol[SpColNum] = zdc + 1;
|
||
#pragma endregion
|
||
|
||
int n;
|
||
QString mapName;
|
||
foreach(QString res, ress){
|
||
n = res.toInt() - 1;
|
||
if(n >= 0)
|
||
ResultCol2Map[SpColNum++] = n + 1;
|
||
if(n >= 0 && !mappingTable[n]){ //当前未加载该maptable
|
||
#pragma region 加载所需maptable
|
||
mappingTable[n] = n + 1;
|
||
|
||
switch(mappingTable[n]){
|
||
case 1:
|
||
mapName = "RESULT";
|
||
break;
|
||
case 2:
|
||
mapName = "GujingOrder";
|
||
break;
|
||
case 3:
|
||
mapName = "CoreOil";
|
||
break;
|
||
case 4:
|
||
case 7:
|
||
mapName = "CoreLith";
|
||
break;
|
||
case 5:
|
||
mapName = "Corecolor";
|
||
break;
|
||
}
|
||
#pragma region 打开映射文件
|
||
QString ConfigMapName = ::GetConfPath() + mapName + ".ini";
|
||
QFile InFile(ConfigMapName);
|
||
if( !InFile.open(QIODevice::ReadOnly ) )
|
||
{
|
||
QMessageBox::warning(NULL, "提示", "打开解释结论配置文件" + ConfigMapName + "错误");
|
||
}
|
||
|
||
QString ConfigMapName2;
|
||
if(mapName == "Corecolor")
|
||
ConfigMapName2 = ::GetConfPath() + "colorind.ini";
|
||
else
|
||
ConfigMapName2 = ::GetConfPath() + mapName + "ind.ini";
|
||
QFile InFile2(ConfigMapName2);
|
||
if( !InFile2.open(QIODevice::ReadOnly ) )
|
||
{
|
||
QMessageBox::warning(NULL, "提示", "打开解释结论配置文件" + ConfigMapName2 + "错误");
|
||
}
|
||
#pragma endregion
|
||
|
||
QTextStream textstream( &InFile );
|
||
QString line;
|
||
tempList.clear();
|
||
while(!textstream.atEnd())
|
||
{
|
||
line = textstream.readLine();
|
||
if(line.length() < 1)
|
||
continue;
|
||
tempList.append(line);
|
||
}
|
||
InFile.close();
|
||
|
||
QTextStream textstream2( &InFile2 );
|
||
int linekeyNum = 0;
|
||
while(!textstream2.atEnd())
|
||
{
|
||
line = textstream2.readLine();
|
||
if(line == "")
|
||
continue;
|
||
if(linekeyNum >= tempList.count()){
|
||
QMessageBox::warning(NULL, "提示", "配置文件" + mapName + "ind.ini可能出错,请查看并修改");
|
||
break;
|
||
}
|
||
switch(mappingTable[n]){
|
||
case 1:ResultMap.insert(pair<QString, QString>(tempList[linekeyNum++], line));break;
|
||
case 2:GujingMap.insert(pair<QString, QString>(tempList[linekeyNum++], line));break;
|
||
case 3:CoreOilMap.insert(pair<QString, QString>(tempList[linekeyNum++], line));break;
|
||
case 4:
|
||
case 7:
|
||
CoreLithMap.insert(pair<QString, QString>(tempList[linekeyNum++], line));
|
||
break;
|
||
case 5:CorecolorMap.insert(pair<QString, QString>(tempList[linekeyNum++], line));break;
|
||
}
|
||
}
|
||
InFile2.close();
|
||
#pragma endregion
|
||
}
|
||
}
|
||
}
|
||
}
|
||
#pragma endregion
|
||
|
||
{
|
||
int ColNum;
|
||
|
||
#pragma region 单井导入
|
||
if(CurItemType)
|
||
{
|
||
if(TableType < DefTabNum)
|
||
ColNum = DefauleTable[TableType].ZdNum;
|
||
else
|
||
ColNum = VarNameList.count();
|
||
|
||
CLogIO *logio = new CLogIO();
|
||
if(!logio->Open(WellFileName.toStdString().c_str(),CSlfIO::modeReadWrite))
|
||
{
|
||
delete logio;
|
||
QMessageBox::warning(NULL,"提示","打开文件"+WellFileName+"错误\r\n无法导入数据表");
|
||
//MapData.clear();
|
||
return ;
|
||
}
|
||
|
||
QString TableName = m_pUI->lineEdit_TableName->text();
|
||
char tn[100];
|
||
strcpy(tn, TableName.toStdString().c_str());
|
||
int iIndex = logio->OpenTable(tn);
|
||
if(iIndex >= 0)
|
||
{//whp 2019.12.28 添加"放弃"选项
|
||
#pragma region 已有重名table情况
|
||
QMessageBox box(QMessageBox::Warning, "提示","数据表" + TableName + "已存在\r\n是否继续导入?");
|
||
box.setStandardButtons (QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel|QMessageBox::Ignore);
|
||
box.setButtonText (QMessageBox::Yes,QString("合并"));
|
||
box.setButtonText (QMessageBox::No,QString("另存"));//替换
|
||
box.setButtonText (QMessageBox::Cancel,QString("放弃"));//另存
|
||
box.setButtonText (QMessageBox::Ignore,QString("替换"));//放弃
|
||
int flag1 =box.exec ();
|
||
if(flag1 == QMessageBox::No)//另存Cancel
|
||
{
|
||
while(1)
|
||
{
|
||
TableName += "NEW";
|
||
if(strlen(TableName.toStdString().c_str()) > 64)//if(TableName.length()>64)//whp change 2020.3.16
|
||
{
|
||
QMessageBox::warning(NULL,"提 示","数据表名" + TableName + "过长\r\n无法导入");
|
||
//MapData.clear();
|
||
delete logio;
|
||
return;
|
||
}
|
||
if(logio->FindSlfObjectIndex(TableName.toStdString().c_str(),0)<0)break;
|
||
}
|
||
strcpy(tn,TableName.toStdString().c_str());
|
||
logio->CloseTable(iIndex);
|
||
iIndex=-1;
|
||
}
|
||
else if(flag1==QMessageBox::Ignore){
|
||
logio->DeleteSlfObject(tn);
|
||
iIndex = -1;
|
||
}//覆盖
|
||
else if(flag1==QMessageBox::Yes)//合并
|
||
{
|
||
if(logio->GetTableFieldCount(iIndex) != ColNum)//DefauleTable[TableType].ZdNum)
|
||
{
|
||
int flag = QMessageBox::warning(this,tr("警告"),
|
||
"数据表"+WellFileName+"已存在\r\n但与要导入的表数据字段数不一致,是否替换掉原数据表,重新生成新表",QMessageBox::Yes,QMessageBox::No);
|
||
if(flag == QMessageBox::Yes)
|
||
{
|
||
logio->DeleteSlfObject(tn);iIndex=-1;
|
||
}
|
||
else
|
||
{
|
||
AfxMessageBox("放弃导入");
|
||
logio->CloseTable(iIndex);
|
||
delete logio;
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
else //if(flag1==QMessageBox::Cancel)//放弃Ignore
|
||
{
|
||
logio->CloseTable(iIndex);
|
||
delete logio;
|
||
AfxMessageBox("放弃导入");//"数据表导入失败");
|
||
return;
|
||
}
|
||
#pragma endregion
|
||
}
|
||
if (iIndex < 0)
|
||
{
|
||
#pragma region 没有重名情况
|
||
QString name, len, ty, bk, hz,unit,hunit;
|
||
if(TableType < DefTabNum)
|
||
{
|
||
#pragma region 标准表
|
||
ColNum = DefauleTable[TableType].ZdNum;
|
||
for(int i = 0; i < DefauleTable[TableType].ZdNum; i++) //遍历该table所有字段
|
||
{
|
||
name +=DefauleTable[TableType].tinfo[i].Name;
|
||
len += QString::number(DefauleTable[TableType].tinfo[i].CodeLength);//Length);
|
||
ty += QString::number(DefauleTable[TableType].tinfo[i].RepCode);
|
||
bk += QString(DefauleTable[TableType].tinfo[i].Reserved).toInt()>0?DefauleTable[TableType].tinfo[i].Reserved:"0";
|
||
hz +=DefauleTable[TableType].tinfo[i].HZName;
|
||
if(stricmp(DefauleTable[TableType].tinfo[i].Unit,"NONE")==0)
|
||
{
|
||
unit +="";
|
||
}
|
||
else unit +=DefauleTable[TableType].tinfo[i].Unit;
|
||
hunit +=DefauleTable[TableType].tinfo[i].HZUnit;
|
||
|
||
if(i < DefauleTable[TableType].ZdNum - 1) {
|
||
name+=",";
|
||
len+=",";
|
||
ty+=",";
|
||
bk+=",";
|
||
hz+=",";
|
||
unit+=",";
|
||
hunit+=",";
|
||
}
|
||
}
|
||
#pragma endregion
|
||
}
|
||
else
|
||
{
|
||
#pragma region 非标准表
|
||
ColNum=VarNameList.count();
|
||
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
|
||
for(int Row=0;Row<MapData.count();Row++)
|
||
{
|
||
QStringList List=MapData.find(Row).value();
|
||
QString DataStr;
|
||
int len=0;
|
||
for(int i=0;i<List.count();i++)
|
||
{
|
||
QString ss=List.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;
|
||
}
|
||
}
|
||
}
|
||
for(int i=0;i<ColNum;i++)
|
||
{
|
||
if(FieldType[i]!=6)
|
||
FieldType[i]=4;
|
||
name+= VarNameList.at(i);
|
||
int codeLen=RepSize[FieldType[i]];
|
||
if(FieldType[i]==6)
|
||
codeLen=64;
|
||
len += QString::number(codeLen);
|
||
ty += QString::number(FieldType[i]);
|
||
bk += "0";
|
||
hz += "";
|
||
unit += "";
|
||
hunit += "";
|
||
if(i < ColNum-1) {
|
||
name += ",";
|
||
len += ",";
|
||
ty += ",";
|
||
bk += ",";
|
||
hz += ",";
|
||
unit += ",";
|
||
hunit += ",";
|
||
}
|
||
}
|
||
#pragma endregion
|
||
}
|
||
char cname[500], clen[500],cty[500],cbk[500],chz[500],cunit[500],chunit[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());
|
||
strcpy(cunit, unit.toStdString().c_str());
|
||
strcpy(chunit, hunit.toStdString().c_str());
|
||
iIndex = logio->Open_Set_Table(tn, 0, ColNum,
|
||
cname,
|
||
clen,//字段长度
|
||
cty,//字段类型
|
||
cbk,
|
||
chz,
|
||
cunit,
|
||
chunit
|
||
);//字段备注
|
||
//}
|
||
#pragma endregion
|
||
}
|
||
int rec = logio->GetTableRecordCount(iIndex);
|
||
int tcount = logio->GetTableFieldCount(iIndex);
|
||
Slf_TABLE_FIELD *field=new Slf_TABLE_FIELD[tcount+1];
|
||
if(!logio->GetTableFieldInfo(iIndex, field)) {
|
||
delete field;
|
||
delete logio;
|
||
return;
|
||
}
|
||
int reclen=logio->GetTableRecordLength(iIndex);
|
||
char *Buffer=new char[reclen+1];
|
||
int *colIndex=new int[tcount];//DefauleTable[TableType].ZdNum];//数据列序号
|
||
|
||
#pragma region 获取每个comboBox的index colIndex
|
||
for(int i=0;i<tcount/*DefauleTable[TableType].ZdNum*/;i++)
|
||
{
|
||
QWidget *widget=m_pUI->tableWidget->cellWidget(0,i);
|
||
QComboBox *combox=(QComboBox*)widget;
|
||
colIndex[i]=combox->currentIndex();
|
||
}
|
||
#pragma endregion
|
||
|
||
QString DESTinf;
|
||
for(int Row = 0; Row < MapData.count(); Row++) //行
|
||
{
|
||
QStringList List = MapData.find(Row).value(); //第Row行的所有数据——》List
|
||
QString DataStr;
|
||
int len = 0;
|
||
bool isSp = 0;
|
||
DESTinf = "";
|
||
for(int i = 0; i < tcount/*DefauleTable[TableType].ZdNum*/; i++) //列
|
||
{
|
||
#pragma region 获取该行该列值 DataStr
|
||
if(colIndex[i]>=0&&colIndex[i] < List.size()) //从实际数据中提取值 DataStr
|
||
DataStr = List[colIndex[i]];
|
||
else //使用默认值DataStr
|
||
{
|
||
if(field[i].RepCode != 6)
|
||
DataStr = m_pUI->comboBox_DefValue->currentText();
|
||
else
|
||
DataStr = m_pUI->comboBox_DefStr->currentText();
|
||
}
|
||
#pragma endregion
|
||
|
||
if(TableType<DefTabNum&& QString(QLatin1String(DefauleTable[TableType].tinfo[i].Name)) == "DEST" && DataStr == m_pUI->comboBox_DefStr->currentText() )
|
||
DataStr = DataStr + DESTinf;
|
||
|
||
#pragma region 文字转换
|
||
if(field[i].RepCode != 6)
|
||
{
|
||
#pragma region 20201126 GZL delete
|
||
//将RESULT列中的文字转换为对应数字
|
||
/*
|
||
if(TranResult && i == ResultCol)//TranResult:结论列是文字结论,需要转换; ResultCol:RESULT字段所在列
|
||
{
|
||
//文字转数字
|
||
int no = ResultList.indexOf(DataStr) + 1;
|
||
DataStr = QString::number(no); //替换DataStr值为对应数字
|
||
}
|
||
float buf = DataStr.toFloat();
|
||
*/
|
||
#pragma endregion
|
||
//20201126 GZL change
|
||
#pragma region 将该特殊列进行数值映射
|
||
int spn; //记录是第几个特殊字段
|
||
for(spn = 0; spn < SpColNum; spn++){ //SpColNum记录当前特殊字段
|
||
if(i == ResultCol[spn]){
|
||
isSp = 1;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if(DataHelper::StrType(DataStr) == 6 && isSp){ //需要映射
|
||
#pragma region 保留文字信息,为DEST字段做备份
|
||
DESTinf = DESTinf + DataStr;
|
||
#pragma endregion
|
||
|
||
switch(ResultCol2Map[spn]){
|
||
case 1:{
|
||
#pragma region 拆分上中下
|
||
QStringList vals;
|
||
QStringList val1=DataStr.split("上");
|
||
vals.append(val1);
|
||
val1.clear();
|
||
vals.removeAll("");
|
||
for(int i=0;i<vals.size();i++)
|
||
{
|
||
val1.append(vals[i].split("中"));
|
||
}
|
||
vals=val1;
|
||
vals.removeAll("");
|
||
val1.clear();
|
||
for(int i=0;i<vals.size();i++) {
|
||
val1.append(vals[i].split("下"));
|
||
}
|
||
vals=val1;
|
||
vals.removeAll("");
|
||
#pragma endregion
|
||
DataStr.clear();
|
||
if(vals.size() > 1){
|
||
for(int j = 0; j < vals.size(); j++) {
|
||
#pragma region 不满足组合结论要求
|
||
if(ResultMap[vals[j]].toFloat() >= 10){
|
||
logio->CloseTable(iIndex);
|
||
delete logio;
|
||
delete []Buffer;
|
||
delete []field;
|
||
delete []colIndex;
|
||
AfxMessageBox("该结论需不满足组合结论要求,请分开存放");//"数据表导入失败");
|
||
return;
|
||
}
|
||
#pragma endregion
|
||
|
||
DataStr.append(ResultMap[vals[j]]);
|
||
}
|
||
break;
|
||
}
|
||
else{
|
||
DataStr.append(ResultMap[vals[0]]);
|
||
break;
|
||
}
|
||
}
|
||
case 2:DataStr = GujingMap[DataStr];break;
|
||
case 3:DataStr = CoreOilMap[DataStr];break;
|
||
case 4:
|
||
case 7:
|
||
DataStr = CoreLithMap[DataStr];
|
||
break;
|
||
case 5:DataStr = CorecolorMap[DataStr];break;
|
||
}
|
||
}
|
||
|
||
float buf = DataStr.toFloat();
|
||
logio->SetData(field[i].RepCode, &Buffer[len], (float *)&buf);
|
||
#pragma endregion
|
||
|
||
isSp = 0;
|
||
}
|
||
#pragma endregion
|
||
else
|
||
strncpy(&Buffer[len], DataStr.toStdString().c_str(), field[i].Length);
|
||
len += field[i].Length;
|
||
}
|
||
logio->WriteTable(iIndex, Row + rec + 1, Buffer);
|
||
}
|
||
|
||
//if(lineNo>rec) rec=lineNo;
|
||
logio->SetTableRecordCount(iIndex, MapData.count() + rec);
|
||
delete []Buffer;
|
||
delete []field;
|
||
delete []colIndex;
|
||
logio->CloseTable(iIndex);
|
||
delete logio;
|
||
QMessageBox::information(NULL,"标题","数据表导入123完");
|
||
|
||
// CDataImport::ChangetoSlf(WellFileName,NULL);
|
||
//MapData.clear();
|
||
return;
|
||
}
|
||
#pragma endregion
|
||
#pragma region 多井导入
|
||
#pragma region 获取勾选的井名
|
||
QStringList WellNameList;
|
||
if(TableType<DefTabNum)ColNum=DefauleTable[TableType].ZdNum;
|
||
else ColNum=VarNameList.count()-1;
|
||
for(int i=0;i<m_mutlWell->tableWidget_WellName->rowCount();i++)
|
||
{
|
||
if(m_mutlWell->tableWidget_WellName->item(i,0)->checkState())
|
||
{
|
||
QString name=m_mutlWell->tableWidget_WellName->item(i,0)->text().toUpper();
|
||
if(name==""){
|
||
QMessageBox::warning(NULL,"提示","井名不能为空");
|
||
return;
|
||
}
|
||
if(IsValidWellName(name)==0){
|
||
QMessageBox::warning(NULL,"提示","'"+name+"'不符合井名命名规则");
|
||
return;
|
||
}
|
||
WellNameList.append(name);
|
||
}
|
||
}
|
||
#pragma endregion 获取勾选的井名
|
||
#pragma region 检查数据表是否存在
|
||
std::vector<QString> wellNameVec;
|
||
std::vector<QString> wellFileNameVec;
|
||
std::vector<bool> tableExist;//表是否存在
|
||
std::vector<int> mode;//写入方式:0-替换,1-合并,2-另存
|
||
QString TableName=m_pUI->lineEdit_TableName->text();
|
||
std::vector<int> wellIndex;//已经存在有数据表的井序号
|
||
int WellNum=0;
|
||
// for(int i=0;i<WellNameList.size();i++)
|
||
// {
|
||
// CObjWell * pWell =CDataImport::GetWellByName(WellNameList.at(i));
|
||
// if(!pWell) continue;
|
||
// wellNameVec.push_back(WellNameList.at(i).toUpper());mode.push_back(0);
|
||
// if(pWell->GetWellFileName().isEmpty())
|
||
// {
|
||
// QString fi=GetLogdataPath()+GetProject()->GetName()+"\\#"+WellNameList.at(i);
|
||
// CreateDir((char *)fi.toStdString().c_str());
|
||
// fi+="\\"+WellNameList.at(i)+".slf";
|
||
// pWell->SetWellFileName(fi);
|
||
// CLogIO *logio=new CLogIO();
|
||
// //logio->Open(fi.toStdString().c_str(),CSlfIO::modeCreate);
|
||
// 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(i).toStdString().c_str());
|
||
// strncpy(mssage.WellName,WellNameList.at(i).toStdString().c_str(),len);
|
||
// mssage.WellName[len]=0;
|
||
// logio->SetFileMessage(mssage);
|
||
// tableExist.push_back(0);
|
||
// delete logio;
|
||
// }
|
||
// else
|
||
// {
|
||
// QString fi=pWell->GetWellFileName();
|
||
// CLogIO *logio=new CLogIO();
|
||
// if(logio->Open(fi.toStdString().c_str(),CSlfIO::modeReadWrite))
|
||
// //if(logio->Open(fi.toStdString().c_str(),CSlfIO::modeReadWrite,1024,1024,MACHINE_TYPE,0))
|
||
// {
|
||
// int iIndex=logio->OpenTable(TableName.toStdString().c_str());
|
||
// if(iIndex<0)tableExist.push_back(0);
|
||
// else
|
||
// {
|
||
// tableExist.push_back(1);
|
||
// wellIndex.push_back(WellNum);
|
||
// logio->CloseTable(iIndex);
|
||
// }
|
||
// delete logio;
|
||
// }
|
||
// }
|
||
// wellFileNameVec.push_back(pWell->GetWellFileName());
|
||
// WellNum++;
|
||
// }
|
||
#pragma endregion 检查数据表是否存在
|
||
#pragma region 提示已存在的数据表处理方式
|
||
int n=wellIndex.size();
|
||
if(wellIndex.size()==1)
|
||
{
|
||
QString mes=wellNameVec[wellIndex[0]]+"井中已经存在数据表"+TableName+"\r\n请选择导入方式";
|
||
QMessageBox box(QMessageBox::Warning,"提示",mes);
|
||
box.setStandardButtons (QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel);
|
||
box.setButtonText (QMessageBox::Yes,QString("合并"));
|
||
box.setButtonText (QMessageBox::No,QString("替换"));
|
||
box.setButtonText (QMessageBox::Cancel,QString("另存"));
|
||
int flag1 =box.exec ();
|
||
if(flag1==QMessageBox::Cancel)//另存
|
||
{
|
||
mode[wellIndex[0]]=2;
|
||
}
|
||
else if(flag1==QMessageBox::No)mode[wellIndex[0]]=0;//替换
|
||
else//合并
|
||
{
|
||
mode[wellIndex[0]]=1;
|
||
}
|
||
}
|
||
else if(wellIndex.size()>1)
|
||
{
|
||
CTiShiDlg *pTishiDlg=new CTiShiDlg(NULL);
|
||
for(int i=0;i<wellIndex.size();i++)
|
||
{
|
||
pTishiDlg->namelist.append(wellNameVec[wellIndex[i]]);
|
||
pTishiDlg->init();
|
||
}
|
||
if(pTishiDlg->exec()==QDialog::Accepted)
|
||
{
|
||
for(int i = 0;i<pTishiDlg->m_pUI->tableWidget->rowCount ();i++)
|
||
{
|
||
for(int j = 1;j<pTishiDlg->m_pUI->tableWidget->columnCount ();j++)
|
||
{
|
||
if(pTishiDlg->m_pUI->tableWidget->item (i,j)->checkState ()==Qt::Checked)
|
||
{
|
||
mode[wellIndex[i]]=j-1;break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//MapData.clear();
|
||
QMessageBox::warning(NULL,"提示","放弃数据表导入");
|
||
return;
|
||
}
|
||
}
|
||
#pragma endregion 提示已存在的数据表处理方式
|
||
#pragma region 导入数据表
|
||
//获取井名列号
|
||
QWidget *widget=m_pUI->tableWidget->cellWidget(0,0);//第一列是井名
|
||
QComboBox *combox=(QComboBox*)widget;
|
||
int colIndex_wellname=combox->currentIndex();
|
||
//获取数据表字段对应列号
|
||
int *colIndex=new int[ColNum];//DefauleTable[TableType].ZdNum];//数据列序号
|
||
for(int i=0;i<ColNum/*DefauleTable[TableType].ZdNum*/;i++)
|
||
{
|
||
QWidget *widget=m_pUI->tableWidget->cellWidget(0,i+1);//第一列是井名
|
||
QComboBox *combox=(QComboBox*)widget;
|
||
colIndex[i]=combox->currentIndex();
|
||
}
|
||
QString mTableName=TableName;
|
||
int FailedNum=0;
|
||
for(int i=0;i<wellNameVec.size();i++)
|
||
{
|
||
TableName=mTableName;
|
||
QString fi=wellFileNameVec[i];
|
||
CLogIO *logio=new CLogIO();
|
||
logio->Open(fi.toStdString().c_str(),CSlfIO::modeReadWrite);
|
||
int iIndex=logio->OpenTable(TableName.toStdString().c_str());
|
||
if(iIndex>=0)//表存在
|
||
{
|
||
if(mode[i]==0)//替换
|
||
{
|
||
logio->DeleteSlfObject(TableName.toStdString().c_str());
|
||
iIndex=-1;
|
||
}
|
||
else if(mode[i]==2)//另存
|
||
{
|
||
while(1)
|
||
{
|
||
TableName+="NEW";
|
||
if(strlen(TableName.toStdString().c_str())>64)//if(TableName.length()>64)//whp change 2020.3.16
|
||
{
|
||
QMessageBox::warning(NULL,"提 示","数据表名"+TableName+"过长\r\n无法导入");
|
||
//MapData.clear();
|
||
delete logio;
|
||
return;
|
||
}
|
||
if(logio->FindSlfObjectIndex(TableName.toStdString().c_str(),0)<0)break;
|
||
}
|
||
logio->CloseTable(iIndex);
|
||
iIndex=-1;
|
||
}
|
||
else
|
||
if(mode[i]==3)//放弃导入
|
||
{
|
||
FailedNum++;
|
||
logio->CloseTable(iIndex);
|
||
iIndex=-1;
|
||
continue;
|
||
}
|
||
}
|
||
if (iIndex < 0)
|
||
{
|
||
QString name,len,ty,bk,hz;
|
||
if(TableType<DefTabNum)
|
||
{
|
||
ColNum=DefauleTable[TableType].ZdNum;
|
||
for(int i=0;i<DefauleTable[TableType].ZdNum;i++)
|
||
{
|
||
name+= QString(QLatin1String(DefauleTable[TableType].tinfo[i].Name));
|
||
len+=QString::number(DefauleTable[TableType].tinfo[i].CodeLength);//Length);
|
||
ty+=QString::number(DefauleTable[TableType].tinfo[i].RepCode);
|
||
bk+="0";
|
||
hz+=QString(QLatin1String(DefauleTable[TableType].tinfo[i].Name));
|
||
if(i<DefauleTable[TableType].ZdNum-1) {
|
||
name+=",";
|
||
len+=",";
|
||
ty+=",";
|
||
bk+=",";
|
||
hz+=",";
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
ColNum=VarNameList.count();
|
||
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
|
||
for(int Row=0;Row<MapData.count();Row++)
|
||
{
|
||
QStringList List=MapData.find(Row).value();
|
||
QString DataStr;
|
||
int len=0;
|
||
for(int i=0;i<List.count();i++)
|
||
{
|
||
QString ss=List.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;
|
||
}
|
||
}
|
||
}
|
||
for(int i=1;i<ColNum;i++)
|
||
{
|
||
if(FieldType[i]!=6)FieldType[i]=4;
|
||
name+= VarNameList.at(i);
|
||
int codeLen=RepSize[FieldType[i]];
|
||
if(FieldType[i]==6)codeLen=64;
|
||
len+=QString::number(codeLen);
|
||
ty+=QString::number(FieldType[i]);
|
||
bk+="0";
|
||
hz+=VarNameList.at(i);
|
||
if(i<ColNum-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,ColNum-1,//DefauleTable[TableType].ZdNum,
|
||
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];
|
||
int lineNo=0;
|
||
for(int Row=0;Row<MapData.count();Row++)
|
||
{
|
||
QStringList List=MapData.find(Row).value();
|
||
QString DataStr;
|
||
QString name=List[colIndex_wellname].toUpper();
|
||
if(name!=wellNameVec[i])continue;
|
||
int len=0;
|
||
for(int i=0;i<tcount/*DefauleTable[TableType].ZdNum*/;i++)
|
||
{
|
||
if(colIndex[i]>=0&&colIndex[i]<List.size())DataStr=List[colIndex[i]];
|
||
else
|
||
{
|
||
if(field[i].RepCode!=6)
|
||
DataStr=m_pUI->comboBox_DefValue->currentText();
|
||
else
|
||
DataStr=m_pUI->comboBox_DefStr->currentText();
|
||
}
|
||
|
||
if(field[i].RepCode!=6)
|
||
{
|
||
if(TranResult&&i==ResultCol2-1)
|
||
{
|
||
int no=ResultList.indexOf(DataStr)+1;
|
||
DataStr=QString::number(no);
|
||
}
|
||
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+rec+1,Buffer);
|
||
lineNo++;
|
||
}
|
||
//if(lineNo>rec) rec=lineNo;
|
||
logio->SetTableRecordCount(iIndex,lineNo+rec);
|
||
delete []Buffer;
|
||
delete []field;
|
||
|
||
logio->CloseTable(iIndex);
|
||
delete logio;
|
||
// CDataImport::ChangetoSlf(wellFileNameVec[i],NULL);
|
||
}
|
||
QString mes="多井数据表导入成功\r\n共有"+QString::number(wellNameVec.size()-FailedNum)+"口井成功导入数据表"+mTableName;
|
||
QMessageBox::warning(this,tr("提示"),mes);
|
||
delete []colIndex;
|
||
#pragma endregion
|
||
#pragma endregion
|
||
}
|
||
//MapData.clear();
|
||
|
||
|
||
#pragma region 王专家上中下样例
|
||
#pragma endregion
|
||
}
|
||
|
||
//comboBox change
|
||
void CInDefTableDlg::slotComboxSelectChange(int index)
|
||
{
|
||
if(! m_pUI->tableWidget->isActiveWindow())
|
||
return;
|
||
//刷新当前字段内容
|
||
|
||
//QWidget *widget=m_pUI->tableWidget->cellWidget(row,col);
|
||
QComboBox *combox = (QComboBox*)sender();
|
||
|
||
int row = combox->property("row").toInt();
|
||
int col = combox->property("col").toInt();
|
||
|
||
int colIndex = index;
|
||
if(!CurItemType && col == 0)
|
||
WellNameList.clear();//whp add 2020.3.6
|
||
for(int Row = 0; Row < MapData.count(); Row++)
|
||
{
|
||
QStringList List = MapData.find(Row).value();
|
||
QString DataStr;
|
||
int FirstCol = 0;
|
||
if(!CurItemType)
|
||
FirstCol = 1;
|
||
|
||
if(colIndex>=0&&colIndex < List.size())
|
||
DataStr = List[colIndex];
|
||
else
|
||
{
|
||
if(TableType<DefTabNum)
|
||
if(DefauleTable[TableType].tinfo[col-FirstCol].RepCode != 6)
|
||
DataStr = m_pUI->comboBox_DefValue->currentText();
|
||
else
|
||
DataStr = m_pUI->comboBox_DefStr->currentText();
|
||
}
|
||
m_pUI->tableWidget->setItem(Row+1, col, new QTableWidgetItem(DataStr));
|
||
if(!CurItemType && col == 0)//当前选择项是“井”时,统计所有井名 whp change 2020.3.6
|
||
{
|
||
bool flag=0;
|
||
DataStr=DataStr.toUpper();
|
||
for(int j=0;j<WellNameList.size();j++)
|
||
{
|
||
if(WellNameList.at(j)!=DataStr)continue;
|
||
flag=1;break;
|
||
}
|
||
if(!flag)WellNameList.append(DataStr);
|
||
}
|
||
}
|
||
//当前选择项是“井”时,刷新井名列表
|
||
if(CurItemType==0&&row==0&&col==0)//if(CurItemType==0&&row==0)whp change 2020.3.6
|
||
{
|
||
m_mutlWell->tableWidget_WellName->clearContents();
|
||
m_mutlWell->tableWidget_WellName->setColumnCount(1);
|
||
QStringList header;
|
||
header<<"井名";
|
||
m_mutlWell->tableWidget_WellName->setHorizontalHeaderLabels(header);
|
||
m_mutlWell->tableWidget_WellName->horizontalHeader()->setStretchLastSection(true);
|
||
m_mutlWell->tableWidget_WellName->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
|
||
m_mutlWell->tableWidget_WellName->setRowCount(WellNameList.size());
|
||
for(int i=0;i<WellNameList.size();i++)
|
||
{
|
||
m_mutlWell->tableWidget_WellName->setItem(i,0,new QTableWidgetItem(WellNameList.at(i)));
|
||
m_mutlWell->tableWidget_WellName->item(i,0)->setCheckState(Qt::Checked);
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
void CInDefTableDlg::accept()
|
||
{
|
||
//throw std::logic_error("The method or operation is not implemented.");
|
||
QDialog::done(Rejected);
|
||
}
|
||
void CInDefTableDlg::resizeEvent(QResizeEvent *pEvent)
|
||
{
|
||
QDialog::resizeEvent(pEvent);
|
||
|
||
//m_pUI->tableWidget->horizontalHeader()->resizeSections(QHeaderView::Stretch);
|
||
int visual = m_pUI->tableWidget->horizontalHeader()->visualIndex(1);
|
||
if (visual!=-1)
|
||
{
|
||
m_pUI->tableWidget->horizontalHeader()->setSectionResizeMode(1,QHeaderView::ResizeToContents);
|
||
if(m_pUI->tableWidget->columnCount()<10)m_pUI->tableWidget->horizontalHeader()->resizeSections(QHeaderView::Stretch);
|
||
else m_pUI->tableWidget->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents);
|
||
}
|
||
|
||
if(MaxCol<10)m_pUI->tableWidget_1->horizontalHeader()->resizeSections(QHeaderView::Stretch);
|
||
else m_pUI->tableWidget_1->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents);
|
||
// m_pUI->tableWidget_1->horizontalHeader()->resizeSections(QHeaderView::Stretch);
|
||
}
|
||
|
||
void CInDefTableDlg::showEvent(QShowEvent * pEvent)
|
||
{
|
||
QDialog::showEvent(pEvent);
|
||
// if(m_bFirstShow)
|
||
{
|
||
|
||
// m_pUI->tableWidget->horizontalHeader()->resizeSections(QHeaderView::Stretch);
|
||
int visual = m_pUI->tableWidget->horizontalHeader()->visualIndex(1);
|
||
if (visual!=-1)
|
||
{
|
||
m_pUI->tableWidget->horizontalHeader()->setSectionResizeMode(1,QHeaderView::ResizeToContents);
|
||
if(m_pUI->tableWidget->columnCount()<10)m_pUI->tableWidget->horizontalHeader()->resizeSections(QHeaderView::Stretch);
|
||
else m_pUI->tableWidget->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents);
|
||
}
|
||
|
||
if(MaxCol<10)m_pUI->tableWidget_1->horizontalHeader()->resizeSections(QHeaderView::Stretch);
|
||
else m_pUI->tableWidget_1->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents);
|
||
//m_pUI->tableWidget_1->horizontalHeader()->resizeSections(QHeaderView::Stretch);
|
||
//m_bFirstShow =false;
|
||
}
|
||
|
||
}
|
||
END_OSGGRAPHICS_NAMESPACE
|