public virtual void SetFieldType(DBTableField.FieldType fieldType) { this.fieldType = fieldType; }
/// <summary>Read a table field</summary> /// <exception cref="Com.Khubla.Pdxreader.Api.PDXReaderException"/> public virtual void Read(DBTableField pdxTableField, InputStream inputStream) { try { /* * get the data */ byte[] data = new byte[pdxTableField.GetLength()]; int bytesRead = inputStream.Read(data); if (bytesRead > 0) { /* * convert to type */ DBTableField.FieldType fieldType = pdxTableField.GetFieldType(); switch (fieldType) { case DBTableField.FieldType.A: { value = StringUtil.ReadString(data); break; } case DBTableField.FieldType.D: { // date long d = ByteBuffer.Wrap(data).Order(ByteOrder.LittleEndian).GetShort(); value = System.Convert.ToString(d); break; } case DBTableField.FieldType.S: { long s = ByteBuffer.Wrap(data).Order(ByteOrder.LittleEndian).GetShort(); value = System.Convert.ToString(s); break; } case DBTableField.FieldType.I: { data[0] = unchecked ((byte)(data[0] & unchecked ((int)(0x7f)))); // handle unsigned integers long i = ByteBuffer.Wrap(data).Order(ByteOrder.BigEndian).GetInt(); value = System.Convert.ToString(i); break; } case DBTableField.FieldType.C: { // currency double dollars = ByteBuffer.Wrap(data).Order(ByteOrder.BigEndian).GetDouble(); value = double.ToString(dollars); break; } case DBTableField.FieldType.M: { // Memo value = StringUtil.ByteArrayToString(data); break; } case DBTableField.FieldType.N: { long n = ByteBuffer.Wrap(data).Order(ByteOrder.LittleEndian).GetLong(); value = double.ToString(n); break; } case DBTableField.FieldType.L: { // Logical value = StringUtil.ByteArrayToString(data); break; } case DBTableField.FieldType.B: { // Binary value = StringUtil.ByteArrayToString(data); break; } case DBTableField.FieldType.O: { // OLE value = StringUtil.ByteArrayToString(data); break; } case DBTableField.FieldType.E: { // formatted memo value = StringUtil.ByteArrayToString(data); break; } case DBTableField.FieldType.G: { // Graphic value = StringUtil.ByteArrayToString(data); break; } case DBTableField.FieldType.Bcd: { // BCD value = StringUtil.ByteArrayToString(data); break; } case DBTableField.FieldType.Bytes: { // Bytes value = StringUtil.ByteArrayToString(data); break; } case DBTableField.FieldType.Ts: { // milliseconds since Jan 1, 1 AD, convert to UTC time data[0] = unchecked ((byte)(data[0] & unchecked ((int)(0x7f)))); // handle unsigned number double dt = ByteBuffer.Wrap(data).Order(ByteOrder.BigEndian).GetDouble(); long dateTime = (long)dt; if (dateTime == 0) { value = null; } else { dateTime -= 86400000; // millis in 1 day dateTime -= 62135607600000l; // millis from 01.01.1970 value = System.Convert.ToString(dateTime); } break; } case DBTableField.FieldType.Auto: { short auto = ByteBuffer.Wrap(data).Order(ByteOrder.LittleEndian).GetShort(); value = short.ToString(auto); break; } default: { throw new Exception("Unknown field type '" + fieldType.ToString() + "'"); } } } } catch (Exception e) { throw new PDXReaderException("Exception in read", e); } }
/// <summary>types and sizes, 2 bytes per field</summary> /// <exception cref="Com.Khubla.Pdxreader.Api.PDXReaderException"/> public virtual bool ReadFieldTypeAndSize(LittleEndianDataInputStream littleEndianDataInputStream ) { try { type = littleEndianDataInputStream.ReadUnsignedByte(); length = littleEndianDataInputStream.ReadUnsignedByte(); switch (type) { case unchecked ((int)(0x00)): { return(false); } case unchecked ((int)(0x01)): { fieldType = DBTableField.FieldType.A; break; } case unchecked ((int)(0x02)): { fieldType = DBTableField.FieldType.D; if (length != 4) { throw new Exception("Invalid field length '" + length + "' for type '" + type + "'" ); } break; } case unchecked ((int)(0x03)): { fieldType = DBTableField.FieldType.S; if (length != 2) { throw new Exception("Invalid field length '" + length + "' for type '" + type + "'" ); } break; } case unchecked ((int)(0x04)): { fieldType = DBTableField.FieldType.I; if (length != 4) { throw new Exception("Invalid field length '" + length + "' for type '" + type + "'" ); } break; } case unchecked ((int)(0x05)): { fieldType = DBTableField.FieldType.C; if (length != 8) { throw new Exception("Invalid field length '" + length + "' for type '" + type + "'" ); } break; } case unchecked ((int)(0x06)): { fieldType = DBTableField.FieldType.N; if (length != 8) { throw new Exception("Invalid field length '" + length + "' for type '" + type + "'" ); } break; } case unchecked ((int)(0x09)): { fieldType = DBTableField.FieldType.L; if (length != 1) { throw new Exception("Invalid field length '" + length + "' for type '" + type + "'" ); } break; } case unchecked ((int)(0xc)): { fieldType = DBTableField.FieldType.M; break; } case unchecked ((int)(0xd)): { fieldType = DBTableField.FieldType.B; break; } case unchecked ((int)(0xe)): { fieldType = DBTableField.FieldType.E; break; } case unchecked ((int)(0xf)): { fieldType = DBTableField.FieldType.O; break; } case unchecked ((int)(0x10)): { fieldType = DBTableField.FieldType.G; break; } case unchecked ((int)(0x14)): { fieldType = DBTableField.FieldType.T; if (length != 4) { throw new Exception("Invalid field length '" + length + "' for type '" + type + "'" ); } break; } case unchecked ((int)(0x15)): { fieldType = DBTableField.FieldType.Ts; if (length != 8) { throw new Exception("Invalid field length '" + length + "' for type '" + type + "'" ); } break; } case unchecked ((int)(0x16)): { fieldType = DBTableField.FieldType.Auto; break; } case unchecked ((int)(0x17)): { fieldType = DBTableField.FieldType.Bcd; if (length != 17) { throw new Exception("Invalid field length '" + length + "' for type '" + type + "'" ); } break; } case unchecked ((int)(0x18)): { fieldType = DBTableField.FieldType.Bytes; break; } default: { throw new PDXReaderException("Unknown field type '" + type + "'"); } } return(true); } catch (Exception e) { throw new PDXReaderException("Exception in read", e); } }
public virtual void SetType(DBTableField.FieldType type) { this.type = type; }