示例#1
0
 public Table(string[] sFields, int[] sFieldLengths, HeaderData.FieldTypes[] fft)
 {
     rRecords    = new Record[1];
     rRecords[0] = new Record(sFields.Length);
     vHeader     = new VisibleHeaderData();
     sFieldNames = sFields;
     tHeader     = new HeaderData(sFields, sFieldLengths, ref vHeader, fft);
 }
示例#2
0
 static void UpdateVisibleHeader(ref VisibleHeaderData vhd)
 {
     vhd.validDbaseFile     = validDbaseFile;
     vhd.lastDateModified   = lastDateModified;
     vhd.nRecordCount       = nRecordCount;
     vhd.nFieldDataStartsAt = nFieldDataStartsAt;
     vhd.nOfRecords         = nOfRecords;
     vhd.nRecordSize        = nRecordSize;
     vhd.nOfFields          = nOfFields;
     vhd.nFieldLength       = nFieldLength;
     vhd.sFieldNames        = sFieldNames;
     vhd.fFieldTypes        = fFieldTypes;
 }
示例#3
0
        public HeaderData(string[] sFieldName, int[] nFieldLegnths, ref VisibleHeaderData vhd, FieldTypes[] fft)
        {
            validDbaseFile     = true;
            lastDateModified   = "TODO!!";
            nRecordCount       = 1;
            nFieldDataStartsAt = 162;
            nOfRecords         = 1;
            int recordSize = 0;

            foreach (int value in nFieldLegnths)
            {
                recordSize += value;
            }

            nRecordSize  = recordSize + 1;
            nOfFields    = sFieldName.Length;
            nFieldLength = nFieldLegnths;
            sFieldNames  = sFieldName;
            fFieldTypes  = fft;
        }
示例#4
0
        public Table(string dBaseFileName, ref Table tToWatch)
        {
            vHeader = new VisibleHeaderData();
            byte[] bData = GetFileData(dBaseFileName);
            tHeader          = new HeaderData(bData, ref vHeader, ref tToWatch);
            rRecords         = new Record[vHeader.nOfRecords];
            sFieldNames      = vHeader.sFieldNames;
            string[,] sTable = new string[vHeader.nOfRecords, vHeader.nOfFields];
            ReadContentsOfFields(ref sTable, bData, vHeader);
            sFileName = dBaseFileName;

            for (int i = 0; i < rRecords.Length; i++)
            {
                string[] toShoveInRecord = new string[vHeader.nOfFields];
                for (int x = 0; x < vHeader.nOfFields; x++)
                {
                    toShoveInRecord[x] = sTable[i, x];
                }
                rRecords[i] = new Record(toShoveInRecord, vHeader.nFieldLength);
            }
        }
示例#5
0
 static void ReadContentsOfFields(ref string[,] sTable, byte[] dBaseFile, VisibleHeaderData vhd)
 {
     for (int nRn = 0; nRn < vhd.nOfRecords; nRn++)
     {
         for (int nFn = 0; nFn < vhd.nOfFields; nFn++)
         {
             string fieldContent = "";
             int    position     = vhd.nFieldDataStartsAt;
             position += (nRn * vhd.nRecordSize);
             for (int i = 0; i < nFn; i++)
             {
                 position += vhd.nFieldLength[i];
             }
             for (int fPos = 0; fPos < vhd.nFieldLength[nFn]; fPos++)
             {
                 fieldContent += (char)dBaseFile[position];
                 position++;
             }
             sTable[nRn, nFn] = fieldContent;
             fieldContent     = "";
         }
     }
 }
