2025-10-30 09:50:15 +08:00
# include < QFileDialog >
# include <QScrollBar>
# include <qformlayout.h>
# include <QInputDialog>
# include <QListWidget>
# include <QCompleter>
# include <qtablewidget.h>
2025-12-02 15:23:42 +08:00
//#include "io.h"
2025-10-30 09:50:15 +08:00
# include <QMessageBox>
# include "DataManagger.h"
# include "InDefTableDlg.h"
# include "DataHelper.h"
// #include "DataImport.h"
// #include "ObjWellLogTABLE.h"
// #include "CreateNewCurveDlg.h"
//#include "TableTBCurve.h"
2026-01-29 16:57:06 +08:00
# include "CurvePropertyEdit.h"
2025-10-30 09:50:15 +08:00
# include "cdialog.h" //"MyListDlg.h"
2026-01-29 16:57:06 +08:00
# include "CurveComputerDlg.h"
2025-10-30 09:50:15 +08:00
// #include "UnitConvertDlg.h"
2026-01-29 16:57:06 +08:00
# include "StatisticsDlg.h"
# include "Statistics2Dlg.h"
# include "CurveComputePage.h"
2025-10-30 09:50:15 +08:00
// #include "CopyObjectDlg.h"
// #include "WaveComposeDlg.h"//2020.4.14 合成阵列曲线
2026-01-29 16:57:06 +08:00
# include "ShowWave.h" //波列曲线预览
# include "ShowCurve.h" //2020.5.12常规曲线预览
2025-10-30 09:50:15 +08:00
# include <QEventLoop>
// #include "tableproeditdlg.h"
2025-11-26 10:21:39 +08:00
# include "CreateNewTableDlg.h"
2025-10-30 09:50:15 +08:00
# 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 ) ) ; //加载自由数据表
}
2026-01-29 16:57:06 +08:00
//曲线数值统计
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;
}
}
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
void CDataManagger : : DataStatistics ( int Type ,
const QString & FileName ,
const QString & CurveName ,
QWidget * parent )
{
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
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 )
{
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
CStatisticsDlg * pDlg1 = parent - > findChild < CStatisticsDlg * > ( " statView " ) ;
if ( NULL = = pDlg1 )
{
pDlg1 = new CStatisticsDlg ( parent , 0 ) ;
pDlg1 - > setObjectName ( " statView " ) ;
}
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
/* 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
{
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
CStatistics2Dlg * pDlg2 = parent - > findChild < CStatistics2Dlg * > ( " stat2View " ) ;
if ( NULL = = pDlg2 )
{
pDlg2 = new CStatistics2Dlg ( parent , 0 ) ;
pDlg2 - > setObjectName ( " stat2View " ) ;
}
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
pDlg2 - > FileName = FileName ;
pDlg2 - > CurveName = CurveName ;
pDlg2 - > init ( ) ;
pDlg2 - > show ( ) ;
}
}
2025-10-30 09:50:15 +08:00
// //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();
// }
2026-01-29 16:57:06 +08:00
void CDataManagger : : CurvePropertyEdit ( int Type ,
const QString & FileName ,
const QString & CurveName ,
QWidget * parent )
{
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
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 ( ) ;
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
}
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
void CDataManagger : : CurveCompute ( const QString & FileName ,
const QStringList & CurveNameList ,
QWidget * parent )
{
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
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;
}
}
2025-10-30 09:50:15 +08:00
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
//创建新表
2025-11-26 10:21:39 +08:00
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 " " ;
}
}
2025-10-30 09:50:15 +08:00
// 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+5; GR2=45; TEMP=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+5; GR2=45; TEMP=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);
// }
// }
2026-01-29 16:57:06 +08:00
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 ;
}
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
//常规曲线
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 ( ) ;
}
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
}
2025-10-30 09:50:15 +08:00
// 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 ( ) ;
} */