Пример #1
0
        private GridFileHeader ReadHeader(BinaryReader reader)
        {
            int k;

            var header = new GridFileHeader();

            byte[] buffer = new byte[NAME_LEN];

            // --- NUM_OREC

            reader.Read(buffer, 0, NAME_LEN); // string
            reader.Read(buffer, 0, 4);
            k = BitConverter.ToInt32(buffer, 0);

            // Determine if byte-swapping is needed.

            if (k != EXPECTED_OREC)
            {
                Array.Reverse(buffer, 0, 4);
                k = BitConverter.ToInt32(buffer, 0);

                if (k != EXPECTED_OREC)
                {
                    throw new FormatException("Invalid grid header (expected NUM_OREC = 11).");
                }

                reverse = true;
            }

            header.NUM_OREC = k;

            // Determine if pad-bytes are present.

            reader.Read(buffer, 0, 4);
            k = BitConverter.ToInt32(buffer, 0);

            if (k == 0)
            {
                padding = true;
            }
            else
            {
                reader.BaseStream.Seek(-4, SeekOrigin.Current);
            }

            // --- NUM_SREC

            reader.Read(buffer, 0, NAME_LEN); // string
            header.NUM_SREC = reader.ReadInt32(buffer, reverse);

            if (header.NUM_SREC != EXPECTED_SREC)
            {
                throw new FormatException("Invalid grid header (expected NUM_SREC = 11).");
            }

            if (padding)
            {
                reader.Read(buffer, 0, 4);
            }

            // --- NUM_FILE

            reader.Read(buffer, 0, NAME_LEN); // string
            header.NUM_FILE = reader.ReadInt32(buffer, reverse);

            if (padding)
            {
                reader.Read(buffer, 0, 4);
            }

            // --- GS_TYPE

            reader.Read(buffer, 0, NAME_LEN); // string
            header.GS_TYPE = reader.ReadString(buffer, NAME_LEN);

            // --- VERSION

            reader.Read(buffer, 0, NAME_LEN); // string
            header.VERSION = reader.ReadString(buffer, NAME_LEN);

            // --- SYSTEM_F

            reader.Read(buffer, 0, NAME_LEN); // string
            header.SYSTEM_F = reader.ReadString(buffer, NAME_LEN);

            // --- SYSTEM_T

            reader.Read(buffer, 0, NAME_LEN); // string
            header.SYSTEM_T = reader.ReadString(buffer, NAME_LEN);

            // --- MAJOR_F

            reader.Read(buffer, 0, NAME_LEN); // string
            header.MAJOR_F = reader.ReadDouble(buffer, reverse);

            // --- MINOR_F

            reader.Read(buffer, 0, NAME_LEN); // string
            header.MINOR_F = reader.ReadDouble(buffer, reverse);

            // --- MAJOR_T

            reader.Read(buffer, 0, NAME_LEN); // string
            header.MAJOR_T = reader.ReadDouble(buffer, reverse);

            // --- MINOR_T

            reader.Read(buffer, 0, NAME_LEN); // string
            header.MINOR_T = reader.ReadDouble(buffer, reverse);

            return(header);
        }
Пример #2
0
        private GridFileHeader ReadHeader(StreamReader reader)
        {
            var header = new GridFileHeader();

            int i = 0;

            string line;

            while (i < EXPECTED_OREC && (line = reader.ReadLine()) != null)
            {
                if (string.IsNullOrEmpty(line))
                {
                    continue;
                }

                string key = line.Substring(0, 8).Trim().ToUpperInvariant();

                string value = line.Substring(8).Trim();

                var format = CultureInfo.InvariantCulture.NumberFormat;

                switch (key)
                {
                case "NUM_OREC":
                    header.NUM_OREC = int.Parse(value);
                    if (header.NUM_OREC != EXPECTED_OREC)
                    {
                        throw new FormatException("Invalid grid header (expected NUM_OREC = 11).");
                    }
                    break;

                case "NUM_SREC":
                    header.NUM_SREC = int.Parse(value);
                    if (header.NUM_SREC != EXPECTED_SREC)
                    {
                        throw new FormatException("Invalid grid header (expected NUM_SREC = 11).");
                    }
                    break;

                case "NUM_FILE":
                    header.NUM_FILE = int.Parse(value);
                    break;

                case "GS_TYPE":
                    header.GS_TYPE = value;
                    break;

                case "VERSION":
                    header.VERSION = value;
                    break;

                case "SYSTEM_F":
                    header.SYSTEM_F = value;
                    break;

                case "SYSTEM_T":
                    header.SYSTEM_T = value;
                    break;

                case "MAJOR_F":
                    header.MAJOR_F = double.Parse(value, format);
                    break;

                case "MINOR_F":
                    header.MINOR_F = double.Parse(value, format);
                    break;

                case "MAJOR_T":
                    header.MAJOR_T = double.Parse(value, format);
                    break;

                case "MINOR_T":
                    header.MINOR_T = double.Parse(value, format);
                    break;

                default:
                    break;
                }

                i++;
            }

            if (i != EXPECTED_OREC)
            {
                throw new FormatException("Invalid grid header.");
            }

            return(header);
        }