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); }
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; }
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; }
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); } }
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 = ""; } } }
} // 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); }
public HeaderData(byte[] dBFileData, ref VisibleHeaderData vhd, ref Table tToWatch) { ReadHeader(dBFileData, ref tToWatch); UpdateVisibleHeader(ref vhd); } // For debugging purposes!
public HeaderData(byte[] dBFileData, ref VisibleHeaderData vhd) { ReadHeader(dBFileData); UpdateVisibleHeader(ref vhd); }
public void ChangeNumberOfRecords(int nToChangeBy, ref VisibleHeaderData vhd) { nOfRecords += nToChangeBy; vhd.nOfRecords += nToChangeBy; }