АнглийскийФранцузскийИспанский

Значок OnWorks

ncgen - Интернет в облаке

Запустите ncgen в бесплатном хостинг-провайдере OnWorks через Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS

Это команда ncgen, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

ПРОГРАММА:

ИМЯ


ncgen - Из файла CDL сгенерируйте файл netCDF-3, файл netCDF-4 или программу C

СИНТАКСИС


ncgen [-b] [-c] [-f] [-k имя_формата] [-формат_код] [-л выходной язык] [-нет
netcdf_filename] [-Икс] [входной_файл]

ОПИСАНИЕ


нкген генерирует либо двоичный файл netCDF-3 (т. е. классический) .nc, либо файл netCDF-4 (т. е.
расширенный) двоичный файл .nc или файл на каком-либо исходном языке, который при запуске будет
создать соответствующий двоичный файл .nc. Вход в нкген это описание
netCDF на небольшом языке, известном как CDL (Network Common Data form Language),
описано ниже. Если input_file не указан, ввод считывается из стандартного ввода. Если нет
параметры указываются при вызове нкген, он просто проверяет синтаксис входного CDL
файл, выдающий сообщения об ошибках для любых нарушений синтаксиса CDL. Другие варианты могут быть
используется, например, для создания соответствующего файла netCDF или для создания программы на языке C
который использует интерфейс netCDF C для создания файла netCDF.

Обратите внимание, что эта версия ncgen изначально называлась ncgen4. Более старая программа ncgen имеет
был переименован в ncgen3.

нкген можно использовать с сопутствующей программой нкдамп выполнить несколько простых операций с
netCDF файлы. Например, чтобы переименовать измерение в файле netCDF, используйте нкдамп чтобы получить
Версия CDL файла netCDF, отредактируйте файл CDL, чтобы изменить имя размеров,
И использовать нкген для создания соответствующего файла netCDF из отредактированного файла CDL.

ДОПОЛНИТЕЛЬНЫЕ УСЛУГИ, НЕ ВКЛЮЧЕННЫЕ В ПАКЕТ


-b Создайте (двоичный) файл netCDF. Если -o опция отсутствует, имя файла по умолчанию
будет построен из базового имени файла CDL, с любым суффиксом, замененным на
расширение .nc. Если файл с указанным именем уже существует, он будет
перезаписан.

-c Создайте C исходный код, который создаст файл netCDF, соответствующий netCDF
Технические характеристики. Исходный код C выводится на стандартный вывод; эквивалент -lc.

-f Создайте ФОРТРАН 77 исходный код, который создаст файл netCDF, соответствующий netCDF
Технические характеристики. Исходный код выводится на стандартный вывод; эквивалент -lf77.

-o netcdf_file
Имя файла, передаваемого в вызовы «nc_create ()». Если эта опция указана, она
подразумевает (при отсутствии явного флага -l) "-b"вариант. Этот вариант
необходимо, потому что файлы netCDF не могут быть записаны непосредственно в стандартный вывод, поскольку
стандартный вывод недоступен для поиска.

-k имя_формата

-формат_код
Флаг -k указывает формат создаваемого файла и, следовательно,
модель данных, принятая ncgen (то есть netcdf-3 (классический) против netcdf-4 против netcdf-5).
В качестве ярлыка числовой формат_код вместо него можно указать. Возможный
имя_формата значения для опции -k:

'classic' или 'nc3' => классический формат netCDF

'64-битное смещение' или 'nc6' => 64-битный формат netCDF

'64-битные данные или' nc5 '=> формат netCDF-5 (64-битные данные)

'netCDF-4' 0r 'nc4' => формат netCDF-4 (расширенная модель данных)

'netCDF-4 classic model' или 'nc7' => формат классической модели netCDF-4
Принятый формат_номер аргументы, просто ярлыки для format_names:

3 => классический формат netcdf

5 => формат netcdf 5

6 => 64-битный формат netCDF

4 => формат netCDF-4 (расширенная модель данных)

7 => классический формат модели netCDF-4
Числовой код «7» используется потому, что «7 = 3 + 4» - мнемоника формата, в котором используется
Модель данных netCDF-3 для совместимости с форматом хранения netCDF-4 для повышения производительности.
Благодарим NCO за использование этих цифровых кодов вместо старых и сбивающих с толку.
форматировать числа.

Примечание: номера формата старой версии '1', '2', '3', '4' эквивалентны названиям форматов.
'nc3', 'nc6', 'nc4' или 'nc7' соответственно также по-прежнему принимаются, но не рекомендуются из-за
простая путаница между номерами форматов и названиями форматов. Различные псевдонимы имен в старом формате
также принимаются, но не рекомендуются, например, "hdf5", "расширенный-nc3" и т. д. Также обратите внимание, что -v является
принято означать то же самое, что и -k для обратной совместимости.

