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); }
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); }