Esempio n. 1
0
        public void SkipEclipseData(EclipseHeader header)
        {
            // Если блок данных не представляет интереса, можно его пропустить.
            // В зависимости от типа данных, расчет количества пропускаемых байт меняется:
            //
            // "CHAR" поделен на строки по 8 символов, в одном блоке 105 строк;
            // "INTE, LOGI, REAL" это 4 байтные элементы, в одном блоке 1000 элементов;
            // "DOUB" это 8 байтные элементы, в одной блоке также 1000 элементов.
            //
            // В конце и перед началом каждого блока записано по 4 байта. Это тяжелое наследние FORTRAN.
            // Последний блок может быть не целым, чтобы понять сколько байт содержится в последнем блоке,
            // расчитывается количество целых блоков "block" и количество байт, оставшихся в последнем блоке "mod".

            if (header.type == "CHAR")
            {
                int block = header.count / 105;
                int mod = header.count - block * 105;
                if (block > 0)
                    ReadBytes((2 * 4 + 8 * 105) * block);
                if (mod > 0)
                    ReadBytes(2 * 4 + 8 * mod);
            }

             if (header.type == "INTE" || header.type == "LOGI" || header.type == "REAL")
            {
                int block = header.count / 1000;
                int mod = header.count - block * 1000;
                if (block > 0)
                    ReadBytes((2 * 4 + 4 * 1000) * block);
                if (mod > 0)
                    ReadBytes(2 * 4 + 4 * mod);
            }

            if (header.type == "DOUB")
            {
                int block = header.count / 1000;
                int mod = header.count - block * 1000;
                if (block > 0)
                    ReadBytes((2 * 4 + 8 * 1000) * block);
                if (mod > 0)
                    ReadBytes(2 * 4 + 8 * mod);
            }
        }
Esempio n. 2
0
        public void ReadEclipseHeader(ref EclipseHeader header)
        {
            // Перед блоком данных всегда следует заголовок,
            // в котором указывается имя параметра, тип и количество элементов

            ReadBytes(4);
            header.keyword = ReadString(8).Trim();
            header.count = ReadInt32();
            header.type = ReadString(4);
            ReadBytes(4);
        }