示例#6
0
        } // For debugging purposes!

        public byte[] ReturnHeaderData(VisibleHeaderData vhd)
        {
            int nHeaderSize = 32 + (vhd.nOfFields * 32) + 2;

            byte[] headerBytes = new byte[nHeaderSize];

            headerBytes[0] = 3;
            // Make a valid dBase File

            string dateTime = DateTime.Now.Year.ToString()[2].ToString() + DateTime.Now.Year.ToString()[3].ToString();
            string monthNow = DateTime.Now.Month.ToString();

            if (monthNow.Length == 1)
            {
                monthNow = "0" + monthNow;
            }
            string dayNow = DateTime.Now.Day.ToString();

            if (dayNow.Length == 1)
            {
                dayNow = "0" + dayNow;
            }
            // Set the last modified date

            int nM = Convert.ToInt32(monthNow);
            int nD = Convert.ToInt32(dayNow);
            int nY = Convert.ToInt32(dateTime);

            headerBytes[1] = (byte)nY;
            headerBytes[2] = (byte)nM;
            headerBytes[3] = (byte)nD;

            headerBytes[4] = nConverter.SplitDenaryToBytes(vhd.nOfRecords, 4)[0];
            headerBytes[5] = nConverter.SplitDenaryToBytes(vhd.nOfRecords, 4)[1];
            headerBytes[6] = nConverter.SplitDenaryToBytes(vhd.nOfRecords, 4)[2];
            headerBytes[7] = nConverter.SplitDenaryToBytes(vhd.nOfRecords, 4)[3];
            // Number of records

            headerBytes[8] = nConverter.SplitDenaryToBytes(nHeaderSize, 2)[0];
            headerBytes[9] = nConverter.SplitDenaryToBytes(nHeaderSize, 2)[1];
            // Position of first data record

            headerBytes[10] = nConverter.SplitDenaryToBytes(vhd.nRecordSize, 2)[0];
            headerBytes[11] = nConverter.SplitDenaryToBytes(vhd.nRecordSize, 2)[1];
            // Record size

            for (int i = 12; i <= 27; i++)
            {
                headerBytes[i] = 0;
            }
            // Reserved

            headerBytes[28] = 0;
            // Table flags?

            headerBytes[29] = 0;
            // Code page marks

            headerBytes[30] = 0; headerBytes[31] = 0;
            // Reserved

            // Field Sub-Records :

            int bPos = 32;

            for (int i = 0; i < vhd.nOfFields; i++)
            {
                byte[] fieldName = nConverter.ConvertStringToByteArray(vhd.sFieldNames[i]);
                for (int x = 0; x < fieldName.Length; x++)
                {
                    headerBytes[bPos + x] = fieldName[x];
                }
                bPos += 11; // Move bPos to 11

                switch (vhd.fFieldTypes[i])
                {
                case (FieldTypes.Character):
                    headerBytes[bPos] = nConverter.ConvertStringToByteArray("C")[0];
                    break;

                case (FieldTypes.CharacterBin):
                    headerBytes[bPos] = nConverter.ConvertStringToByteArray("C")[0];
                    break;

                case (FieldTypes.Currency):
                    headerBytes[bPos] = nConverter.ConvertStringToByteArray("Y")[0];
                    break;

                case (FieldTypes.Date):
                    headerBytes[bPos] = nConverter.ConvertStringToByteArray("D")[0];
                    break;

                case (FieldTypes.DateTime):
                    headerBytes[bPos] = nConverter.ConvertStringToByteArray("T")[0];
                    break;

                case (FieldTypes.Double):
                    headerBytes[bPos] = nConverter.ConvertStringToByteArray("B")[0];
                    break;

                case (FieldTypes.Float):
                    headerBytes[bPos] = nConverter.ConvertStringToByteArray("F")[0];
                    break;

                case (FieldTypes.General):
                    headerBytes[bPos] = nConverter.ConvertStringToByteArray("G")[0];
                    break;

                case (FieldTypes.Integer):
                    headerBytes[bPos] = nConverter.ConvertStringToByteArray("I")[0];
                    break;

                case (FieldTypes.Logical):
                    headerBytes[bPos] = nConverter.ConvertStringToByteArray("L")[0];
                    break;

                case (FieldTypes.Memo):
                    headerBytes[bPos] = nConverter.ConvertStringToByteArray("M")[0];
                    break;

                case (FieldTypes.MemoBin):
                    headerBytes[bPos] = nConverter.ConvertStringToByteArray("M")[0];
                    break;

                case (FieldTypes.Numeric):
                    headerBytes[bPos] = nConverter.ConvertStringToByteArray("N")[0];
                    break;

                case (FieldTypes.Picture):
                    headerBytes[bPos] = nConverter.ConvertStringToByteArray("P")[0];
                    break;
                }
                bPos++;

                headerBytes[bPos] = 0; headerBytes[bPos + 1] = 0; headerBytes[bPos + 2] = 0; headerBytes[bPos + 3] = 0;
                bPos += 4;
                // The memory location, not useful!

                headerBytes[bPos] = (byte)vhd.nFieldLength[i];
                // Set the field length

                bPos++;

                headerBytes[bPos] = 0;
                // Field decimal count? May need looking at later.

                for (int x = bPos; x <= bPos + 14; x++)
                {
                    headerBytes[x] = 0;
                }
                // Fill in the blanks

                bPos += 3;
                headerBytes[bPos] = 0; // Was set to one before...?

                bPos += 12;
            }

            headerBytes[nHeaderSize - 2] = (byte)0x0D;
            headerBytes[nHeaderSize - 1] = (byte)0x00;

            return(headerBytes);
        }
示例#7
0
        public HeaderData(byte[] dBFileData, ref VisibleHeaderData vhd, ref Table tToWatch)
        {
            ReadHeader(dBFileData, ref tToWatch);

            UpdateVisibleHeader(ref vhd);
        } // For debugging purposes!
示例#8
0
        public HeaderData(byte[] dBFileData, ref VisibleHeaderData vhd)
        {
            ReadHeader(dBFileData);

            UpdateVisibleHeader(ref vhd);
        }
示例#9
0
 public void ChangeNumberOfRecords(int nToChangeBy, ref VisibleHeaderData vhd)
 {
     nOfRecords     += nToChangeBy;
     vhd.nOfRecords += nToChangeBy;
 }