-x Не инициализируйте данные значениями заполнения. Это может ускорить создание большого netCDF.
файлы сильно, но позже пытается прочитать незаписанные данные из сгенерированного файла
будет нелегко обнаружить.

-l выходной_язык
Флаг -l указывает язык вывода для использования при генерации исходного кода, который
создаст или определит файл netCDF, соответствующий спецификации netCDF. Выход
выводится на стандартный вывод. Поддерживаемые в настоящее время языки имеют
следующие флаги.

c | C '=> Вывод на языке C.

f77 | fortran77 '=> Вывод на язык FORTRAN 77
; Обратите внимание, что в настоящее время поддерживается только классическая модель.

j | java '=> (экспериментальный) вывод на языке Java
; нацелен на существующий интерфейс Unidata Java, что означает, что только
поддерживается классическая модель.

Выбор выходной формат


Выбор формата вывода определяется тремя флагами.

-k флаг.

_Формат атрибут (См. ниже).

Вхождение of ВПР-5 (64-бит данные) or
netcdf-4 во входном CDL." Команда срок «netCDF-4 конструкции " означает
конструкции от расширение данным модели, всего особый связанные с производительностью
Атрибуты as
_ChunkSizes, _Дефлателевел, _Индианство, и так далее Команда срок «КДФ-5 конструкции " означает
расширенная неподписанный целое Типы разрешено in 64-бит данным модели.

Обратите внимание, что существует двусмысленность между случаем netCDF-4 и случаем CDF-5, только
Беззнаковый тип виден во входных данных.

Правила следующие, в порядке применения.

1. Если указан вывод Fortran или Java, то -k значение флага 1 (классический
модель) будет использоваться. Конфликты с использованием расширенных конструкций в CDL будут
сообщить об ошибке.

2. Если указаны и флаг -k, и атрибут _Format, флаг _Format будет
игнорируется. Если не указан флаг -k и указано значение атрибута _Format,
тогда значение флага -k будет установлено равным значению атрибута _Format. В противном случае
-k флаг не определен.

3. Если опция -k определена и согласуется с CDL, ncgen выведет
файл в запрошенной форме, иначе будет сообщено об ошибке.

4. Если флаг -k не определен и есть конструкции CDF-5, только в CDL
-k будет использоваться значение флага 5 (64-битная модель данных). Если есть true netCDF-4
конструкции в CDL, будет использоваться флаг -k со значением 3 (расширенная модель).

5. Если в CDL указаны специальные атрибуты, связанные с производительностью, значение флага -k
из 4 (классическая модель netCDF-4).

6. В противном случае ncgen установит флаг -k в значение 1 (классическая модель).

ПРИМЕРЫ


Проверьте синтаксис файла CDL `foo.cdl':

ncgen foo.cdl

Из файла CDL `foo.cdl', сгенерируйте эквивалентный двоичный файл netCDF с именем `x.nc':

ncgen -o x.nc foo.cdl

Из файла CDL `foo.cdl', сгенерируйте программу на C, содержащую функцию netCDF
вызовы, необходимые для создания эквивалентного двоичного файла netCDF с именем `x.nc':

ncgen -lc foo.cdl> xc

ИСПОЛЬЗОВАНИЕ


CDL Синтаксис Обзор
Ниже приведен пример синтаксиса CDL, описывающий файл netCDF с несколькими именованными измерениями.
(широта, долгота и время), переменные (Z, t, p, rh, lat, lon, время), атрибуты переменных (единицы,
long_name, valid_range, _FillValue) и некоторые данные. Ключевые слова CDL выделены жирным шрифтом. (Этот
пример предназначен для иллюстрации синтаксиса; реальный файл CDL будет иметь более полный
набор атрибутов, чтобы данные были более самоописательными.)
netcdf foo {// пример спецификации netCDF в CDL

Типы:
UBYTE перечисление enum_t {Ясно = 0, Кучево-дождевые облака = 1, Слоистые = 2};
непрозрачный(11) непрозрачный_t;
Int(*) влен_т;

размеры:
широта = 10, долгота = 5, время = Неограниченный ;

переменные:
длинной lat (лат), lon (долг), время (время);
плавать Z (время, широта, долгота), t (время, лат, долгота);
двойной p (время, широта, долгота);
длинной rh (время, широта, долгота);

string страна (время, широта, долгота);
UBYTE тег;

// переменные атрибуты
широта: long_name = "широта";
lat: units = "северные градусы";
lon: long_name = "долгота";
долг: единицы = "градусы_восток";
time: units = "секунды с 1992-1-1 00:00:00";

// типизированные атрибуты переменных
string Z: units = "геопотенциальные метры";
плавать Z: допустимый_ диапазон = 0., 5000 .;
двойной p: _FillValue = -9999 .;
длинной rh: _FillValue = -1;
vlen_t : globalatt = {17, 18, 19};
данным:
широта = 0, 10, 20, 30, 40, 50, 60, 70, 80, 90;
лон = -140, -118, -96, -84, -52;
группы: грамм {
Типы:
соединение cmpd_t { vlen_t ф1; перечисление_t ф2;};
} // группа g
группы: ч {
переменные:
/г/cmpd_t составнойвар;
данным:
составная переменная = {{3,4,5}, enum_t.Stratus};
} // группа h
}

