Пример #1
0
 public void ReadFromInfoRecord(InfoRecord ir)
 {
     foreach (var item in ir.Items)
     {
         DoubleValues.Add(BitConverter.ToDouble(item, 0));
     }
 }
Пример #2
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);
        }
Пример #5
0
 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);
 }
Пример #6
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();
            }
        }
Пример #7
0
        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);
        }
Пример #8
0
        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]);
            }
        }
Пример #9
0
        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);
                }
            }
        }
Пример #11
0
        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);
            }
        }
Пример #12
0
        public void ReadFromInfoRecord(InfoRecord ir)
        {
            var originalBytes = (from item in ir.Items select item[0]).ToArray();

            this.CodePage = Encoding.Default.GetString(originalBytes);
        }