logplus/DataOutput/include/MyXtfLib.h
2025-10-29 17:23:30 +08:00

1516 lines
47 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

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

#pragma once
class XtfCvt
{
public:
int SystemCode;
CString findLetter(int nCode);
CString GetLetter(CString strText)
{
return strText;
};
short ToInt16(byte data[],int offset)
{
byte temp[2] ;
if (SystemCode == 1)
{
temp[0] = data[0 + offset];
temp[1] = data[1 + offset];
}
else
{
temp[0] = data[1 + offset];
temp[1] = data[0 + offset];
}
short result = *(short*)temp;
return result;
};
int ToInt32(byte data[], int offset)
{
byte temp[4];
if (SystemCode == 1)
{
temp[0] = data[0 + offset];
temp[1] = data[1 + offset];
temp[2] = data[2 + offset];
temp[3] = data[3 + offset];
}
else
{
temp[0] = data[3 + offset];
temp[1] = data[2 + offset];
temp[2] = data[1 + offset];
temp[3] = data[0 + offset];
}
int result = *(int*)temp;
return result;
};
long ToInt64(byte data[], int offset)
{
byte temp[8];// = new byte[8];
if (SystemCode == 1)
{
temp[0] = data[0 + offset];
temp[1] = data[1 + offset];
temp[2] = data[2 + offset];
temp[3] = data[3 + offset];
temp[4] = data[4 + offset];
temp[5] = data[5 + offset];
temp[6] = data[6 + offset];
temp[7] = data[7 + offset];
}
else
{
temp[0] = data[7 + offset];
temp[1] = data[6 + offset];
temp[2] = data[5 + offset];
temp[3] = data[4 + offset];
temp[4] = data[3 + offset];
temp[5] = data[2 + offset];
temp[6] = data[1 + offset];
temp[7] = data[0 + offset];
}
long result = *(long*)temp;
return result;
};
float ToFloat(byte data[], int offset)
{
byte temp[4];// = new byte[4];
if (SystemCode == 1)
{
temp[0] = data[0 + offset];
temp[1] = data[1 + offset];
temp[2] = data[2 + offset];
temp[3] = data[3 + offset];
}
else
{
temp[0] = data[3 + offset];
temp[1] = data[2 + offset];
temp[2] = data[1 + offset];
temp[3] = data[0 + offset];
}
float result = *(float*)temp;
return result;
};
double ToDouble(byte data[], int offset)
{
byte temp[8];// = new byte[8];
if (SystemCode == 1)
{
temp[0] = data[0 + offset];
temp[1] = data[1 + offset];
temp[2] = data[2 + offset];
temp[3] = data[3 + offset];
temp[4] = data[4 + offset];
temp[5] = data[5 + offset];
temp[6] = data[5 + offset];
temp[7] = data[6 + offset];
}
else
{
temp[0] = data[7 + offset];
temp[1] = data[6 + offset];
temp[2] = data[5 + offset];
temp[3] = data[4 + offset];
temp[4] = data[3 + offset];
temp[5] = data[2 + offset];
temp[6] = data[1 + offset];
temp[7] = data[0 + offset];
}
double result = *(double*)temp;
return result;
};
byte ToByte(byte data[], int offset)
{
byte temp = data[offset];
return temp;
};
CString ToCString(byte data[], int offset,int length)
{
char temp[4096]="";
for (int i = 0; i < length; i++)
{
temp[i] = (char)(data[i + offset]);
}
CString result =temp;
result.TrimLeft();
result.TrimRight();
return result;
};
int ToBytes(int data, byte bdata[], int offset)
{
byte temp[4];
byte result[4];
memcpy(temp,&data,4);
if (SystemCode == 1)
{
result[0] = temp[0];
result[1] = temp[1];
result[2] = temp[2];
result[3] = temp[3];
}
else
{
result[0] = temp[3];
result[1] = temp[2];
result[2] = temp[1];
result[3] = temp[0];
}
memcpy((void*)(bdata+offset),result,4);
return data;
};
byte ToBytes(byte data, byte bdata[], int offset)
{
bdata[offset]=data;
return data;
};
short ToBytes(short data, byte bdata[], int offset)
{
byte temp[2];
byte result[2];
memcpy(temp,&data,2);
if (SystemCode == 1)
{
result[0] = temp[0];
result[1] = temp[1];
}
else
{
result[0] = temp[1];
result[1] = temp[0];
}
memcpy((void*)(bdata+offset),result,2);
return data;
};
float ToBytes(float data, byte bdata[], int offset)
{
byte temp[4];
byte result[4];
memcpy(temp,&data,4);
if (SystemCode == 1)
{
result[0] = temp[0];
result[1] = temp[1];
result[2] = temp[2];
result[3] = temp[3];
}
else
{
result[0] = temp[3];
result[1] = temp[2];
result[2] = temp[1];
result[3] = temp[0];
}
memcpy((void*)(bdata+offset),result,4);
return data;
};
double ToBytes(double data, byte bdata[], int offset)
{
byte temp[8];
byte result[8];
memcpy(temp,&data,8);
if (SystemCode == 1)
{
result[0] = temp[0];
result[1] = temp[1];
result[2] = temp[2];
result[3] = temp[3];
result[4] = temp[4];
result[5] = temp[5];
result[6] = temp[6];
result[7] = temp[7];
}
else
{
result[0] = temp[7];
result[1] = temp[6];
result[2] = temp[5];
result[3] = temp[4];
result[4] = temp[3];
result[5] = temp[2];
result[6] = temp[1];
result[7] = temp[0];
}
memcpy((void*)(bdata+offset),result,8);
return data;
};
CString ToBytes(CString data, byte bdata[], int offset, int length)
{
int len=data.GetLength();
if(length<len)len=length;
for(int i=0;i<len;i++)
bdata[offset+i]=data.GetAt(i);
return data;
};
};
class CurveHeadInfo
{
public :
CString CurveName;
CString CurveUnit;
CString CurveRemark;
CString ServiceCompany;
CString ToolType;
CString CurveClass;
CString DepthUnit;
CString WaveTimeUnit;
CString StartTimeUnit;
CString OrinHeadRecord;
CString LogDirection; //???
float Step;
float Window;
float CBILAngle;
float TR_Distance;
float RR_Distance;
float OrinToSurface;
CString AIFName;
CString OCTName;
CString LisName;
CString ToolName;
float StartDepth;
float EndDepth;
float DepthLevel;
float MinValue;
float MaxValue;
float AvgValue;
float TimeValuesLevel;
float DACTimeOffset;
float StaticMeasureDepth;
float StandardDeviation;
double DoubleInitValues;
double DoubleStartDepth;
double DoubleEndDepth;
double DoubleDepthLevel;
int CreateDate;
int CreateTime;
int AccessDate;
int AccessTime;
int CurveHeadRecordNum;
int EndPosition;
float InitValues;
int SamplesNum;
short MajorVersion;
short MinorVersion;
short CurveIndex;
short CurveType;
short CurveDataType;
short CurveHorz;
short CurveVert;
short CurveDimNum;
short CurveE1Num;
short CurveE2Num;
short CurveE3Num;
short DataTypeFlag;
short HaveNegFlag;
short DataBitsNum;
short FixedWaveStartFlag;
short FixedWaveGain;
short WaveGainExp;
short GainMethod;
short GainApplyFlag;
short WaveLength;
short ToolNo;
short CurveSerialNo;
byte TranFillArea[24];//=new byte[24];
byte RecvFillArea[24];//=new byte[24];
byte SystemCode;
};
class MyXtfLib
{
public :
QFile *dataFile;
bool openFlag;
int fileOptions;
int BlockNum; //8
int CurveFlag[512]; //<2F><><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD><EFBFBD>־,
//<2F><>1
byte HeadRecord[512];
CString FileExtation;
CString FilePath;
CString SystemDepthUnit;
CString AIFVersion;
byte SystemCode;
byte Version1;
byte Version2;//E;
int CurveNum;
int MaxCurveNum;
float FileStartDepth;
float FileEndDepth;
float FileDepthLevel;
//<2F><>2
byte BitmapHead; //ͷ
byte BitmapRecords[4071];
byte BitmapValues[4];
byte BitmapFirst[4];
byte BitmapSecond[4];
byte BitmapPreview[4];
byte BitmapCurrent[4];
byte BitmapNext[4];
//<2F><>3
CString CurveName[512]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><>4
int CurveStartPos[512] ;//<2F><><EFBFBD>߿<EFBFBD>ʼλ<CABC><CEBB>
int CurveSampleNum[512] ; //<2F><><EFBFBD><EFBFBD><EFBFBD>ܲ<EFBFBD><DCB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int CurveEndPos[512]; //<2F><><EFBFBD>߿<EFBFBD>ʼλ<CABC><CEBB>
//<2F><>5
short CurveDimNum[512]; //ά<><CEAC>
short CurveE1Num[512]; //<2F><><31><CEAC><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
short CurveE2Num[512]; //<2F><><32><CEAC><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
short CurveE3Num[512]; //<2F><><33><CEAC><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
//<2F><>6
float CurveStartDepth[512];
float CurveEndDepth[512];
//<2F><>7
float CurveDepthLevel[512];
byte CurveType[512];
byte CurveDataType[512] ;
byte CurveHorz[512];
byte CurveVert[512] ;
//<2F><>8
CString WSI;
CString WellName;
CString OilFieldName;
CString CompanyName;
CString CountryName;
CString StatesName;
CString WellLocate;
float JingDu;
float WeiDu;
float HaiBa;
short SystemForM; //<2F><>Ӣ
float MagtCPJ; //<2F><>ƫ<EFBFBD><C6AB>
//<2F><>9
CString CurveUnit[512];
CurveHeadInfo curveInfo[512];
int CreateDate;
int CreateTime;
int LastAccessDate;
int LastAccessTime;
XtfCvt XtfConvert;
MyXtfLib()//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
{
int i=0;
byte ByteArray[4096] = {0};
//<2F><>1
memset(ByteArray,0, 4096);
// HeadRecord = XtfConvert.ToCString(ByteArray, 0, 32);
FileExtation = XtfConvert.ToCString(ByteArray, 760, 4);
FileExtation.MakeLower();
FilePath = XtfConvert.ToCString(ByteArray, 764, 80);
SystemDepthUnit = XtfConvert.ToCString(ByteArray, 844, 8);
AIFVersion = XtfConvert.ToCString(ByteArray, 852, 8);
SystemCode = XtfConvert.ToByte(ByteArray, 948); //5=<3D><><EFBFBD><EFBFBD>վ<EFBFBD><D5BE>1=PC<50><43><EFBFBD><EFBFBD>
XtfConvert.SystemCode = SystemCode;
Version1 = XtfConvert.ToByte(ByteArray, 950);
Version2 = XtfConvert.ToByte(ByteArray, 951);
CurveNum = XtfConvert.ToInt32(ByteArray, 996);
MaxCurveNum = XtfConvert.ToInt32(ByteArray, 1000);
FileStartDepth = XtfConvert.ToFloat(ByteArray, 2048);
FileEndDepth = XtfConvert.ToFloat(ByteArray, 2052);
FileDepthLevel = XtfConvert.ToFloat(ByteArray, 2056);
//<2F><>2
memset(ByteArray,0, 4096);
BitmapHead = ByteArray[0];
memcpy(BitmapRecords,ByteArray+1,4071);
memcpy(BitmapValues,ByteArray+4072,4);
//<2F><>3
memset(ByteArray,0, 4096);
for ( i = 0; i < 512; i++)
{
CurveName[i] = XtfConvert.ToCString(ByteArray, i * 8, 8);
}
//<2F><>4
memset(ByteArray,0, 4096);
for ( i = 0; i < 256; i++)
{
CurveStartPos[i] = XtfConvert.ToInt32(ByteArray, i * 8);
CurveStartPos[i+256] = XtfConvert.ToInt32(ByteArray, i * 8+4);
}
for ( i = 0; i < 256; i++)
{
CurveSampleNum[i] = XtfConvert.ToInt32(ByteArray, i * 8 + 2048);
CurveSampleNum[i + 256] = XtfConvert.ToInt32(ByteArray, i * 8 + 4 + 2048);
}
//<2F><>5
memset(ByteArray,0, 4096);
for ( i = 0; i < 256; i++)
{
CurveDimNum[i] = XtfConvert.ToInt16(ByteArray, i * 8);
CurveE1Num[i ] = XtfConvert.ToInt16(ByteArray, i * 8 + 2);
CurveDimNum[i + 256] = XtfConvert.ToInt16(ByteArray, i * 8 + 4);
CurveE1Num[i + 256] = XtfConvert.ToInt16(ByteArray, i * 8 + 6);
}
for ( i = 0; i < 256; i++)
{
CurveE2Num[i] = XtfConvert.ToInt16(ByteArray, i * 8 + 2048);
CurveE3Num[i] = XtfConvert.ToInt16(ByteArray, i * 8 + 2 + 2048);
CurveE2Num[i + 256] = XtfConvert.ToInt16(ByteArray, i * 8 + 4 + 2048);
CurveE3Num[i + 256] = XtfConvert.ToInt16(ByteArray, i * 8 + 6 + 2048);
}
//<2F><>6
memset(ByteArray,0, 4096);
for ( i = 0; i < 256; i++)
{
CurveStartDepth[i] = XtfConvert.ToFloat(ByteArray, i * 8);
CurveStartDepth[i + 256] = XtfConvert.ToFloat(ByteArray, i * 8 + 4);
}
for ( i = 0; i < 256; i++)
{
CurveEndDepth[i] = XtfConvert.ToFloat(ByteArray, i * 8 + 2048);
CurveEndDepth[i + 256] = XtfConvert.ToFloat(ByteArray, i * 8 + 4 + 2048);
}
//<2F><>7
memset(ByteArray,0, 4096);
for ( i = 0; i < 256; i++)
{
CurveDepthLevel[i] = XtfConvert.ToFloat(ByteArray, i * 8);
CurveDepthLevel[i + 256] = XtfConvert.ToFloat(ByteArray, i * 8 + 4);
}
for ( i = 0; i < 256; i++)
{
CurveType[i] = XtfConvert.ToByte(ByteArray, i * 8 + 2048);
CurveDataType[i] = XtfConvert.ToByte(ByteArray, i * 8 + 1 + 2048);
CurveHorz[i] = XtfConvert.ToByte(ByteArray, i * 8 + 2 + 2048);
CurveVert[i] = XtfConvert.ToByte(ByteArray, i * 8 + 3 + 2048);
CurveType[i + 256] = XtfConvert.ToByte(ByteArray, i * 8 + 4 + 2048);
CurveDataType[i + 256] = XtfConvert.ToByte(ByteArray, i * 8 + 5 + 2048);
CurveHorz[i + 256] = XtfConvert.ToByte(ByteArray, i * 8 + 6 + 2048);
CurveVert[i + 256] = XtfConvert.ToByte(ByteArray, i * 8 + 7 + 2048);
}
//<2F><>8
memset(ByteArray,0, 4096);
WSI = XtfConvert.ToCString(ByteArray, 0, 8);
WellName = XtfConvert.ToCString(ByteArray, 8, 80);
OilFieldName= XtfConvert.ToCString(ByteArray, 88, 80);
CompanyName = XtfConvert.ToCString(ByteArray, 168, 80);
CountryName = XtfConvert.ToCString(ByteArray, 248, 32);
// StatesName = XtfConvert.ToCString(ByteArray, 328, 32);
WellLocate = XtfConvert.ToCString(ByteArray, 336, 40);
JingDu = XtfConvert.ToFloat(ByteArray, 1024);
WeiDu = XtfConvert.ToFloat(ByteArray, 1028);
HaiBa = XtfConvert.ToFloat(ByteArray, 1040);
SystemForM = XtfConvert.ToInt16(ByteArray, 2060);
//ɨ<><C9A8><EFBFBD><EFBFBD>9
// CreateDate = 0; //<2F>⾮ʱ<E2BEAE><CAB1>
// CreateTime = 0;
//whp change 2012.11.6
CreateDate=GetCurrentTime();
CreateTime = GetCurrentTime();
openFlag=false;
};
int Init()
{
int i=0;
byte aa[32768] ={0};
for( i=0;i<32;i++)
HeadRecord[i] = 0;
for ( i = 1; i <= 8; i++)
HeadRecord[i*4-1] = (byte)i;
WSI = "WSI";
SystemCode = 5; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //SUN
Version1 = 0x06;//4;
Version2 = 0x00;//E;
SystemForM = 0; //<2F><><EFBFBD><EFBFBD>
SystemDepthUnit = "meters";
AIFVersion = "";
FileExtation = ".xtf";
CurveNum = 0;
MaxCurveNum = 512;
BlockNum = 8;
XtfConvert.SystemCode = SystemCode;
for ( i = 0; i < 512; i++)
{
CurveName[i] = "";
CurveStartPos[i] = 0;
CurveSampleNum[i] = 0;
CurveDimNum[i] = 0;
CurveE1Num[i] = 0;
CurveE2Num[i] = 0;
CurveE3Num[i] = 0;
CurveStartDepth[i] = 0;
CurveEndDepth[i] = 0;
CurveDepthLevel[i] = 0;
CurveType[i] = 0;
CurveDataType[i] = 0;
CurveHorz[i] = 0;
CurveVert[i] = 0;
CurveUnit[i] = "none";
SystemForM = 0;
CurveFlag[i]=0;
byte ccc[4096]={0};
CurveHeadGet(i,ccc);
memset(curveInfo[i].TranFillArea,0,24);
memset(curveInfo[i].RecvFillArea ,0,24);
}
return 0;
};
//method
int OpenDataFile(QString dataFileName, int nOpenFlags)
{
// srcFileFlag //nOpenFlags =0,Read,=1 Write,=2,readwrite;
Init();
if (openFlag)
{
dataFile->close();
openFlag = false;
}
//////////////////////////////////////////////////////////////////////////
///ע<>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ٴδ򿪱<CEB4><F2BFAAB1><EFBFBD><EFBFBD>ļ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>Ѿ<EFBFBD><D1BE>رյ<D8B1><D5B5><EFBFBD><ECB3A3>ʾ
//////////////////////////////////////////////////////////////////////////
{
dataFile=new QFile(dataFileName);
fileOptions = nOpenFlags;
if (fileOptions == 0)
{
dataFile->open(QIODevice::ReadOnly);
}
else if (fileOptions == 1)
{
dataFile->open(QIODevice::WriteOnly);
}
else if (fileOptions == 2)
{
dataFile->open(QIODevice::ReadWrite);
}
openFlag = true;
}
return 1;
};
int FileHead_Read()
{
int i=0;
int FileHead = 32*1024;
byte ByteArray[32768] = {0};
dataFile->seek(0);
//<2F><>1
dataFile->read((char*)&ByteArray[0], 4096);
// HeadRecord = XtfConvert.ToCString(ByteArray, 0, 32);
FileExtation = XtfConvert.ToCString(ByteArray, 760, 4);
FileExtation.MakeLower();
FilePath = XtfConvert.ToCString(ByteArray, 764, 80);
SystemDepthUnit = XtfConvert.ToCString(ByteArray, 844, 8);
AIFVersion = XtfConvert.ToCString(ByteArray, 852, 8);
SystemCode = XtfConvert.ToByte(ByteArray, 948); //5=<3D><><EFBFBD><EFBFBD>վ<EFBFBD><D5BE>1=PC<50><43><EFBFBD><EFBFBD>
XtfConvert.SystemCode = SystemCode;
Version1 = XtfConvert.ToByte(ByteArray, 950);
Version2 = XtfConvert.ToByte(ByteArray, 951);
CurveNum = XtfConvert.ToInt32(ByteArray, 996);
MaxCurveNum = XtfConvert.ToInt32(ByteArray, 1000);
FileStartDepth = XtfConvert.ToFloat(ByteArray, 2048);
FileEndDepth = XtfConvert.ToFloat(ByteArray, 2052);
FileDepthLevel = XtfConvert.ToFloat(ByteArray, 2056);
//<2F><>2
dataFile->read((char*)&ByteArray[0], 4096);
BitmapHead = ByteArray[0];
memcpy(BitmapRecords,ByteArray+1,4071);
memcpy(BitmapValues,ByteArray+4072,4);
//<2F><>3
dataFile->read((char*)&ByteArray[0], 4096);
for ( i = 0; i < 512; i++)
{
CurveName[i] = XtfConvert.ToCString(ByteArray, i * 8, 8);
}
//<2F><>4
dataFile->read((char*)&ByteArray[0], 4096);
for ( i = 0; i < 256; i++)
{
CurveStartPos[i] = XtfConvert.ToInt32(ByteArray, i * 8);
CurveStartPos[i+256] = XtfConvert.ToInt32(ByteArray, i * 8+4);
}
for ( i = 0; i < 256; i++)
{
CurveSampleNum[i] = XtfConvert.ToInt32(ByteArray, i * 8 + 2048);
CurveSampleNum[i + 256] = XtfConvert.ToInt32(ByteArray, i * 8 + 4 + 2048);
}
//<2F><>5
dataFile->read((char*)&ByteArray[0], 4096);
for ( i = 0; i < 256; i++)
{
CurveDimNum[i] = XtfConvert.ToInt16(ByteArray, i * 8);
CurveE1Num[i ] = XtfConvert.ToInt16(ByteArray, i * 8 + 2);
CurveDimNum[i + 256] = XtfConvert.ToInt16(ByteArray, i * 8 + 4);
CurveE1Num[i + 256] = XtfConvert.ToInt16(ByteArray, i * 8 + 6);
}
for ( i = 0; i < 256; i++)
{
CurveE2Num[i] = XtfConvert.ToInt16(ByteArray, i * 8 + 2048);
CurveE3Num[i] = XtfConvert.ToInt16(ByteArray, i * 8 + 2 + 2048);
CurveE2Num[i + 256] = XtfConvert.ToInt16(ByteArray, i * 8 + 4 + 2048);
CurveE3Num[i + 256] = XtfConvert.ToInt16(ByteArray, i * 8 + 6 + 2048);
}
//<2F><>6
dataFile->read((char*)&ByteArray[0], 4096);
for ( i = 0; i < 256; i++)
{
CurveStartDepth[i] = XtfConvert.ToFloat(ByteArray, i * 8);
CurveStartDepth[i + 256] = XtfConvert.ToFloat(ByteArray, i * 8 + 4);
}
for ( i = 0; i < 256; i++)
{
CurveEndDepth[i] = XtfConvert.ToFloat(ByteArray, i * 8 + 2048);
CurveEndDepth[i + 256] = XtfConvert.ToFloat(ByteArray, i * 8 + 4 + 2048);
}
//<2F><>7
dataFile->read((char*)&ByteArray[0], 4096);
for ( i = 0; i < 256; i++)
{
CurveDepthLevel[i] = XtfConvert.ToFloat(ByteArray, i * 8);
CurveDepthLevel[i + 256] = XtfConvert.ToFloat(ByteArray, i * 8 + 4);
}
for ( i = 0; i < 256; i++)
{
CurveType[i] = XtfConvert.ToByte(ByteArray, i * 8 + 2048);
CurveDataType[i] = XtfConvert.ToByte(ByteArray, i * 8 + 1 + 2048);
CurveHorz[i] = XtfConvert.ToByte(ByteArray, i * 8 + 2 + 2048);
CurveVert[i] = XtfConvert.ToByte(ByteArray, i * 8 + 3 + 2048);
CurveType[i + 256] = XtfConvert.ToByte(ByteArray, i * 8 + 4 + 2048);
CurveDataType[i + 256] = XtfConvert.ToByte(ByteArray, i * 8 + 5 + 2048);
CurveHorz[i + 256] = XtfConvert.ToByte(ByteArray, i * 8 + 6 + 2048);
CurveVert[i + 256] = XtfConvert.ToByte(ByteArray, i * 8 + 7 + 2048);
}
//<2F><>8
dataFile->read((char*)&ByteArray[0], 4096);
WSI = XtfConvert.ToCString(ByteArray, 0, 8);
WellName = XtfConvert.ToCString(ByteArray, 8, 80);
OilFieldName= XtfConvert.ToCString(ByteArray, 88, 80);
CompanyName = XtfConvert.ToCString(ByteArray, 168, 80);
CountryName = XtfConvert.ToCString(ByteArray, 248, 32);
// StatesName = XtfConvert.ToCString(ByteArray, 328, 32);
WellLocate = XtfConvert.ToCString(ByteArray, 336, 40);
JingDu = XtfConvert.ToFloat(ByteArray, 1024);
WeiDu = XtfConvert.ToFloat(ByteArray, 1028);
HaiBa = XtfConvert.ToFloat(ByteArray, 1040);
SystemForM = XtfConvert.ToInt16(ByteArray, 2060);
//ɨ<><C9A8><EFBFBD><EFBFBD>9
for ( i = 0; i < CurveNum; i++)
{
long pos = (CurveStartPos[i] - 1) * 4096;
dataFile->seek(pos);
dataFile->read((char*)&ByteArray[0], 4096);
CurveHeadGet(i,ByteArray); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
CurveName[i] =curveInfo[i].CurveName;
CurveUnit[i] = curveInfo[i].CurveUnit;
CurveEndPos[i] = curveInfo[i].EndPosition;
}
CreateDate = curveInfo[0].CreateDate; //<2F>⾮ʱ<E2BEAE><CAB1>
CreateTime = curveInfo[0].CreateTime;
if (FileExtation != ".xtf" || MaxCurveNum != 512) // || UnixToPc.ToCString(head1.ExtendFileType) != ".XTF")
{
// MessageBox(" <20><><EFBFBD><EFBFBD>EPLIPS5700 XTF<54><46>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>!");
return 0;
}
dataFile->seek(0);
return FileHead;
};
int FileHead_Write()
{
int i=0;
int FileHead = 32 * 1024;
Version1 = 0x06;
Version2 = 0x00;
// Version1 = 0x06;
// Version2 = 0x00;
SystemCode = 5; //5,new,<2C><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>վģʽ
XtfConvert.SystemCode = SystemCode; //??????????????????????
////////////////////////////////////
byte ByteArray[32768] = {0};
dataFile->seek(0);
//<2F><>1
// HeadRecord="10002000300040005000600070008000";
for ( i = 0; i < 32; i++) ByteArray[i] = HeadRecord[i];
// XtfConvert.ToBytes(HeadRecord,ByteArray, 0,32);
FileExtation.MakeLower();
XtfConvert.ToBytes(FileExtation, ByteArray, 760, 4);
FilePath="/data1/data.xtf";
XtfConvert.ToBytes(FilePath, ByteArray, 764, 80);
XtfConvert.ToBytes(SystemDepthUnit, ByteArray, 844, 8);
XtfConvert.ToBytes(AIFVersion, ByteArray, 852, 8);
//whp add 2012.11.6 for SystemDepthUnit<69><74>AIFVersion<6F><6E><EFBFBD><EFBFBD>8<EFBFBD><38><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ÿո<C3BF><D5B8><EFBFBD><EFBFBD><EFBFBD>
for ( i = 0; i < 16; i++)
{
if(ByteArray[844+i]==0)
{
ByteArray[844+i]=32;
}
}
XtfConvert.ToBytes(SystemCode, ByteArray, 948);
XtfConvert.ToBytes(Version1, ByteArray, 950);
XtfConvert.ToBytes(Version2, ByteArray, 952);
XtfConvert.ToBytes(CurveNum, ByteArray, 996);
XtfConvert.ToBytes(MaxCurveNum, ByteArray, 1000);
XtfConvert.ToBytes(FileStartDepth, ByteArray, 2048);
XtfConvert.ToBytes(FileEndDepth, ByteArray, 2052);
XtfConvert.ToBytes(FileDepthLevel, ByteArray, 2056);
//float temp_float = 0.00508f;
//XtfConvert.ToBytes(temp_float, ByteArray, 2056);
ByteArray[4094] = 0x0E;
ByteArray[4095] = 0xE0;
dataFile->write((char*)&ByteArray[0], 4096);
//<2F><>2
memset(ByteArray,0,4096); //<2F><>0<EFBFBD><30>
int xx = BlockNum / 8;
int yy = BlockNum % 8;
for( i=0;i<xx;i++)ByteArray[i]=255;
ByteArray[xx]=0;
byte tt[8]={0x80,0x40,0x20,0x10,8,4,2,1};
for( i=0;i<yy;i++)
{
ByteArray[xx] |= tt[i];
}
xx = 0;
XtfConvert.ToBytes(xx, ByteArray, 4072); //<2F><><EFBFBD><EFBFBD>ֵ
xx = 1;
XtfConvert.ToBytes(xx, ByteArray, 4076); //<2F><>һ<EFBFBD><D2BB>
xx = 32576;
XtfConvert.ToBytes(xx, ByteArray, 4080); //<2F>ڶ<EFBFBD><DAB6><EFBFBD>
xx = 0;
XtfConvert.ToBytes(xx, ByteArray, 4084); //ǰһ<C7B0><D2BB>
xx = 2;
XtfConvert.ToBytes(xx, ByteArray, 4088); //<2F><>ǰ<EFBFBD><C7B0>¼<EFBFBD><C2BC>
xx = 0;
XtfConvert.ToBytes(xx, ByteArray, 4092); //<2F><>һ<EFBFBD><D2BB>
dataFile->write((char*)&ByteArray[0], 4096);
//<2F><>3
memset(ByteArray,0,4096); //<2F><>0<EFBFBD><30>
for ( i = 0; i < 512; i++)
{
// CurveName[i] = HzClass.Convert(CurveName[i]); //ȥ<><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
XtfConvert.ToBytes(CurveName[i],ByteArray,i * 8, 8);
}
//whp add 2012.11.6 for <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>8<EFBFBD><38><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ÿո<C3BF><D5B8><EFBFBD><EFBFBD><EFBFBD>
for ( i = 0; i < 4096; i++)
{
if(ByteArray[i]==0)
{
ByteArray[i]=32;
}
}
dataFile->write((char*)&ByteArray[0], 4096);
//<2F><>4
memset(ByteArray, 0,4096); //<2F><>0<EFBFBD><30>
for ( i = 0; i < 256; i++)
{
XtfConvert.ToBytes(CurveStartPos[i], ByteArray, i * 8);
XtfConvert.ToBytes(CurveStartPos[i+256],ByteArray,i * 8+4);
}
for ( i = 0; i < 256; i++)
{
XtfConvert.ToBytes(CurveSampleNum[i],ByteArray,i * 8 + 2048);
XtfConvert.ToBytes(CurveSampleNum[i+256],ByteArray,i * 8 + 4 + 2048);
}
dataFile->write((char*)&ByteArray[0], 4096);
//<2F><>5
memset(ByteArray,0, 4096); //<2F><>0<EFBFBD><30>
for ( i = 0; i < 256; i++)
{
XtfConvert.ToBytes(CurveDimNum[i], ByteArray, i * 8);
XtfConvert.ToBytes(CurveE1Num[i], ByteArray, i * 8 + 2);
XtfConvert.ToBytes(CurveDimNum[i+256], ByteArray, i * 8+4);
XtfConvert.ToBytes(CurveE1Num[i+256], ByteArray, i * 8 + 6);
}
for ( i = 0; i < 256; i++)
{
XtfConvert.ToBytes(CurveE2Num[i], ByteArray, i * 8 + 2048);
XtfConvert.ToBytes(CurveE3Num[i], ByteArray, i * 8 + 2 + 2048);
XtfConvert.ToBytes(CurveE2Num[i + 256], ByteArray, i * 8 + 4 + 2048);
XtfConvert.ToBytes(CurveE3Num[i + 256], ByteArray, i * 8 + 6 + 2048);
}
dataFile->write((char*)&ByteArray[0], 4096);
//<2F><>6
memset(ByteArray,0,4096); //<2F><>0<EFBFBD><30>
for ( i = 0; i < 256; i++)
{
XtfConvert.ToBytes(CurveStartDepth[i], ByteArray, i * 8);
XtfConvert.ToBytes(CurveStartDepth[i + 256], ByteArray, i * 8 + 4);
}
for ( i = 0; i < 256; i++)
{
XtfConvert.ToBytes(CurveEndDepth[i], ByteArray, i * 8 + 2048);
XtfConvert.ToBytes(CurveEndDepth[i + 256], ByteArray, i * 8 + 4 + 2048);
}
dataFile->write((char*)&ByteArray[0], 4096);
//<2F><>7
memset(ByteArray,0,4096); //<2F><>0<EFBFBD><30>
for ( i = 0; i < 256; i++)
{
XtfConvert.ToBytes(CurveDepthLevel[i], ByteArray, i * 8);
XtfConvert.ToBytes(CurveDepthLevel[i+256], ByteArray, i * 8+4);
}
for ( i = 0; i < 256; i++)
{
XtfConvert.ToBytes(CurveType[i], ByteArray, i * 8 + 2048);
XtfConvert.ToBytes(CurveDataType[i], ByteArray, i * 8 + 1 + 2048);
XtfConvert.ToBytes(CurveHorz[i], ByteArray, i * 8 + 2 + 2048);
XtfConvert.ToBytes(CurveVert[i], ByteArray, i * 8 + 3 + 2048);
XtfConvert.ToBytes(CurveType[i + 256], ByteArray, i * 8 + 4 + 2048);
XtfConvert.ToBytes(CurveDataType[i + 256], ByteArray, i * 8 + 5 + 2048);
XtfConvert.ToBytes(CurveHorz[i + 256], ByteArray, i * 8 + 6 + 2048);
XtfConvert.ToBytes(CurveVert[i + 256], ByteArray, i * 8 + 7 + 2048);
}
dataFile->write((char*)&ByteArray[0], 4096);
//<2F><>8
memset(ByteArray,0,4096); //<2F><>0<EFBFBD><30>
for ( i = 0; i < 1024; i++) ByteArray[i] = 0x20;
WellName = XtfConvert.GetLetter(WellName);
OilFieldName = XtfConvert.GetLetter(OilFieldName);
CompanyName = XtfConvert.GetLetter(CompanyName);
CountryName = XtfConvert.GetLetter(CountryName);
WellLocate = XtfConvert.GetLetter(WellLocate);
XtfConvert.ToBytes(WSI, ByteArray, 0 ,8); //<2F><>Чͼͷ
XtfConvert.ToBytes(WellName, ByteArray, 8, 80); //<2F><><EFBFBD><EFBFBD>
XtfConvert.ToBytes(OilFieldName, ByteArray, 88, 80); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
XtfConvert.ToBytes(CompanyName, ByteArray, 168, 80); //<2F><>˾<EFBFBD><CBBE>
XtfConvert.ToBytes(CountryName, ByteArray, 248, 32); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
XtfConvert.ToBytes(WellLocate, ByteArray, 336, 40); //<2F><>λ
XtfConvert.ToBytes(JingDu, ByteArray, 336); //<2F><><EFBFBD><EFBFBD>
XtfConvert.ToBytes(WeiDu, ByteArray, 1028); //ά<><CEAC>
XtfConvert.ToBytes(HaiBa, ByteArray, 1040); //<2F><><EFBFBD><EFBFBD>
XtfConvert.ToBytes(SystemForM, ByteArray,2060); //ϵͳ<CFB5><CDB3>
dataFile->write((char*)&ByteArray[0], 4096);
dataFile->flush();
return FileHead;
};
int CloseDataFile()
{
if (openFlag)
{
dataFile->close();
openFlag = false;
}
return 0;
};
int CurveHeadGet(int CurveNo, byte ByteArray[])
{
curveInfo[CurveNo].CurveName = XtfConvert.ToCString(ByteArray, 0, 8); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
curveInfo[CurveNo].CurveUnit = XtfConvert.ToCString(ByteArray, 8, 8); //<2F><><EFBFBD>ߵ<EFBFBD>λ
curveInfo[CurveNo].CurveRemark = XtfConvert.ToCString(ByteArray, 16, 8); //<2F><><EFBFBD>߱<EFBFBD>ע
curveInfo[CurveNo].ServiceCompany = XtfConvert.ToCString(ByteArray, 48, 8); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˾
curveInfo[CurveNo].ToolType = XtfConvert.ToCString(ByteArray, 48, 8); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
curveInfo[CurveNo].CurveClass = XtfConvert.ToCString(ByteArray, 56, 8); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
curveInfo[CurveNo].DepthUnit = XtfConvert.ToCString(ByteArray, 64, 8); //<2F><><EFBFBD>ȵ<EFBFBD>λ
curveInfo[CurveNo].WaveTimeUnit = XtfConvert.ToCString(ByteArray, 72, 8); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
//???
//???
curveInfo[CurveNo].LogDirection = XtfConvert.ToCString(ByteArray, 120, 8); //<2F><EFBFBD><E2BEAE><EFBFBD><EFBFBD>
curveInfo[CurveNo].AIFName = XtfConvert.ToCString(ByteArray, 128, 8); //AIF<49><46>
curveInfo[CurveNo].OCTName = XtfConvert.ToCString(ByteArray, 152, 8); //OCT<43><54>
curveInfo[CurveNo].ToolName = XtfConvert.ToCString(ByteArray, 152, 8); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
curveInfo[CurveNo].LisName = XtfConvert.ToCString(ByteArray, 224, 8); //LIS<49><53>
curveInfo[CurveNo].StartDepth = XtfConvert.ToFloat(ByteArray, 1024); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
curveInfo[CurveNo].EndDepth = XtfConvert.ToFloat(ByteArray, 1028); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
curveInfo[CurveNo].DepthLevel = XtfConvert.ToFloat(ByteArray, 1032); //<2F><><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
curveInfo[CurveNo].MinValue = XtfConvert.ToFloat(ByteArray, 1036); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сֵ
curveInfo[CurveNo].MaxValue = XtfConvert.ToFloat(ByteArray, 1040); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
curveInfo[CurveNo].AvgValue = XtfConvert.ToFloat(ByteArray, 1044); //<2F><><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>ֵ
curveInfo[CurveNo].TimeValuesLevel = XtfConvert.ToFloat(ByteArray, 1048); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
curveInfo[CurveNo].DACTimeOffset = XtfConvert.ToFloat(ByteArray, 1052); //DAC<41><43>ʼʱ<CABC><CAB1>
curveInfo[CurveNo].StaticMeasureDepth = XtfConvert.ToFloat(ByteArray, 1056); //<2F><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
curveInfo[CurveNo].Step = XtfConvert.ToFloat(ByteArray, 1068); //<2F><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
curveInfo[CurveNo].Window = XtfConvert.ToFloat(ByteArray, 1072); //<2F><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
curveInfo[CurveNo].CBILAngle = XtfConvert.ToFloat(ByteArray, 1076); //<2F><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
curveInfo[CurveNo].TR_Distance = XtfConvert.ToFloat(ByteArray, 1080); //<2F><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
curveInfo[CurveNo].RR_Distance = XtfConvert.ToFloat(ByteArray, 1084); //<2F><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
curveInfo[CurveNo].OrinToSurface = XtfConvert.ToFloat(ByteArray, 1088); //<2F><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
curveInfo[CurveNo].DoubleStartDepth = XtfConvert.ToDouble(ByteArray, 1544); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].DoubleEndDepth = XtfConvert.ToDouble(ByteArray, 1552); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].DoubleDepthLevel = XtfConvert.ToDouble(ByteArray, 1560); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].CreateDate = XtfConvert.ToInt32(ByteArray, 2048); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].CreateTime = XtfConvert.ToInt32(ByteArray, 2052); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].AccessDate = XtfConvert.ToInt32(ByteArray, 2056); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].AccessTime = XtfConvert.ToInt32(ByteArray, 2060); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].AccessTime = XtfConvert.ToInt32(ByteArray, 2060); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].CurveHeadRecordNum = XtfConvert.ToInt32(ByteArray, 2064); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].EndPosition = XtfConvert.ToInt32(ByteArray, 2068); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].SamplesNum = XtfConvert.ToInt32(ByteArray, 2076); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].CurveIndex = XtfConvert.ToInt16(ByteArray, 2564); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].CurveType = XtfConvert.ToInt16(ByteArray, 2566); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].CurveDataType = XtfConvert.ToInt16(ByteArray, 2568); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].CurveVert = XtfConvert.ToInt16(ByteArray, 2570); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].CurveHorz = XtfConvert.ToInt16(ByteArray, 2572); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].CurveDimNum = XtfConvert.ToInt16(ByteArray, 2574); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].CurveE1Num = XtfConvert.ToInt16(ByteArray, 2576); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].CurveE2Num = XtfConvert.ToInt16(ByteArray, 2578); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].CurveE3Num = XtfConvert.ToInt16(ByteArray, 2580); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].DataTypeFlag = XtfConvert.ToInt16(ByteArray, 2592); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].HaveNegFlag = XtfConvert.ToInt16(ByteArray, 2594); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].DataBitsNum = XtfConvert.ToInt16(ByteArray, 2596); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].FixedWaveStartFlag = XtfConvert.ToInt16(ByteArray, 2606); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].FixedWaveGain = XtfConvert.ToInt16(ByteArray, 2608); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].WaveGainExp = XtfConvert.ToInt16(ByteArray, 2610); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].GainMethod = XtfConvert.ToInt16(ByteArray, 2612); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].GainApplyFlag = XtfConvert.ToInt16(ByteArray, 2614); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].WaveLength = XtfConvert.ToInt16(ByteArray, 2616); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].ToolNo = XtfConvert.ToInt16(ByteArray, 2618); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].CurveSerialNo = XtfConvert.ToInt16(ByteArray, 2620); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
for (int i = 0; i < 24; i++)
{
curveInfo[CurveNo].TranFillArea[i] = XtfConvert.ToByte(ByteArray, 3072+i); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
curveInfo[CurveNo].RecvFillArea[i] = XtfConvert.ToByte(ByteArray, 3096+i); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
curveInfo[CurveNo].SystemCode = XtfConvert.ToByte(ByteArray, 4095); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
/* if (curveInfo[CurveNo].CurveName.Contains("TX"))
{
byte b1=ByteArray[0x668];
byte b2 = ByteArray[0x669];
byte b3 = ByteArray[0x66A];
byte c1 = ByteArray[0xA00];
byte c2 = ByteArray[0xA01];
byte c3 = ByteArray[0xA02];
byte c4 = ByteArray[0xA03];
byte d1 = ByteArray[0xD55];
byte d2 = ByteArray[0xD56];
}*/
return CurveNo;
};
int CurveHeadSet(int CurveNo, byte ByteArray[])
{
CString temp_str = "";
int temp_int = 0;
long temp_long = 0;
float temp_float = 0;
short temp_short = 0;
double temp_double = 0;
for (int i = 0; i < 1024; i++) ByteArray[i] = 0x20;
XtfConvert.ToBytes(CurveName[CurveNo], ByteArray, 0,8); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
curveInfo[CurveNo].CurveName = CurveName[CurveNo];
curveInfo[CurveNo].CurveUnit = CurveUnit[CurveNo];
//<2F><>λ<EFBFBD>
/* if (CurveUnit[CurveNo] == "") CurveUnit[CurveNo] = "raw";
if (CurveUnit[CurveNo].Contains("<22><>")) CurveUnit[CurveNo] = CurveUnit[CurveNo].Replace("<22><>", "ohm");
if (CurveUnit[CurveNo].Contains("<22><>")) CurveUnit[CurveNo] = CurveUnit[CurveNo].Replace("<22><>", "degC");
if (CurveUnit[CurveNo].Contains("^")) CurveUnit[CurveNo] = CurveUnit[CurveNo].Replace("^", "");
if (CurveUnit[CurveNo].Contains("<22><>")) CurveUnit[CurveNo] = CurveUnit[CurveNo].Replace("<22><>", "deg");
if (CurveUnit[CurveNo].Contains("<22><>")) CurveUnit[CurveNo] = CurveUnit[CurveNo].Replace("<22><>", "deg");
if (CurveUnit[CurveNo].Contains("%")) CurveUnit[CurveNo] = CurveUnit[CurveNo].Replace("%", "pu");
if (CurveUnit[CurveNo].Contains("mS/m")) CurveUnit[CurveNo] = CurveUnit[CurveNo].Replace("mS/m", "mmho/m");
if (CurveUnit[CurveNo].Contains("g/cm^3")) CurveUnit[CurveNo] = CurveUnit[CurveNo].Replace("g/cm^3", "g/cm3");
if (CurveUnit[CurveNo].Contains("CPS")) CurveUnit[CurveNo] = CurveUnit[CurveNo].Replace("CPS", "cts/s");
if (curveInfo[CurveNo].CurveName == "GR") CurveUnit[CurveNo] = "gAPI";
curveInfo[CurveNo].CurveUnit = CurveUnit[CurveNo];
if (CurveFlag[CurveNo] > 1)
{
if (curveInfo[CurveNo].CurveName.Contains("WV") || (curveInfo[CurveNo].CurveName.Contains("GN")) || (curveInfo[CurveNo].CurveName.Contains("ST")))
{
if (curveInfo[CurveNo].CurveName.Contains("TF"))
{
curveInfo[CurveNo].OrinToSurface = -5.334f;
curveInfo[CurveNo].TR_Distance = 3.6576f;
curveInfo[CurveNo].RR_Distance = 0.1524f;
curveInfo[CurveNo].StartTimeUnit = "us";
curveInfo[CurveNo].WaveTimeUnit = "us";
// curveInfo[CurveNo].TimeValuesLevel = 12;
curveInfo[CurveNo].FixedWaveStartFlag = 1;
curveInfo[CurveNo].FixedWaveGain = 1;
for (int i = 0; i < 8; i++)
{
curveInfo[CurveNo].TranFillArea[i] = (byte)0x01;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
curveInfo[CurveNo].RecvFillArea[i] = (byte)(0x01 + i);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
if (curveInfo[CurveNo].CurveName.Contains("TN"))
{
curveInfo[CurveNo].OrinToSurface = -5.7912f;
curveInfo[CurveNo].TR_Distance = 2.5908f;
curveInfo[CurveNo].RR_Distance = 0.1524f;
curveInfo[CurveNo].StartTimeUnit = "us";
curveInfo[CurveNo].WaveTimeUnit = "us";
// curveInfo[CurveNo].TimeValuesLevel = 8;
curveInfo[CurveNo].FixedWaveStartFlag = 1;
curveInfo[CurveNo].FixedWaveGain = 1;
for (int i = 0; i < 4; i++)
{
curveInfo[CurveNo].TranFillArea[i] = (byte)0x02;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
curveInfo[CurveNo].RecvFillArea[i] = (byte)(0x01 + i);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
if (curveInfo[CurveNo].CurveName.Contains("TXX") || curveInfo[CurveNo].CurveName.Contains("TXY"))
{
curveInfo[CurveNo].OrinToSurface = -5.6388f;
curveInfo[CurveNo].TR_Distance = 3.2004f;
curveInfo[CurveNo].RR_Distance = 0.1524f;
curveInfo[CurveNo].StartTimeUnit = "us";
curveInfo[CurveNo].WaveTimeUnit = "us";
// curveInfo[CurveNo].TimeValuesLevel = 36;
curveInfo[CurveNo].FixedWaveStartFlag = 1;
curveInfo[CurveNo].FixedWaveGain = 1;
for (int i = 0; i < 8; i++)
{
curveInfo[CurveNo].TranFillArea[i] = (byte)0x03;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
curveInfo[CurveNo].RecvFillArea[i] = (byte)(0x01 + i);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
if (curveInfo[CurveNo].CurveName.Contains("TYX") || curveInfo[CurveNo].CurveName.Contains("TYY"))
{
curveInfo[CurveNo].OrinToSurface = -5.6388f;
curveInfo[CurveNo].TR_Distance = 3.2004f;
curveInfo[CurveNo].RR_Distance = 0.1524f;
curveInfo[CurveNo].StartTimeUnit = "us";
curveInfo[CurveNo].WaveTimeUnit = "us";
// curveInfo[CurveNo].TimeValuesLevel = 36;
curveInfo[CurveNo].FixedWaveStartFlag = 1;
curveInfo[CurveNo].FixedWaveGain = 1;
for (int i = 0; i < 8; i++)
{
curveInfo[CurveNo].TranFillArea[i] = (byte)0x04;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
curveInfo[CurveNo].RecvFillArea[i] = (byte)(0x01 + i);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
}
}*/
XtfConvert.ToBytes(CurveUnit[CurveNo], ByteArray, 8,8);
temp_str = "j727e03.aff";// CurveName[CurveNo];
XtfConvert.ToBytes(temp_str, ByteArray, 16, 24); //<2F><><EFBFBD>߱<EFBFBD>ע
temp_str = "ATLAS";
XtfConvert.ToBytes(temp_str, ByteArray, 40, 8); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
temp_str = " ";
XtfConvert.ToBytes(temp_str, ByteArray, 48,8); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
temp_str = "AFF";
XtfConvert.ToBytes(temp_str, ByteArray, 56,8); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
temp_str = SystemDepthUnit;
XtfConvert.ToBytes(temp_str, ByteArray, 64, 8);
temp_str = "up";
XtfConvert.ToBytes(temp_str, ByteArray, 120, 8); //<2F><EFBFBD><E2BEAE><EFBFBD><EFBFBD>
XtfConvert.ToBytes(CurveName[CurveNo], ByteArray, 128, 4); //AIF
temp_str = "j727e";
XtfConvert.ToBytes(temp_str, ByteArray, 152, 8); //OCT
temp_str = "1515MA";
XtfConvert.ToBytes(temp_str, ByteArray, 160, 48); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
XtfConvert.ToBytes(CurveName[CurveNo], ByteArray, 224, 4); //LIS
temp_str = " aff2xtf Rev 1.0";
XtfConvert.ToBytes(temp_str, ByteArray, 228, 796); //no use
XtfConvert.ToBytes(CurveStartDepth[CurveNo], ByteArray, 1024); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>float
XtfConvert.ToBytes(CurveEndDepth[CurveNo], ByteArray, 1028); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>float
XtfConvert.ToBytes(CurveDepthLevel[CurveNo], ByteArray, 1032); //<2F><><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>float
temp_float = -999999.;//0;
XtfConvert.ToBytes(temp_float, ByteArray, 1036); //min
temp_float = 999999.;//0;
XtfConvert.ToBytes(temp_float, ByteArray, 1040); //max
temp_float = 0;
XtfConvert.ToBytes(temp_float, ByteArray, 1044); //avg
temp_double = 1000000;
XtfConvert.ToBytes(temp_double, ByteArray, 1536); //start depth, double
temp_double = CurveStartDepth[CurveNo];
XtfConvert.ToBytes(temp_double, ByteArray, 1544); //start depth, double
temp_double = CurveEndDepth[CurveNo];
XtfConvert.ToBytes(temp_double, ByteArray, 1552); //end depth,double
temp_double = CurveDepthLevel[CurveNo];
XtfConvert.ToBytes(temp_double, ByteArray, 1560); //depth level,double
XtfConvert.ToBytes(CreateDate, ByteArray, 2048); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
XtfConvert.ToBytes(CreateTime, ByteArray, 2052); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
XtfConvert.ToBytes(CreateDate, ByteArray, 2056); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
XtfConvert.ToBytes(CreateTime, ByteArray, 2060); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
temp_int = 1;
XtfConvert.ToBytes(temp_int, ByteArray, 2064); //ͷ<><CDB7>¼<EFBFBD><C2BC>
temp_int = CurveEndPos[CurveNo];
XtfConvert.ToBytes(temp_int, ByteArray, 2068); //<2F><><EFBFBD>߽<EFBFBD><DFBD><EFBFBD><EFBFBD><EFBFBD>¼λ<C2BC><CEBB>
// temp_int = 0;
// XtfConvert.ToBytes(temp_int, ByteArray, 2072); //
temp_float = -9999.0f;
XtfConvert.ToBytes(temp_float, ByteArray, 2072); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼֵ
temp_int = CurveSampleNum[CurveNo];
XtfConvert.ToBytes(temp_int, ByteArray, 2076); //<2F><><EFBFBD>߲<EFBFBD><DFB2><EFBFBD><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD>
// temp_str = " ";
// XtfConvert.ToBytes(temp_str, ByteArray, 2088, 472); //no use
temp_short = (short)(CurveNo+1);
XtfConvert.ToBytes(temp_short, ByteArray, 2564); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
temp_short = (short)CurveType[CurveNo];
XtfConvert.ToBytes(temp_short, ByteArray, 2566); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
temp_short = (short)CurveDataType[CurveNo];
XtfConvert.ToBytes(temp_short, ByteArray, 2568); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
temp_short = (short)CurveVert[CurveNo];
XtfConvert.ToBytes(temp_short, ByteArray, 2570); //<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>
temp_short = (short)CurveHorz[CurveNo];
XtfConvert.ToBytes(temp_short, ByteArray, 2572); //<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>
temp_short = (short)CurveDimNum[CurveNo];
XtfConvert.ToBytes(temp_short, ByteArray, 2574); //ά<><CEAC>
temp_short = (short)CurveE1Num[CurveNo];
XtfConvert.ToBytes(temp_short, ByteArray, 2576); //<2F><><31><CEAC><EFBFBD><EFBFBD>
temp_short = (short)CurveE2Num[CurveNo];
XtfConvert.ToBytes(temp_short, ByteArray, 2578); //<2F><><32><CEAC><EFBFBD><EFBFBD>
temp_short = (short)CurveE3Num[CurveNo];
XtfConvert.ToBytes(temp_short, ByteArray, 2580); //<2F><><33><CEAC><EFBFBD><EFBFBD>
temp_short = -32767;
XtfConvert.ToBytes(temp_short, ByteArray, 2590); //INT*2<><32>ʼֵ
if (CurveDataType[CurveNo] == 2 || CurveDataType[CurveNo] == 9)
{
temp_short = 1;
}
else
{
temp_short = 2;
}
XtfConvert.ToBytes(temp_short, ByteArray, 2592); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
temp_short = 1;
XtfConvert.ToBytes(temp_short, ByteArray, 2594); //<2F><><EFBFBD>޸<EFBFBD><DEB8>ű<EFBFBD>־<EFBFBD><D6BE>1<EFBFBD><31>
if (CurveDataType[CurveNo] == 2 || CurveDataType[CurveNo] == 9)
temp_short = 16;
else
temp_short = 32;
XtfConvert.ToBytes(temp_short, ByteArray, 2596); //ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>λ<EFBFBD><CEBB>
if (CurveFlag[CurveNo] > 0)
{
XtfConvert.ToBytes(curveInfo[CurveNo].TR_Distance, ByteArray, 1080); //T-R<><52><EFBFBD><EFBFBD>
XtfConvert.ToBytes(curveInfo[CurveNo].RR_Distance, ByteArray, 1084); //R-R<><52><EFBFBD><EFBFBD>
XtfConvert.ToBytes(curveInfo[CurveNo].OrinToSurface, ByteArray, 1088); //R-R<><52><EFBFBD><EFBFBD>
for (int i = 0; i < 24; i++)
{
XtfConvert.ToBytes(curveInfo[CurveNo].TranFillArea[i], ByteArray, 3072 + i); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
XtfConvert.ToBytes(curveInfo[CurveNo].RecvFillArea[i], ByteArray, 3096+i); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
XtfConvert.ToBytes(curveInfo[CurveNo].StartTimeUnit, ByteArray, 80,8); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
XtfConvert.ToBytes(curveInfo[CurveNo].WaveTimeUnit, ByteArray, 72,8); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
XtfConvert.ToBytes(curveInfo[CurveNo].FixedWaveStartFlag, ByteArray, 2606); //0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
XtfConvert.ToBytes(curveInfo[CurveNo].FixedWaveGain, ByteArray, 2608); //0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD>
//whp del 2016.6.2
//XtfConvert.ToBytes(curveInfo[CurveNo].TimeValuesLevel, ByteArray, 1048); //ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
//whp add 2016.6.2 for ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>ʼʱ<CABC><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
XtfConvert.ToBytes(curveInfo[CurveNo].TimeValuesLevel, ByteArray, 1048); //ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
XtfConvert.ToBytes(curveInfo[CurveNo].DACTimeOffset, ByteArray, 1052); //DAC<41><43>ʼʱ<CABC><CAB1>
//whp add end
ByteArray[2618] = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ByteArray[0xA00] = 0x00;
ByteArray[0xA01] = Version1;
ByteArray[0xA02] = 0x00;
ByteArray[0xA03] = Version2;
if(CurveFlag[CurveNo] > 1)
{
ByteArray[0xA1E] = 0x80; //0x00;//
ByteArray[0xA1F] = 0x01; //0x00;//
ByteArray[0x668] = 0xBF;
ByteArray[0x669] = 0xE3;
ByteArray[0x66A] = 0x82;
ByteArray[0xD55] = 0x88;
ByteArray[0xD56] = 0x44;
}
ByteArray[4095] = SystemCode;//ϵͳ<CFB5><CDB3>
// XtfConvert.ToBytes(SystemCode, ByteArray, 4095);
return CurveNo;
};
int CurveHead_Write(int CurveNo)
{
byte ByteArray[4096] = {0};
CurveHeadSet(CurveNo, ByteArray);
long pos = CurveStartPos[CurveNo] - 1;
dataFile->seek(pos * 4096);
dataFile->write((char*)&ByteArray[0], 4096);
dataFile->flush();
return CurveNo;
};
int CurveRecord_Write(byte buf[],int offset,int length)
{
dataFile->write((char*)&buf[offset], length);
return 0;
};
int CurveHead_Read(int CurveNo)
{
byte ByteArray[4096] = {0};
long pos = CurveStartPos[CurveNo] - 1;
dataFile->seek(pos * 4096);
dataFile->read((char*)&ByteArray[0], 4096);
CurveHeadGet(CurveNo, ByteArray);
return 0;
};
int CurveRecord_Read(byte buf[], int offset, int length)
{
dataFile->read((char*)&buf[offset], length);
return 0;
};
};