Все операторы CDL заканчиваются точкой с запятой. Можно использовать пробелы, табуляции и символы новой строки
свободно для удобочитаемости. Комментарии могут следовать за символом «//» в любой строке.

Описание CDL состоит из пяти необязательных частей: Типы, размеры, переменные, данным,
начиная с ключевого слова `типы: ', `размеры: ', `переменные: 'и `данные: ',
соответственно. Обратите внимание на несколько моментов: (1) ключевое слово включает в себя конечное двоеточие, поэтому здесь
не должно быть пробелов перед символом двоеточия, и (2) ключевые слова должны быть
нижний регистр.

Команда переменные: раздел может содержать переменная Заявления и атрибут Назначения. Все
разделы могут содержать назначения глобальных атрибутов.

Кроме того, после данные: раздел, пользователь может определить серию групп (см.
пример выше). Сами группы могут содержать типы, измерения, переменные, данные и
другие (вложенные) группы.

NetCDF типы: Раздел объявляет определяемые пользователем типы. Они могут быть построены с использованием
любой из следующих типов: перечисление, влен, непрозрачныйили соединение.

NetCDF измерение используется для определения формы одного или нескольких многомерных
переменные, содержащиеся в файле netCDF. У измерения netCDF есть имя и размер. А
измерение может иметь Неограниченный размер, что означает, что переменная, использующая этот размер, может
вырасти до любой длины в этом измерении.

A переменная представляет собой многомерный массив значений одного типа. У переменной есть
имя, тип данных и фигура, описываемые списком измерений. Каждая переменная может
также связаны Атрибуты (см. ниже), а также значения данных. Имя, тип данных,
и форма переменной задаются ее объявлением в переменная раздел CDL
описание. Имя переменной может совпадать с именем измерения; по условию такой
переменная является одномерной и содержит координаты измерения, которое она называет.
Размеры не обязательно должны иметь соответствующие переменные.

NetCDF атрибут содержит информацию о переменной netCDF или обо всем netCDF
набор данных. Атрибуты используются для указания таких свойств, как единицы измерения, специальные значения, максимум.
и минимальные допустимые значения, коэффициенты масштабирования, смещения и параметры. Информация об атрибутах
представлен отдельными значениями или массивами значений. Например, «единицы» - это атрибут
представлен массивом символов, например "celsius". Атрибут имеет связанный
переменная, имя, тип данных, длина и значение. В отличие от переменных, которые
предназначены для данных, атрибуты предназначены для метаданных (данных о данных). В отличие от
netCDF-3, типы атрибутов могут быть любого типа, определенного пользователем, а также обычного встроенного
типы.

В CDL атрибут обозначается типом, переменной, ':', а затем атрибутом.
имя. Тип не является обязательным, и если он отсутствует, он будет выведен из присвоенных значений.
к атрибуту. Можно назначить Глобальный атрибуты, не связанные ни с одним
переменной в netCDF в целом, опуская имя переменной в атрибуте
декларация. Обратите внимание, что есть потенциальная двусмысленность в спецификации, такой как
х: а = ...
В этой ситуации x может быть либо типом глобального атрибута, либо именем переменной.
для атрибута. Поскольку могут существовать как тип с именем x, так и переменная с именем x, существует
это двусмысленность. Правило состоит в том, что в этой ситуации x будет интерпретироваться как тип, если
возможно, а в противном случае - как переменная.

Если не указан, тип данных атрибута в CDL является производным от типа
присвоенное ему значение. Длина атрибута - это количество присвоенных значений данных.
к нему или количество символов в присвоенной ему символьной строке. Несколько
значения присваиваются несимвольным атрибутам путем разделения значений запятыми. Все
значения, присвоенные атрибуту, должны быть одного типа.

Имена измерений, переменных, атрибутов, типов и групп CDL могут содержать любые
неконтролирующий символ utf-8, кроме символа косой черты (`/ '). Однако некоторые
символы должны экранироваться, если они используются в имени, где escape-символ - это
обратная косая черта `\ '. В частности, если ведущим символом имени является цифра
(0-9), то ему должен предшествовать escape-символ. Кроме того, символы `
! "# $% & () *,:; <=>? [] ^` ´ {} | ~ \ 'должны быть экранированы, если они встречаются где-либо в имени. Также обратите внимание
эти имена атрибутов, начинающиеся с подчеркивания (`_ '), зарезервированы для использования
Unidata и не должны использоваться в пользовательских атрибутах.

Также обратите внимание, что слова «переменная», «измерение», «данные», «группа» и «типы» являются допустимыми.
Имена CDL, но будьте осторожны, чтобы между ними и любым последующим двоеточием был пробел.
символ при использовании в качестве имени переменной. В основном это проблема с атрибутом
декларации. Например, подумайте об этом.

неткдф ... {
...
переменные:
внутренние размеры;
размеры: атрибут = 0; // это вызовет ошибку
размеры: атрибут = 0; // хорошо.
...
}

Необязательный данные: раздел спецификации CDL, где могут быть переменные netCDF
инициализирован. Синтаксис инициализации прост: имя переменной, знак равенства,
и список констант, разделенных запятыми (возможно, разделенных пробелами, табуляциями и символами новой строки)
заканчивается точкой с запятой. Для многомерных массивов последнее измерение варьируется
самый быстрый. Таким образом, для матриц используется порядок строк, а не столбцов. Если меньше значений
поставляются, чем необходимо для заполнения переменной, он расширяется зависящим от типа
`заполнить значение ', которое можно переопределить, указав значение для выделенной переменной
атрибут с именем `_FillValue '. Типы констант могут не совпадать с типом, объявленным для
Переменная; приведения выполняются, например, для преобразования целых чисел в числа с плавающей запятой. В
Константа `_ 'может использоваться для обозначения значения заполнения переменной. Если тип
переменная явно является `строковой ', тогда специальная константа` NIL` может использоваться для представления
пустая строка, которая отличается от строки нулевой длины.

Примитивный Данные Тип
колесница символы
байт 8-битные данные
короткие 16-битные целые числа со знаком
Int 32-битные целые числа со знаком
длинной (синоним Int)
int64 64-битные целые числа со знаком
плавать IEEE с плавающей запятой одинарной точности (32 бита)
реальные (синоним плавать)
двойной IEEE с плавающей запятой двойной точности (64 бита)
UBYTE беззнаковые 8-битные данные
USHORT 16-битные целые числа без знака
UINT 32-битные целые числа без знака
uint64 64-битные целые числа без знака
string строки произвольной длины

CDL поддерживает надмножество примитивных типов данных C. Имена примитивов
типы данных - это зарезервированные слова в CDL, поэтому имена переменных, размеров и
атрибуты не должны быть именами примитивных типов. В объявлениях могут быть указаны имена типов.
в верхнем или нижнем регистре.

Байты предназначены для хранения полных восьми бит данных, а нулевой байт не имеет специального
значение, как это может быть для символьных данных. нкген преобразует байт декларации колесница
объявления в выходном коде C и нестандартных BYTE объявление в выводе
Код на Фортране.

Шорты могут иметь значения от -32768 до 32767. нкген преобразует короткие декларации
короткие объявления в выходном коде C и нестандартных ЦЕЛОЕ * 2 декларация в
выводить код Fortran.

Ints может содержать значения от -2147483648 до 2147483647. нкген преобразует Int Заявления
в Int объявления в выходном коде C и в ЦЕЛОЕ объявления в выводе Fortran
код. длинной принято как синоним Int в декларациях CDL, но не рекомендуется, так как
теперь есть платформы с 64-битными представлениями для C long.

Int64 может содержать значения от -9223372036854775808 до 9223372036854775807. нкген
преобразует int64 декларации долго долго объявления в выходном коде C.

Поплавки могут содержать значения от -3.4 + 38 до 3.4 + 38. Их внешнее представление
как 32-битные IEEE нормализованные числа с плавающей запятой одинарной точности. нкген преобразует плавать
декларации плавать объявления в выходном коде C и в РЕАЛ объявления в выводе
Код на Фортране. реальные принято как синоним плавать в декларациях CDL.

Двойники могут содержать значения от -1.7 + 308 до 1.7 + 308. Их внешнее представление
представляет собой 64-битные нормализованные числа с плавающей запятой двойной точности, соответствующие стандарту IEEE. нкген
преобразует двойной декларации двойной объявления в выходном коде C и в ДВОЙНОЙ
ТОЧНОСТЬ объявления в выходном коде Fortran.

Беззнаковые аналоги вышеуказанных целочисленных типов отображаются в соответствующие
беззнаковые типы C. Их диапазоны соответственно изменены, чтобы начинаться с нуля.

Техническая интерпретация типа char заключается в том, что это 8-битное значение без знака. В
кодировка из 256 возможных значений по умолчанию не указана. Переменная типа char может
быть помечены атрибутом «_Encoding» для обозначения используемого набора символов: US-
ASCII, ISO-8859-1 и т. Д. Обратите внимание, что указание кодировки UTF-8 эквивалентно
с указанием US-ASCII Это связано с тем, что многобайтовые символы UTF-8 не могут быть сохранены в
8-битный символ. Единственными допустимыми однобайтовыми значениями UTF-8 по определению являются 7-битные US-
Кодирование ASCII с нулевым старшим битом.

По умолчанию предполагается, что строки кодируются с использованием UTF-8. Обратите внимание, что это означает, что
в строке могут присутствовать многобайтовые кодировки UTF-8, поэтому возможно, что число
различных символов UTF-8 в строке меньше, чем количество 8-битных байтов, используемых для
сохранить строку.

CDL Константы
Константы, присвоенные атрибутам или переменным, могут быть любого из основных типов netCDF.
Синтаксис констант аналогичен синтаксису C, за исключением того, что суффиксы типов должны быть
добавлены к шортам и поплавкам, чтобы отличать их от длинных и двойных.

A байт Константа представлена ​​целочисленной константой с добавленной буквой `b '(или` B'). В
старый API netCDF-2, байтовые константы также могли быть представлены с использованием одиночных символов или
стандартные escape-последовательности символов C, такие как `a 'или` 0. Это все еще поддерживается для
обратная совместимость, но не рекомендуется, чтобы четко различать числовые
байтовый тип и текстовый тип char. Примеры байтовых констант включают:
0b // нулевой байт
-1b // -1 как 8-битный байт
255b // также -1 как 8-битный байт со знаком

