public void ReadFromInfoRecord(InfoRecord ir) { foreach (var item in ir.Items) { DoubleValues.Add(BitConverter.ToDouble(item, 0)); } }
public void ReadFromInfoRecord(InfoRecord ir) { var byteArray = (from item in ir.Items select item[0]).ToArray(); int positionInArray = 0; while (positionInArray < byteArray.Length) { LongVariableWithValueLabels lvwvl = new LongVariableWithValueLabels(); // first 4-bytes is the length of long variable name ArraySegment <byte> arraySegment = new ArraySegment <byte>(byteArray, positionInArray, 4); int varNameLength = BitConverter.ToInt32(arraySegment.ToArray(), 0); positionInArray += 4; // long variable name arraySegment = new ArraySegment <byte>(byteArray, positionInArray, varNameLength); lvwvl.LongVariableName = Encoding.Default.GetString(arraySegment.ToArray()); positionInArray += varNameLength; // variable width arraySegment = new ArraySegment <byte>(byteArray, positionInArray, 4); lvwvl.VariableWidth = BitConverter.ToInt32(arraySegment.ToArray(), 0); positionInArray += 4; // number of value labels arraySegment = new ArraySegment <byte>(byteArray, positionInArray, 4); int valueLabelCount = BitConverter.ToInt32(arraySegment.ToArray(), 0); positionInArray += 4; for (int i = 0; i < valueLabelCount; i++) { LongValueLabel vl = new LongValueLabel(); // length of value code skipped - should equal to variable width positionInArray += 4; // value code arraySegment = new ArraySegment <byte>(byteArray, positionInArray, lvwvl.VariableWidth); vl.Value = Encoding.Default.GetString(arraySegment.ToArray()); positionInArray += lvwvl.VariableWidth; // length of value label arraySegment = new ArraySegment <byte>(byteArray, positionInArray, 4); vl.LabelLength = BitConverter.ToInt32(arraySegment.ToArray(), 0); positionInArray += 4; // value label arraySegment = new ArraySegment <byte>(byteArray, positionInArray, vl.LabelLength); vl.Label = Encoding.Default.GetString(arraySegment.ToArray()); positionInArray += vl.LabelLength; lvwvl.ValueLabels.Add(vl); } this.LongVariableWithValueLabels.Add(lvwvl); } }
public void ReadFromInfoRecord(InfoRecord ir) { if (ir.RecordSubType != RecordSubType.MachineFloatingPointInfoRecord || ir.ItemSize != 8 || ir.ItemCount != 3) { throw new Exception("Invalid items in MachineFloatingPointInfoRecord"); } this.SystemMissingValue = BitConverter.ToDouble(ir.Items[0], 0); this.HighestMissingValue = BitConverter.ToDouble(ir.Items[1], 0); this.LowestMissingValue = BitConverter.ToDouble(ir.Items[2], 0); }
public InfoRecord ConvertToInfoRecord() { InfoRecord ir = new InfoRecord(this.File); ir.RecordSubType = RecordSubType.MachineFloatingPointInfoRecord; ir.ItemSize = 8; ir.ItemCount = 3; ir.Items = new List <byte[]>(); ir.Items.Add(BitConverter.GetBytes(this.SystemMissingValue)); ir.Items.Add(BitConverter.GetBytes(this.HighestMissingValue)); ir.Items.Add(BitConverter.GetBytes(this.LowestMissingValue)); return(ir); }
public void ReadFromInfoRecord(InfoRecord ir) { if (ir.RecordSubType != RecordSubType.MachineIntegerInfoRecord || ir.ItemSize != 4 || ir.ItemCount != 8) { throw new Exception("Invalid items in MachineIntegerInfoRecord"); } this.VersionMajor = BitConverter.ToInt32(ir.Items[0], 0); this.VersionMinor = BitConverter.ToInt32(ir.Items[1], 0); this.VersionRevision = BitConverter.ToInt32(ir.Items[2], 0); this.MachineCode = BitConverter.ToInt32(ir.Items[3], 0); this.FloatingPointRepresentation = (FloatingPointRepresentation)BitConverter.ToInt32(ir.Items[4], 0); this.CompressionCode = BitConverter.ToInt32(ir.Items[5], 0); this.Endianness = (Endianness)BitConverter.ToInt32(ir.Items[6], 0); this.CharacterCode = (CharacterCode)BitConverter.ToInt32(ir.Items[7], 0); }
private void ReadDictionary() { RecordType currentRecordType = (RecordType)this.Reader.ReadInt32(); while (currentRecordType != RecordType.DictionaryTerminationRecord) { switch (currentRecordType) { case RecordType.FileHeaderRecord: this.FileHeaderRecord = new FileHeaderRecord(this); this.FileHeaderRecord.ReadFromStream(); break; case RecordType.VariableRecord: VariableRecord v = new VariableRecord(this); v.ReadFromStream(); this.VariableRecords.Add(v); break; case RecordType.ValueLabelRecord: ValueLabelsRecord vl = new ValueLabelsRecord(this); vl.ReadFromStream(); this.ValueLabelsRecords.Add(vl); // ValueLabelVariablesRecord always follows ValueLabelsRecord, that's why it is stored inside of it. break; case RecordType.DocumentRecord: this.DocumentRecord = new DocumentRecord(this); this.DocumentRecord.ReadFromStream(); break; case RecordType.InfoRecord: InfoRecord ir = new InfoRecord(this); ir.ReadFromStream(); this.InfoRecords.Add(ir); break; default: break; } currentRecordType = (RecordType)this.Reader.ReadInt32(); } }
public InfoRecord ConvertToInfoRecord() { InfoRecord ir = new InfoRecord(this.File); ir.RecordSubType = RecordSubType.MachineIntegerInfoRecord; ir.ItemSize = 4; ir.ItemCount = 8; ir.Items = new List <byte[]>(); ir.Items.Add(BitConverter.GetBytes(this.VersionMajor)); ir.Items.Add(BitConverter.GetBytes(this.VersionMinor)); ir.Items.Add(BitConverter.GetBytes(this.VersionRevision)); ir.Items.Add(BitConverter.GetBytes(this.MachineCode)); ir.Items.Add(BitConverter.GetBytes((Int32)this.FloatingPointRepresentation)); ir.Items.Add(BitConverter.GetBytes(this.CompressionCode)); ir.Items.Add(BitConverter.GetBytes((Int32)this.Endianness)); ir.Items.Add(BitConverter.GetBytes((Int32)this.CharacterCode)); return(ir); }
public void ReadFromInfoRecord(InfoRecord ir) { if (ir.RecordSubType != RecordSubType.LongVariableNamesRecord || ir.ItemSize != 1) { throw new Exception("Invalid items in LongVariableNamesRecord"); } var originalBytes = (from item in ir.Items select item[0]).ToArray(); var dictionaryString = Encoding.Default.GetString(originalBytes); // TO DO: Globalize Encoding?? // split on tabs: var entries = dictionaryString.Split('\t'); this.LongNamebyShortName = new Dictionary <string, string>(); foreach (var entry in entries) { var values = entry.Split('='); this.LongNamebyShortName.Add(values[0], values[1]); } }
public void ReadFromInfoRecord(InfoRecord ir) { if (ir.RecordSubType != RecordSubType.VeryLongStringRecord || ir.ItemSize != 1) { throw new Exception("Invalid items in VeryLongStringRecord"); } this.StringLengths = new Dictionary <string, string>(); var originalBytes = (from item in ir.Items where item[0] != 0 select item[0]).ToArray(); var dictionaryString = Encoding.Default.GetString(originalBytes); // split on tabs: var entries = dictionaryString.Split('\t'); foreach (var entry in entries) { var values = entry.Split('='); if (values.Count() == 2) { this.StringLengths.Add(values[0], values[1]); } } }
public void ReadFromInfoRecord(InfoRecord ir) { if (ir.RecordSubType != RecordSubType.MultipleResponseSetsRecord || ir.ItemSize != 1) { throw new Exception("Invalid items in MultipleResponseSetsRecord"); } var originalBytes = (from item in ir.Items select item[0]).ToArray(); var dictionaryString = Encoding.Default.GetString(originalBytes); // TO DO: Globalize Encoding?? // split on tabs: var entries = dictionaryString.Split('\n'); this.MultipleResponseSets = new List <MultipleResponseSet>(); foreach (var entry in entries) { if (entry.Length > 0) { MultipleResponseSet mrs = new MultipleResponseSet(); mrs.ReadFromString(entry); this.MultipleResponseSets.Add(mrs); } } }
public void ReadFromInfoRecord(InfoRecord ir) { if (ir.RecordSubType != RecordSubType.VariableDisplayParameterRecord || ir.ItemSize != 4) { throw new Exception("Invalid items in VariableDisplayParameterRecord"); } // Record can either have 2 or 3 fields per variable: int variableCount = this.GetVariableCountWithoutExtentions(); this.ParameterCount = ir.ItemCount / variableCount; if (this.ParameterCount != 2 && this.ParameterCount != 3 && ir.ItemCount % variableCount > 0) { throw new Exception("Invalid ItemCount in VariableDisplayParameterRecord"); } this.VariableParameters = new List <VariableParameters>(); for (int variableIndex = 0; variableIndex < variableCount; variableIndex++) { VariableParameters vp = new VariableParameters(); vp.MeasurementType = (MeasurementType)BitConverter.ToInt32(ir.Items[0], 0); if (this.ParameterCount == 3) { //Width parameter exists vp.Width = BitConverter.ToInt32(ir.Items[1], 0); vp.Alignment = (Alignment)BitConverter.ToInt32(ir.Items[2], 0); } else if (this.ParameterCount == 2) { //Width parameter is omitted vp.Alignment = (Alignment)BitConverter.ToInt32(ir.Items[1], 0); } this.VariableParameters.Add(vp); } }
public void ReadFromInfoRecord(InfoRecord ir) { var originalBytes = (from item in ir.Items select item[0]).ToArray(); this.CodePage = Encoding.Default.GetString(originalBytes); }