using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Text; namespace Kingo.Mobile.Shape2KOTool { // Token: 0x02000040 RID: 64 public class DBFDocument : IDisposable { // Token: 0x170000C7 RID: 199 // (get) Token: 0x060001FF RID: 511 RVA: 0x00009A2C File Offset: 0x00007C2C public DataTable Data { get { return this.GetData(); } } // Token: 0x06000200 RID: 512 RVA: 0x00009A44 File Offset: 0x00007C44 public DataTable GetData() { DataTable dataTable = new DataTable(); foreach (Header header in this.headers) { DataColumn column = new DataColumn(header.FieldName); dataTable.Columns.Add(column); } int count = this.headers.Count; int num = 0; while ((long)num < this.GetRecordCount()) { DataRow dataRow = dataTable.NewRow(); for (int i = 0; i < count; i++) { dataRow[i] = this.GetRecordFieldValue(num + 1, i + 1); } dataTable.Rows.Add(dataRow); num++; } return dataTable; } // Token: 0x06000201 RID: 513 RVA: 0x00009B30 File Offset: 0x00007D30 public void LoadFile(string filename) { using (FileStream fileStream = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.Read)) { this.dbfBuffer = new byte[fileStream.Length]; fileStream.Read(this.dbfBuffer, 0, this.dbfBuffer.Length); } this.FillFileInfo(); this.FillHeadInfos(); } // Token: 0x06000202 RID: 514 RVA: 0x00009BA4 File Offset: 0x00007DA4 private void FillFileInfo() { this.fileInfo.Mark = (char)this.dbfBuffer[0]; this.fileInfo.Year = (char)this.dbfBuffer[1]; this.fileInfo.Mmonth = (char)this.dbfBuffer[2]; this.fileInfo.Day = (char)this.dbfBuffer[3]; byte[] array = new byte[4]; for (int i = 4; i < 8; i++) { array[i - 4] = this.dbfBuffer[i]; } this.fileInfo.RecordCount = (long)BitConverter.ToInt32(array, 0); array = new byte[2]; for (int i = 8; i < 10; i++) { array[i - 8] = this.dbfBuffer[i]; } this.fileInfo.HeaderLength = BitConverter.ToInt16(array, 0); array = new byte[2]; for (int i = 10; i < 12; i++) { array[i - 10] = this.dbfBuffer[i]; } this.fileInfo.RecordLength = BitConverter.ToInt16(array, 0); this.fileInfo.LanguageDriverID = (char)this.dbfBuffer[29]; if (this.fileInfo.LanguageDriverID == '\0') { this.CurrentEncoding = Encoding.UTF8; } this.fileInfo.Reserved = this.CurrentEncoding.GetString(this.dbfBuffer, 11, 20); } // Token: 0x06000203 RID: 515 RVA: 0x00009D04 File Offset: 0x00007F04 private void FillHeadInfos() { int num = 0; while (this.dbfBuffer[(num + 1) * 32] != 13 && num < this.GetFieldCount()) { byte[] array = new byte[32]; for (int i = (num + 1) * 32; i < (num + 1) * 32 + 32; i++) { array[i - (num + 1) * 32] = this.dbfBuffer[i]; } Header item = new Header(); this.FillHeaderInfo(ref item, array, (num + 1) * 32); this.headers.Add(item); num++; } } // Token: 0x06000204 RID: 516 RVA: 0x00009DAC File Offset: 0x00007FAC private int GetFieldCount() { return (int)(this.fileInfo.HeaderLength / 32 - 1); } // Token: 0x06000205 RID: 517 RVA: 0x00009DD0 File Offset: 0x00007FD0 private string GetFieldName(int FieldNum) { string result; if (FieldNum < 1 || FieldNum > this.headers.Count) { result = null; } else if (FieldNum < 1) { result = ""; } else { result = this.headers[FieldNum - 1].FieldName; } return result; } // Token: 0x06000206 RID: 518 RVA: 0x00009E28 File Offset: 0x00008028 private int GetFieldLength(int FieldNum) { int result; if (FieldNum < 1) { result = -1; } else { result = (int)this.headers[FieldNum - 1].FieldLength; } return result; } // Token: 0x06000207 RID: 519 RVA: 0x00009E5C File Offset: 0x0000805C private string GetFieldType(int FieldNum) { string result; if (FieldNum < 1) { result = "#"; } else { result = new string(new char[] { this.headers[FieldNum - 1].FieldType }); } return result; } // Token: 0x06000208 RID: 520 RVA: 0x00009EA4 File Offset: 0x000080A4 private int GetDecimal(int FieldNum) { int result; if (FieldNum < 1) { result = -1; } else { result = (int)this.headers[FieldNum - 1].Decimal; } return result; } // Token: 0x06000209 RID: 521 RVA: 0x00009ED8 File Offset: 0x000080D8 private long GetRecordCount() { return this.fileInfo.RecordCount; } // Token: 0x0600020A RID: 522 RVA: 0x00009EF8 File Offset: 0x000080F8 private int GetRecordLength() { return (int)this.fileInfo.RecordLength; } // Token: 0x0600020B RID: 523 RVA: 0x00009F18 File Offset: 0x00008118 private string GetRecord(int RecordNum) { string result; if (RecordNum < 1) { result = ""; } else { int index = (int)(this.fileInfo.HeaderLength + 1) + (RecordNum - 1) * this.GetRecordLength(); string @string = this.CurrentEncoding.GetString(this.dbfBuffer, index, this.GetRecordLength() - 1); result = @string; } return result; } // Token: 0x0600020C RID: 524 RVA: 0x00009F74 File Offset: 0x00008174 private string GetRecordFieldValue(int RecordNum, int FieldNum) { string result; if (RecordNum < 1 || FieldNum < 1) { result = ""; } else { int num = (int)(this.fileInfo.HeaderLength + 1) + (RecordNum - 1) * this.GetRecordLength(); int num2 = 1; while (num2 < FieldNum && num2 <= this.headers.Count) { num += this.GetFieldLength(num2); num2++; } string @string = this.CurrentEncoding.GetString(this.dbfBuffer, num, this.GetFieldLength(FieldNum)); result = @string; } return result; } // Token: 0x0600020D RID: 525 RVA: 0x0000A008 File Offset: 0x00008208 private void FillHeaderInfo(ref Header dbfInfoHeader, byte[] buffer, int position) { dbfInfoHeader.FieldName = this.CurrentEncoding.GetString(buffer, 0, 9); dbfInfoHeader.Reserved1 = (char)buffer[10]; dbfInfoHeader.FieldType = (char)buffer[11]; byte[] array = new byte[4]; for (int i = 12; i < 16; i++) { array[i - 12] = buffer[i]; } dbfInfoHeader.Offset = (long)BitConverter.ToInt32(array, 0); dbfInfoHeader.FieldLength = (char)buffer[16]; dbfInfoHeader.Decimal = (char)buffer[17]; dbfInfoHeader.Reserved = this.CurrentEncoding.GetString(buffer, 18, 14); } // Token: 0x0600020E RID: 526 RVA: 0x0000A0A2 File Offset: 0x000082A2 public void Dispose() { this.dbfBuffer = null; GC.Collect(); } // Token: 0x04000160 RID: 352 private Encoding CurrentEncoding = Encoding.Default; // Token: 0x04000161 RID: 353 private FileInfo fileInfo = new FileInfo(); // Token: 0x04000162 RID: 354 private List
headers = new List
(); // Token: 0x04000163 RID: 355 private byte[] dbfBuffer; } }