короткие Целочисленные константы предназначены для представления 16-битовых величин со знаком. Форма
в А короткие Константа - это целочисленная константа с добавленными буквами "s" или "S". Если короткие
константа начинается с `0 ', она интерпретируется как восьмеричная, за исключением того, что если она начинается с` 0x',
он интерпретируется как шестнадцатеричная константа. Например:
-2 с // короткое -2
0123s // восьмеричный
0x7ffs // шестнадцатеричный

Int Целочисленные константы предназначены для представления 32-битных величин со знаком. Форма
an Int Константа - обычная целочисленная константа, хотя допустимо
добавьте одиночный `l 'или` L' (опять же, не рекомендуется). Однако будьте осторожны, суффикс L
интерпретируется как 32-битное целое число, а не как 64-битное целое число. Это может сбивать с толку
поскольку тип C long может быть как 32-битным, так и 64-битным.

Если Int константа начинается с `0 ', она интерпретируется как восьмеричная, за исключением того, что если она начинается
с `0x 'он интерпретируется как шестнадцатеричная константа (но см. непрозрачные константы ниже).
Примеры действительных Int константы включают:
-2
1234567890L
0123 // восьмеричный
0x7ff // шестнадцатеричный

int64 Целочисленные константы предназначены для представления 64-битовых величин со знаком. Форма
из int64 Константа - это целочисленная константа с добавленными буквами "ll" или "LL". Если int64
константа начинается с `0 ', она интерпретируется как восьмеричная, за исключением того, что если она начинается с` 0x',
он интерпретируется как шестнадцатеричная константа. Например:
-2ll // беззнаковый -2
0123LL // восьмеричный
0x7ffLL // шестнадцатеричный

Константы типа с плавающей запятой плавать подходят для представления с плавающей запятой
данные с точностью около семи значащих цифр. Форма плавать постоянная
то же самое, что и константа с плавающей запятой C с добавлением `f 'или` F'. Например,
все следующие приемлемы плавать константы:
-2.0ф
3.14159265358979f // будет усечено с меньшей точностью
1.ф

Константы типа с плавающей запятой двойной подходят для представления с плавающей запятой
данные с точностью около шестнадцати значащих цифр. Форма двойной постоянная
то же, что и константа с плавающей запятой C. Могут быть добавлены необязательные символы "d" или "D". Для
пример, все следующие приемлемы двойной константы:
-2.0
3.141592653589793
1.0e-20
1.д

Целочисленные константы без знака могут быть созданы путем добавления символа 'U' или 'u' между
константа и любой конечный спецификатор размера или сразу в конце размера
спецификатор. Таким образом, можно сказать, например, 10U, 100su, 100000ul или 1000000llu.

Односимвольные константы могут быть заключены в одинарные кавычки. Если последовательность из одного или нескольких
заключены в двойные кавычки, то их интерпретация должна выводиться из
контекст. Если набор данных создан с использованием классической модели netCDF, то все такие константы
интерпретируются как массив символов, поэтому каждый символ в константе интерпретируется как
если бы это был одиночный символ. Если набор данных является расширенным netCDF, то константа может
интерпретироваться как классическая модель или как настоящая струна (см. ниже) в зависимости от
тип атрибута или переменной, в которой содержится строка.

Интерпретация символьных констант заключается в том, что те, которые находятся в печатаемом диапазоне ASCII
('' .. '~') предполагается, что они закодированы как 1-байтовое подмножество UTF-8, что эквивалентно
US-ASCII. Во всех случаях для значений из
От 0 до 127. Допускаются значения больше 127, но их кодировка не определена. Для
netCDF расширен, использование типа char не рекомендуется в пользу строкового типа.

Ниже приведены некоторые примеры символьных констант.
'а' // ASCII `а '
«а» // эквивалент «а»
"Two \ nlines \ n" // 10-символьная строка с двумя встроенными символами новой строки
"звонок: \ 007" // строка, содержащая звонок ASCII
Обратите внимание, что символьный массив netCDF "a" подходит для одноэлементной переменной, поскольку нет
предполагается завершающий символ NULL. Однако нулевой байт в массиве символов равен
интерпретируется как конец значимых символов нкдамп программа, следуя
Соглашение C. Следовательно, байт NULL не должен быть встроен в строку символов, если только
в конце: используйте байт вместо этого тип данных для байтовых массивов, содержащих нулевой байт.

строка константы, как и символьные константы, представлены в двойных кавычках. Этот
представляет собой потенциальную двусмысленность, поскольку многосимвольная строка также может указывать на
размерное символьное значение. Устранение неоднозначности обычно происходит в зависимости от контекста, но следует соблюдать осторожность.
принято, чтобы указатьstring тип, чтобы обеспечить правильный выбор. Предполагаются строковые константы
всегда иметь кодировку UTF-8. Это, в частности, означает, что строковая константа может фактически
содержат многобайтовые символы UTF-8. Специальная константа NIL может использоваться для представления
пустая строка, которая отличается от строки нулевой длины.

Непрозрачные константы представлены как последовательности шестнадцатеричных цифр, которым предшествуют 0X или 0x:
0xaa34ffff, например. Эти константы по-прежнему могут использоваться как целочисленные константы и будут
быть усеченным или расширенным по мере необходимости.

Соединение постоянная Expressions
Чтобы присвоить значения переменным (или атрибутам), тип которых определяется пользователем,
нотация констант была расширена и теперь включает в себя последовательности констант, заключенные в
фигурные скобки (например, "{" ... "}"). Такая константа называется составной константой, и
составные константы могут быть вложенными.

Для типа "T (*) vlen_t", где T - некоторый другой произвольный базовый тип, константы для этого
следует указать следующим образом.
vlen_t var [2] = {t11, t12, ... t1N}, {t21, t22, ... t2m};
Предполагается, что значения tij являются константами типа T.

Дан тип «составной cmpd_t {T1 f1; T2 f2 ... Tn fn}», где Ti - другие произвольные
базовые типы, константы для этого должны быть указаны следующим образом.
cmpd_t var [2] = {t11, t12, ... t1N}, {t21, t22, ... t2n};
Предполагается, что значения tij являются константами типа Ti. Если поля отсутствуют, то
они будут установлены с использованием любого указанного значения заполнения или значения заполнения по умолчанию для базового типа поля.

Общий набор правил использования фигурных скобок определен в Указание Даталисты .
внизу.

Обзорный Правила
С добавлением групп пространство имен для определенных объектов перестает быть плоским.
Ссылки (имена) любого типа, размера или переменной могут иметь префикс абсолютного
путь, определяющий конкретное объявление. Таким образом можно сказать
переменные:
/ g1 / g2 / t1 v1;
Используемый тип (t1) - это тип в группе g2, которая, в свою очередь, вложена в
группа g1. Сходство этой записи с путями к файлам Unix является преднамеренным, и можно
рассматривать группы как форму структуры каталогов.

Если имя не имеет префикса, тогда применяются правила области, чтобы найти указанный
декларация. В настоящее время существует три правила: одно для размеров, одно для типов и
константы перечисления и одна для всех остальных.

Когда используется имя измерения без префикса (как в объявлении переменной), сначала ncgen
ищет размер во внешней группе. Если не найден
там, затем он смотрит в группу, в которую входит эта группа. Это продолжается до
группировать иерархию до тех пор, пока не будет найдено измерение, или пока не останется групп для
поиск.

2. Когда используется имя типа или константа перечисления без префикса, ncgen ищет
дерево группы с использованием предварительного поиска в глубину. По сути, это означает, что
найдет соответствующее объявление, которое текстуально предшествует ссылке в cdl
файл, который является «высшим» в иерархии групп.

3. Для всех остальных имен ищется только непосредственно включающая группа.

И последнее замечание. Прямые ссылки не допускаются. Это означает, что указание для
Например, / g1 / g2 / t1 завершится ошибкой, если эта ссылка встречается до того, как определены g1 и / или g2.

Указание Перечисление Константы
Ссылки на константы перечисления (в списках данных) могут быть неоднозначными, поскольку одно и то же
Имя константы перечисления может быть определено более чем в одном перечислении. Если файл cdl
указал неоднозначную константу, тогда ncgen сообщит об ошибке. Такие константы могут быть
устраняется двояко.

1. Префикс константы перечисления с именем перечисления, разделенным знаком
точка: перечисление.econst, Например.

2. Если одного случая недостаточно для устранения неоднозначности константы перечисления, то один
должен указать точный тип перечисления, используя групповой путь: /g1/g2/enum.econst,
например.

Особый Атрибуты
Можно указать специальные виртуальные атрибуты для предоставления информации, связанной с производительностью.
о формате файла и о свойствах переменных. Файл должен быть файлом netCDF-4 для
они вступят в силу.

Эти специальные виртуальные атрибуты на самом деле не являются частью файла, они просто
удобный способ установить разные свойства данных в CDL

В настоящее время поддерживаются следующие специальные атрибуты: `_Format ',` _Fletcher32,
_ChunkSizes, _Endianness, _DeflateLevel, _Shuffle и _Storage.

_Format - это глобальный атрибут, определяющий вариант формата netCDF. Его значение должно быть
единственная строка, соответствующая одному из "классического", "64-битного смещения", "64-битных данных", "netCDF-4" или
Классическая модель netCDF-4.

Все остальные специальные атрибуты являются переменными атрибутами. По сути, все тогда
сопоставить с некоторой соответствующей функцией `nc_def_var_XXX ', как определено в API netCDF-4. Для
атрибуты, которые по сути являются логическими (_Fletcher32, _Shuffle и _NOFILL),
значение true может быть указано с помощью строк `true 'или` 1' или с помощью целого числа 1.
Значение false предполагает либо `false ',` 0', либо целое число 0. Связанные действия
с этими атрибутами заключаются в следующем.

1. `_Fletcher32 'устанавливает свойство` fletcher32' для переменной.

2. "_Endianness" может быть либо "маленьким", либо "большим", в зависимости от того, как хранится переменная, когда
впервые написано.

3. _DeflateLevel - целое число от 0 до 9 включительно, если сжатие было
указано для переменной.

4. «_Shuffle» указывает, следует ли использовать фильтр перемешивания.

5. _Storage может быть непрерывным или разбитым на части.

6. «_ChunkSizes» - это список размеров блоков для каждого измерения переменной.

Обратите внимание, что такие атрибуты, как "add_offset" или "scale_factor" не имеют особого значения для
ncgen. Эти атрибуты в настоящее время являются соглашениями и обрабатываются над уровнем библиотеки с помощью
другие служебные пакеты, например NCO.

Указание Даталисты
Определение списков данных для переменных в разделе `data:` может быть несколько сложным.
Есть некоторые правила, которые необходимо соблюдать, чтобы гарантировать, что списки данных анализируются правильно.
пользователя ncgen.

Во-первых, верхний уровень автоматически считается списком элементов, поэтому его не следует
внутри {...}. Это означает, что если переменная является скаляром, будет один верхний
элемент level, и если переменная является массивом, будет N элементов верхнего уровня. Для
к каждому элементу списка верхнего уровня должны применяться следующие правила.

1. Экземпляры НЕОГРАНИЧЕННЫХ измерений (кроме первого измерения) должны быть окружены
на {...}, чтобы указать размер.

2. Составные экземпляры должны быть встроены в {...}

3. Нескалярные поля составных экземпляров должны быть вложены в {...}.

4. Экземпляры vlens должны быть окружены {...}, чтобы указать размер.

Списки данных, связанные с атрибутами, неявно являются вектором (т. Е. Списком) значений
тип атрибута и приведенные выше правила должны применяться с учетом этого.

7. Никакое другое использование скобок не допускается.

Обратите внимание, что одним из следствий этих правил является то, что массивы значений не могут иметь подмассивы.
в фигурных скобках. Рассмотрим, например, int var (d1) (d2) ... (dn), где ни один из d2 ... dn не является
безлимитный. Список данных для этой переменной должен быть единственным списком целых чисел, где
количество целых чисел не более D = d1 * d2 * ... dn значений; обратите внимание, что список может быть меньше
чем D, и в этом случае значения заполнения будут использоваться для заполнения списка.

Правило 6 о списке атрибутов имеет следующие последствия. Если тип
атрибут является составным (или vlen) типом, и если количество записей в списке равно единице,
тогда составные экземпляры должны быть заключены в фигурные скобки.

Указание Характер Даталисты
Указание списков данных для переменных типа char также имеет некоторые сложности. считайте, для
пример
размеры: u = НЕОГРАНИЧЕННЫЙ; d1 = 1; d2 = 2; d3 = 3;
d4=4; d5=5; u2=UNLIMITED;
переменные: char var (d4, d5);
datalist: var = "1", "два", "три";

У нас есть двадцать элементов var для заполнения (d5 X d4), и у нас есть три строки длиной 1, 3,
5. Как нам присвоить символы в строках двадцати элементам?

Это сложно, потому что желательно имитировать исходный ncgen (ncgen3). В
Базовый алгоритм теоретически выглядит следующим образом.

1. Предположим, у нас есть набор измерений D1..Dn, где D1 необязательно может быть Неограниченным.
измерение. Предполагается, что размеры Di всем известны (в том числе неограниченные
размеры).

2. Учитывая последовательность строковых или символьных констант C1..Cm, наша цель - построить
одиночная струна, длина которой равна произведению от D1 до Dn. Обратите внимание, что для целей
в этом алгоритме символьные константы рассматриваются как строки размера 1.

3. Построить Dx = кросс-произведение от D1 до D (n-1).

4. Для каждой константы Ci при необходимости добавьте символы-заполнители, чтобы ее длина была кратна
Дн.

5. Объедините модифицированный C1..Cm, чтобы получить строку S.

6. Добавьте символы заполнения к S, чтобы его длина была кратна Dn.

8. Если S длиннее, чем Dx * Dn, то обрезать и сгенерировать предупреждение.

Следует отметить еще три случая.

1. Если существует только одно неограниченное измерение, то все константы равны
конкатенированные символы и символы заполнения добавляются в конец результирующей строки, чтобы сделать
его длина должна быть неограниченного измерения. Если длина больше, чем
неограниченный размер, то он усекается с предупреждением.

2. В случае набора символов vlen, например, "char (*) vlen_t". мы просто
объединить все константы без заполнения.

3. В случае символьного атрибута мы просто объединяем все константы.

В netcdf-4 размеры, отличные от первого, могут быть неограниченными. Конечно по правилам
выше, внутренние неограниченные экземпляры должны быть ограничены {...}. Например.
переменные: char var (u, u2);
datalist: var = {"1", "два"}, {"три"};
В этом случае эффективная длина u будет равна двум. В каждом экземпляре u2
будут применяться приведенные выше правила, ведущие к этому.
datalist: var = {"1", "t", "w", "o"}, {"t", "h", "r", "e", "e"};
Эффективный размер u2 будет максимальным из двух длин экземпляра (в данном случае пяти).
и более короткий будет дополнен, чтобы произвести это.
datalist: var = {"1", "t", "w", "o", "\ 0"}, {"t", "h", "r", "e", "e"};

Рассмотрим еще более сложный случай.
переменные: char var (u, u2, u3);
datalist: var = {{"1", "два"}}, {{"три"}, {"четыре", "xy"}};
В этом случае эффективная длина u снова будет равна двум. Размеры u2 будут иметь
размер = макс (1,2) = 2; В каждом экземпляре u2 будут применяться приведенные выше правила, что приведет к
.
datalist: var = {{"1", "t", "w", "o"}}, {{"t", "h", "r", "e", "e"}, {"f "," o "," u "," r "," x "," y "}};
Эффективный размер u3 будет максимальным из двух длин экземпляра (в данном случае - шести).
и более короткие будут дополнены, чтобы произвести это.
datalist: var = {{"1", "t", "w", "o", "", ""}}, {{"t", "h", "r", "e", "e" "," "}, {" f "," o "," u "," r "," x "," y "}};
Однако обратите внимание, что первый экземпляр u2 меньше максимальной длины u2, поэтому нам нужно
чтобы добавить наполнитель для другого экземпляра u2, производя это.
datalist: var = {{"1", "t", "w", "o", "", ""}, {"", "", "", "", "", ""}}, {{"t", "h", "r", "e", "e", ""}, {"f", "o", "u", "r", "x", "y" }};

Используйте ncgen онлайн с помощью сервисов onworks.net


Бесплатные серверы и рабочие станции

Скачать приложения для Windows и Linux

  • 1
    авторизация
    авторизация
    AuthPass - это пароль с открытым исходным кодом
    менеджер с поддержкой популярных и
    проверенный Keepass (kdbx 3.x И kdbx 4.x ...
    Скачать авторизацию
  • 2
    Zabbix
    Zabbix
    Zabbix — это открытый корпоративный класс.
    исходное распределенное решение для мониторинга
    предназначен для наблюдения и отслеживания
    производительность и доступность сети
    серверы, устройства...
    Скачать Zabbix
  • 3
    KDiff3
    KDiff3
    Этот репозиторий больше не поддерживается
    и хранится в архивных целях. Видеть
    https://invent.kde.org/sdk/kdiff3 for
    новейший код и
    https://download.kde.o...
    Скачать KDiff3
  • 4
    USBLoaderGX
    USBLoaderGX
    USBLoaderGX — это графический интерфейс для
    USB-загрузчик Ванинкоко, основанный на
    libwiigui. Он позволяет перечислять и
    запуск игр Wii, игр Gamecube и
    доморощенный на Wii и WiiU...
    Скачать USBLoaderGX
  • 5
    Жар-птица
    Жар-птица
    СУБД Firebird предлагает функции ANSI SQL
    & работает на Linux, Windows и
    несколько Unix-платформ. Функции
    отличный параллелизм и производительность
    & сила...
    Скачать Firebird
  • 6
    KompoZer
    KompoZer
    KompoZer — это wysiwyg HTML-редактор, использующий
    кодовая база Mozilla Composer. В виде
    Разработка Нву остановлена
    в 2005 году KompoZer исправляет множество ошибок и
    добавляет ф...
    Скачать Композер
  • Больше »

Команды Linux

Ad