Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 공급자에서 실행할 수 있는 ncgen 명령입니다.
프로그램:
이름
ncgen - CDL 파일에서 netCDF-3 파일, netCDF-4 파일 또는 C 프로그램 생성
개요
ncgen [-b] [-c] [-f] [-k 형식_이름] [-형식 코드] [-엘 출력 언어] [-아니요
netcdf_파일 이름] [-x] [입력 파일]
기술
엔씨젠 netCDF-3(예: 클래식) 바이너리 .nc 파일, netCDF-4(예:
향상된) 바이너리 .nc 파일 또는 실행될 때 일부 소스 언어로 된 파일
해당 바이너리 .nc 파일을 구성합니다. 에 대한 입력 엔씨젠 에 대한 설명입니다.
CDL(네트워크 공통 데이터 형식 언어)로 알려진 작은 언어로 된 netCDF 파일,
아래에서 묘사 되어진. input_file이 지정되지 않은 경우 표준 입력에서 입력을 읽습니다. 아니오인 경우
옵션은 호출 시 지정됩니다. 엔씨젠, 입력 CDL의 구문만 확인합니다.
CDL 구문 위반에 대한 오류 메시지를 생성하는 파일입니다. 다른 옵션은 다음과 같습니다.
예를 들어 해당 netCDF 파일을 생성하거나 C 프로그램을 생성하는 데 사용됩니다.
netCDF C 인터페이스를 사용하여 netCDF 파일을 생성합니다.
이 버전의 ncgen은 원래 ncgen4라고 했습니다. 이전 ncgen 프로그램에는
ncgen3으로 이름이 변경되었습니다.
엔씨젠 컴패니언 프로그램과 함께 사용할 수 있습니다. ncdump 몇 가지 간단한 작업을 수행하기 위해
netCDF 파일. 예를 들어, netCDF 파일에서 차원의 이름을 바꾸려면 다음을 사용하십시오. ncdump 를 얻을 수
netCDF 파일의 CDL 버전, CDL 파일을 편집하여 치수 이름 변경,
사용 엔씨젠 편집된 CDL 파일에서 해당 netCDF 파일을 생성합니다.
옵션
-b (이진) netCDF 파일을 만듭니다. 만약 -o 옵션이 없으면 기본 파일 이름
CDL 파일의 기본 이름에서 구성되며 모든 접미사는 다음으로 대체됩니다.
`.nc' 확장자. 지정된 이름의 파일이 이미 존재하는 경우
덮어썼다.
-c 생성 C netCDF와 일치하는 netCDF 파일을 생성하는 소스 코드
사양. C 소스 코드는 표준 출력에 기록됩니다. -lc와 동일합니다.
-f 생성 포트란 77 netCDF와 일치하는 netCDF 파일을 생성하는 소스 코드
사양. 소스 코드는 표준 출력으로 기록됩니다. -lf77과 동일합니다.
-o netcdf_파일
"nc_create()" 호출에 전달할 파일의 이름입니다. 이 옵션을 지정하면
(명시적인 -l 플래그가 없는 경우) "-b" 옵션입니다. 이 옵션은
netCDF 파일은 표준 출력에 직접 쓸 수 없기 때문에 필요합니다.
표준 출력은 검색할 수 없습니다.
-k 형식_이름
-형식 코드
-k 플래그는 생성할 파일의 형식을 지정하고 추론에 의해
ncgen에서 허용하는 데이터 모델(예: netcdf-3(클래식) 대 netcdf-4 대 netcdf-5).
바로 가기로 숫자 형식 코드 대신 지정할 수 있습니다. 가능한
형식_이름 -k 옵션의 값은 다음과 같습니다.
'classic' 또는 'nc3' => netCDF 클래식 형식
'64비트 오프셋' 또는 'nc6' => netCDF 64비트 형식
'64비트 데이터 또는 'nc5' => netCDF-5(64비트 데이터) 형식
'netCDF-4' 0r 'nc4' => netCDF-4 형식(향상된 데이터 모델)
'netCDF-4 클래식 모델' 또는 'nc7' => netCDF-4 클래식 모델 형식
가능 형식_번호 format_names의 바로 가기인 인수는 다음과 같습니다.
3 => netcdf 클래식 형식
5 => netcdf 5 형식
6 => netCDF 64비트 형식
4 => netCDF-4 형식(향상된 데이터 모델)
7 => netCDF-4 클래식 모델 형식
숫자 코드 "7"이 사용되는 이유는 "7=3+4",
성능을 위한 netCDF-3 스토리지 형식과의 호환성을 위한 netCDF-4 데이터 모델.
이전의 혼란스러운 숫자 코드 대신 이러한 숫자 코드를 사용한 NCO 덕분입니다.
형식 번호.
참고: 이전 버전 형식 번호 '1', '2', '3', '4'는 형식 이름과 동일합니다.
각각 'nc3', 'nc6', 'nc4' 또는 'nc7'도 허용되지만 다음과 같은 이유로 더 이상 사용되지 않습니다.
형식 번호와 형식 이름 사이의 쉬운 혼동. 다양한 이전 형식 이름 별칭
허용되지만 더 이상 사용되지 않습니다(예: 'hdf5', 'enhanced-nc3' 등). 또한 -v는
이전 버전과의 호환성을 위해 -k와 동일한 의미로 받아들여집니다.
-x 채우기 값으로 데이터를 초기화하지 마십시오. 이렇게 하면 대규모 netCDF 생성 속도를 높일 수 있습니다.
파일을 크게 만들지 만 나중에 생성 된 파일에서 기록되지 않은 데이터를 읽으려고 시도합니다.
쉽게 감지되지 않습니다.
-l 출력 언어
-l 플래그는 소스 코드를 생성할 때 사용할 출력 언어를 지정합니다.
netCDF 사양과 일치하는 netCDF 파일을 생성하거나 정의합니다. 출력
표준 출력에 기록됩니다. 현재 지원되는 언어는
다음 플래그.
c|C' => C 언어 출력.
f77|fortran77' => FORTRAN 77 언어 출력
; 현재 클래식 모델만 지원됩니다.
j|java' => (실험적) Java 언어 출력
; 기존 Unidata Java 인터페이스를 대상으로 합니다.
클래식 모델이 지원됩니다.
선택 전에, 출력 체재
출력 형식의 선택은 세 가지 플래그로 결정됩니다.
-k 깃발.
_체재 속성 (참조 아래).
발생 of CDF-5 (64비트 데이터) or
netcdf-4는 입력 CDL에서 구성합니다." The 기간 "netCDF-4 구조" 방법
구성 에 전에, 강화 데이터 모델, 지원 퀴즈를 풀어보고, 특별한 성능 관련
속성 이러한 as
_청크 크기, _디플레이트레벨, _엔디안, 등 The 기간 "CDF-5 구조" 방법
extended 부호 정수 유형 수 in 전에, 64-bit 데이터 모델입니다.
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비트 데이터 모델)가 사용됩니다. 진정한 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', netCDF 함수를 포함하는 C 프로그램 생성
`라는 동등한 바이너리 netCDF 파일을 만드는 데 필요한 호출x.nc':
ncgen -lc foo.cdl >xc
사용법
CDL 통사론 회사 개요
다음은 여러 명명된 차원이 있는 netCDF 파일을 설명하는 CDL 구문의 예입니다.
(위도, 경도 및 시간), 변수(Z, t, p, rh, 위도, 경도, 시간), 변수 속성(단위,
long_name, valid_range, _FillValue) 및 일부 데이터. CDL 키워드는 굵게 표시됩니다. (이것
예제는 구문을 설명하기 위한 것입니다. 실제 CDL 파일에는 더 완전한
데이터가 더 완벽하게 자체 설명될 수 있도록 속성 집합).
netcdf foo { // CDL의 netCDF 사양 예시
유형:
유바이트 열거 형 enum_t {클리어 = 0, 적란운 = 1, 층운 = 2};
불투명체(11) 불투명_t;
INT(*) vlen_t;
치수:
위도 = 10, 경도 = 5, 시간 = 무제한 ;
변수:
긴 위도(위도), 경도(경도), 시간(시간);
뜨다 Z(시간, 위도, 경도), t(시간, 위도, 경도);
더블 p(시간, 위도, 경도);
긴 rh(시간, 위도, 경도);
현 국가(시간, 위도, 경도);
유바이트 꼬리표;
// 변수 속성
lat:long_name = "위도";
위도:단위 = "도북";
lon:long_name = "경도";
lon:units = "degrees_east";
time:units = "1992-1-1 00:00:00 이후 초";
// 입력된 변수 속성
현 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;
그룹: g {
유형:
화합물 cmpd_t { vlen_t f1; enum_t f2;};
} // 그룹 g
그룹: 시간 {
변수:
/지/cmpd_t 화합물바;
데이터:
compoundvar = {{3,4,5}, enum_t.Stratus } ;
} // 그룹 H
}
모든 CDL 문은 세미콜론으로 종료됩니다. 공백, 탭 및 줄 바꿈을 사용할 수 있습니다.
가독성을 위해 자유롭게. 주석은 '//' 문자 다음에 올 수 있습니다.
CDL 설명은 XNUMX개의 선택적 부분으로 구성됩니다. 유형, 치수, 변수, 데이터,
키워드로 시작 `유형:', `차원:', `변수:'및 `데이터:',
각기. 몇 가지 사항에 유의하십시오. (1) 키워드에는 후행 콜론이 포함되어 있습니다.
콜론 문자 앞에는 공백이 있어서는 안 되며 (2) 키워드는
소문자.
The 변수: 섹션에 포함될 수 있음 변수 선언 그리고 속성 할당. 모든
섹션에는 전역 속성 할당이 포함될 수 있습니다.
또한, 이후 데이터 : 섹션에서 사용자는 일련의 그룹을 정의할 수 있습니다(
위의 예). 그룹 자체에는 유형, 차원, 변수, 데이터 및
기타(중첩된) 그룹.
netCDF 유형 : 섹션은 사용자 정의 유형을 선언합니다. 이들은 다음을 사용하여 구성할 수 있습니다.
다음 유형 중 하나: 열거 형, 블렌, 불투명체및 화합물.
넷CDF 치수 하나 이상의 다차원의 모양을 정의하는 데 사용됩니다.
netCDF 파일에 포함된 변수. netCDF 차원에는 이름과 크기가 있습니다. ㅏ
치수는 무제한 크기, 즉 이 차원을 사용하는 변수는
해당 차원의 길이로 자랍니다.
A 변수 같은 유형의 값으로 구성된 다차원 배열을 나타냅니다. 변수에는
차원 목록에서 설명하는 이름, 데이터 유형 및 모양. 각 변수는
또한 관련 속성 (아래 참조) 및 데이터 값. 이름, 데이터 유형,
변수의 모양은 선언에 의해 지정됩니다. 변수 CDL 섹션
설명. 변수는 차원과 이름이 같을 수 있습니다. 그러한 관습에 의해
변수는 XNUMX차원이며 이름을 지정하는 차원의 좌표를 포함합니다.
차원에는 해당 변수가 없어도 됩니다.
넷CDF 속성 netCDF 변수 또는 전체 netCDF에 대한 정보를 포함합니다.
데이터 세트. 속성은 단위, 특수 값, 최대값과 같은 속성을 지정하는 데 사용됩니다.
및 최소 유효 값, 스케일링 계수, 오프셋 및 매개변수. 속성 정보
단일 값 또는 값 배열로 표시됩니다. 예를 들어 "단위"는 속성입니다.
"celsius"와 같은 문자 배열로 표현됩니다. 속성에 연결된
변수, 이름, 데이터 유형, 길이 및 값. 다음과 같은 변수와 대조적으로
데이터를 위한 속성은 메타데이터(데이터에 대한 데이터)를 위한 것입니다. 같지 않은
netCDF-3, 속성 유형은 사용자 정의 유형일 수 있으며 일반적인 내장 유형일 수 있습니다.
유형.
CDL에서 속성은 유형, 변수, ':', 속성으로 지정됩니다.
이름. 유형은 선택 사항이며 누락된 경우 할당된 값에서 유추됩니다.
속성에. 할당이 가능하다 글로벌 어떤 것과도 연결되지 않은 속성
속성에서 변수 이름을 생략하여 전체적으로 netCDF에 변수
선언. 사양에 다음과 같은 잠재적 모호성이 있음에 유의하십시오.
x : 에 = ...
이 상황에서 x는 전역 속성의 유형이거나 변수 이름일 수 있습니다.
속성에 대해. x라는 유형과 x라는 변수가 모두 있을 수 있으므로
모호함이다. 규칙은 이 상황에서 다음과 같은 경우 x가 유형으로 해석된다는 것입니다.
가능하고 그렇지 않으면 변수로.
지정하지 않으면 CDL의 속성 데이터 유형은
할당된 값입니다. 속성의 길이는 할당된 데이터 값의 수입니다.
또는 할당된 문자열의 문자 수입니다. 다수의
값은 쉼표로 값을 구분하여 비문자 속성에 할당됩니다. 모두
속성에 할당된 값은 동일한 유형이어야 합니다.
CDL 차원, 변수, 속성, 유형 및 그룹의 이름에는 다음이 포함될 수 있습니다.
슬래시 문자(`/')를 제외한 비제어 utf-8 문자. 그러나 특정
문자는 이름에 사용되는 경우 이스케이프해야 합니다. 여기서 이스케이프 문자는
백슬래시 `\'. 특히 이름 앞의 문자가 숫자인 경우
(0-9)인 경우 이스케이프 문자가 앞에 와야 합니다. 또한 '
!"#$%&()*,:;<=>?[]^`´{}|~\'는 이름의 어디에서나 나타나는 경우 이스케이프해야 합니다. 또한 참고
밑줄(`_')로 시작하는 속성 이름은
Unidata는 사용자 정의 속성에 사용하면 안 됩니다.
`variable', `dimension', `data', `group' 및 `types'라는 단어도 사용할 수 있습니다.
CDL 이름, 그러나 이름과 뒤따르는 콜론 사이에 공백이 있어야 합니다.
변수 이름으로 사용될 때 문자. 이것은 대부분 속성의 문제입니다.
선언. 예를 들어, 이것을 고려하십시오.
netcdf ... {
...
변수:
정수 차원;
치수: 속성=0 ; // 오류가 발생합니다.
치수: 속성=0 ; // 괜찮습니다.
...
}
선택적 데이터 : CDL 사양의 섹션은 netCDF 변수가 있을 수 있는 곳입니다.
초기화. 초기화 구문은 간단합니다. 변수 이름, 등호,
및 쉼표로 구분된 상수 목록(공백, 탭 및 줄 바꿈으로 구분될 수 있음)
세미콜론으로 끝납니다. 다차원 배열의 경우 마지막 차원이 다릅니다.
가장 빠른. 따라서 행렬에는 열 순서가 아닌 행 순서가 사용됩니다. 값이 적을 경우
변수를 채우는 데 필요한 것보다 많이 제공되면 유형 종속으로 확장됩니다.
고유 변수에 대한 값을 제공하여 재정의할 수 있는 '값 채우기'
'_FillValue'라는 속성입니다. 상수 유형은 다음에 대해 선언된 유형과 일치할 필요가 없습니다.
변수; 예를 들어 정수를 부동 소수점으로 변환하기 위해 강제 변환이 수행됩니다. NS
상수 `_'는 변수에 대한 채우기 값을 지정하는 데 사용할 수 있습니다. 의 유형인 경우
변수가 명시적으로 `문자열'이면 특수 상수 `NIL`을 사용하여 다음을 나타낼 수 있습니다.
길이가 XNUMX인 문자열과 다른 nil 문자열.
원시적 인 Data 유형
이륜 전차 문자
바이트 8 비트 데이터
짧은 16비트 부호 있는 정수
INT 32비트 부호 있는 정수
긴 (동의어 INT)
int64 64비트 부호 있는 정수
뜨다 IEEE 단정밀도 부동 소수점(32비트)
현실 (동의어 뜨다)
더블 IEEE 배정밀도 부동 소수점(64비트)
유바이트 부호 없는 8비트 데이터
짧은 16비트 부호 없는 정수
단위 32비트 부호 없는 정수
uint64 64비트 부호 없는 정수
현 임의 길이 문자열
CDL은 C의 기본 데이터 유형의 상위 집합을 지원합니다. 기본 데이터 유형의 이름
데이터 유형은 CDL에서 예약어이므로 변수 이름, 차원 및
속성은 기본 유형 이름이 아니어야 합니다. 선언에서 유형 이름을 지정할 수 있습니다.
대문자 또는 소문자.
바이트는 전체 XNUMX비트의 데이터를 보유하기 위한 것이며 XNUMX바이트는 특별한 의미가 없습니다.
문자 데이터의 경우 중요할 수 있습니다. 엔씨젠 변환 바이트 선언 이륜 전차
출력 C 코드 및 비표준 선언 BYTE 출력 선언
포트란 코드.
Shorts는 -32768에서 32767 사이의 값을 보유할 수 있습니다. 엔씨젠 변환 짧은 선언
짧은 출력 C 코드 및 비표준 선언 정수*2 선언
포트란 코드를 출력합니다.
정수는 -2147483648에서 2147483647 사이의 값을 보유할 수 있습니다. 엔씨젠 변환 INT 선언
에 INT 출력 C 코드의 선언 및 정수 출력 Fortran의 선언
암호. 긴 의 동의어로 받아들여진다. INT CDL 선언에서 사용되지만 이후 사용되지 않습니다.
이제 C long에 대한 64비트 표현이 있는 플랫폼이 있습니다.
Int64는 -9223372036854775808에서 9223372036854775807 사이의 값을 보유할 수 있습니다. 엔씨젠
변환 int64 선언 롱롱 출력 C 코드의 선언.
부동 소수점은 약 -3.4+38에서 3.4+38 사이의 값을 보유할 수 있습니다. 그들의 외부 표현은
32비트 IEEE 정규화된 단정밀도 부동 소수점 숫자로. 엔씨젠 변환 뜨다
선언 뜨다 출력 C 코드의 선언 및 레알 출력의 선언
포트란 코드. 현실 의 동의어로 받아들여진다. 뜨다 CDL 선언에서.
Double은 약 -1.7+308에서 1.7+308 사이의 값을 보유할 수 있습니다. 그들의 외부 표현
64비트 IEEE 표준 정규화된 배정밀도 부동 소수점 숫자입니다. 엔씨젠
변환 더블 선언 더블 출력 C 코드의 선언 및 더블
정도 출력 포트란 코드의 선언.
위 정수 유형의 무부호 대응 항목은 해당 정수 유형에 매핑됩니다.
부호 없는 C 유형. 해당 범위는 XNUMX에서 시작하도록 적절하게 수정됩니다.
char 유형의 기술적인 해석은 부호 없는 8비트 값이라는 것입니다. 그만큼
256개의 가능한 값의 인코딩은 기본적으로 지정되지 않습니다. char 유형의 변수는
사용할 문자 세트를 나타내기 위해 "_Encoding" 속성으로 표시해야 합니다. US-
ASCII, ISO-8859-1 등 UTF-8 인코딩을 지정하는 것은
US-ASCII 지정 멀티바이트 UTF-8 문자는
8비트 문자. 유일하게 합법적인 단일 바이트 UTF-8 값은 정의상 7비트 US-
최상위 비트가 XNUMX으로 설정된 ASCII 인코딩.
문자열은 기본적으로 UTF-8을 사용하여 인코딩되는 것으로 가정합니다. 이것은 다음을 의미합니다.
멀티바이트 UTF-8 인코딩이 문자열에 존재할 수 있으므로 숫자가
문자열에서 고유한 UTF-8 문자의 수가 사용되는 8비트 바이트 수보다 작습니다.
문자열을 저장합니다.
CDL 상수
속성이나 변수에 할당된 상수는 기본 netCDF 유형 중 하나일 수 있습니다.
상수 구문은 유형 접미사가 다음과 같아야 한다는 점을 제외하고는 C 구문과 유사합니다.
long 및 double과 구별하기 위해 short 및 float에 추가됩니다.
A 바이트 상수는 `b'(또는 `B')가 추가된 정수 상수로 표시됩니다. ~ 안에
이전 netCDF-2 API에서 바이트 상수는 단일 문자 또는
`a' 또는 `0'과 같은 표준 C 문자 이스케이프 시퀀스. 이것은 여전히 지원됩니다
이전 버전과의 호환성을 제공하지만 숫자와
바이트 유형 및 텍스트 문자 유형. 바이트 상수의 예는 다음과 같습니다.
0b // XNUMX바이트
-1b // 1비트 바이트로 -8
255b // 또한 부호 있는 1비트 바이트로 -8
짧은 정수 상수는 16비트 부호 있는 수량을 나타내기 위한 것입니다. 양식
의 짧은 상수는 `s' 또는 `S'가 추가된 정수 상수입니다. 만약 짧은
상수는 '0'으로 시작하고, '0x'로 시작하는 경우를 제외하고는 XNUMX진수로 해석됩니다.
XNUMX진수 상수로 해석됩니다. 예를 들어:
-2s // 짧은 -2
0123s // XNUMX진수
0x7ffs //XNUMX진수
INT 정수 상수는 32비트 부호 있는 양을 나타내기 위한 것입니다. 의 형태
an INT 상수는 일반 정수 상수이지만 선택적으로 사용할 수 있습니다.
단일 `l' 또는 `L'을 추가합니다(다시 말하지만 더 이상 사용되지 않음). 하지만 주의하세요. L 접미사는
32비트 정수로 해석되며 64비트 정수로 해석되지 않습니다. 혼란스러울 수 있습니다.
C long 유형은 모호하게 32비트 또는 64비트일 수 있기 때문입니다.
경우 INT 상수는 `0'으로 시작하며, 시작하는 경우를 제외하고는 XNUMX진수로 해석됩니다.
'0x'를 사용하면 XNUMX진수 상수로 해석됩니다(그러나 아래의 불투명 상수 참조).
유효한 예 INT 상수에는 다음이 포함됩니다.
-2
1234567890L
0123 // XNUMX진수
0x7ff // XNUMX진수
int64 정수 상수는 64비트 부호 있는 수량을 나타내기 위한 것입니다. 양식
의 int64 constant는 `ll' 또는 `LL'이 추가된 정수 상수입니다. 만약 int64
상수는 '0'으로 시작하고, '0x'로 시작하는 경우를 제외하고는 XNUMX진수로 해석됩니다.
XNUMX진수 상수로 해석됩니다. 예를 들어:
-2ll // 부호 없는 -2
0123LL // XNUMX진수
0x7ffLL //XNUMX진수
유형의 부동 소수점 상수 뜨다 부동 소수점을 나타내는 데 적합합니다.
약 XNUMX개의 유효 자릿수 정밀도를 가진 데이터. 의 형태 뜨다 상수는
'f' 또는 'F'가 추가된 C 부동 소수점 상수와 동일합니다. 예를 들어
다음은 모두 허용됩니다. 뜨다 상수 :
-2.0 층
3.14159265358979f // 정밀도가 낮아 잘립니다.
1.f
유형의 부동 소수점 상수 더블 부동 소수점을 나타내는 데 적합합니다.
약 XNUMX개의 유효 자릿수 정밀도를 가진 데이터. 의 형태 더블 상수는
C 부동 소수점 상수와 동일합니다. 선택적 'd' 또는 'D'가 추가될 수 있습니다. 을위한
예 다음은 모두 허용됩니다. 더블 상수 :
-2.0
3.141592653589793
1.0-20
1.d
부호 없는 정수 상수는 사이에 문자 'U' 또는 'u'를 추가하여 만들 수 있습니다.
상수 및 모든 후행 크기 지정자 또는 크기의 끝에서 바로
지정자. 따라서 예를 들어 10U, 100su, 100000ul 또는 1000000llu라고 말할 수 있습니다.
단일 문자 상수는 작은따옴표로 묶을 수 있습니다. 하나 이상의 시퀀스인 경우
문자가 큰따옴표로 묶인 경우 해당 해석은 다음에서 유추해야 합니다.
문맥. 데이터 세트가 netCDF 클래식 모델을 사용하여 생성된 경우 이러한 모든 상수는
문자 배열로 해석되므로 상수의 각 문자는 다음과 같이 해석됩니다.
단일 문자라면. 데이터 세트가 netCDF 확장된 경우 상수는
에 따라 클래식 모델 또는 실제 문자열(아래 참조)로 해석됩니다.
문자열이 포함된 속성 또는 변수의 유형입니다.
char 상수의 해석은 인쇄 가능한 ASCII 범위에 있는 상수라는 것입니다.
(' '..'~')는 UTF-1의 8바이트 하위 집합으로 인코딩되는 것으로 가정합니다.
US-ASCII. 모든 경우에 일반적인 C 문자열 이스케이프 규칙은
0 ~ 127. 127보다 큰 값이 허용되지만 해당 인코딩은 정의되지 않습니다. 을 위한
netCDF 확장, char 유형의 사용은 더 이상 사용되지 않고 문자열 유형을 선호합니다.
일부 문자 상수 예는 다음과 같습니다.
'a' // ASCII 'a'
"a" // 'a'와 동일
"Two\nlines\n" // 두 개의 개행 문자가 포함된 10자 문자열
"a bell:\007" // ASCII 벨을 포함하는 문자열
netCDF 문자 배열 "a"는 요소가 하나인 변수에 맞습니다.
종료 NULL 문자가 가정됩니다. 그러나 문자 배열의 XNUMX바이트는
에 의해 중요한 문자의 끝으로 해석됩니다. ncdump 프로그램, 다음
C 협약. 따라서 NULL 바이트는 다음을 제외하고 문자열에 포함되어서는 안 됩니다.
끝에: 사용 바이트 XNUMX 바이트를 포함하는 바이트 배열 대신 데이터 유형을 사용합니다.
끈 상수는 문자 상수와 같이 큰따옴표를 사용하여 표시됩니다. 이것
다중 문자 문자열이 다음을 나타낼 수도 있으므로 잠재적 모호성을 나타냅니다.
차원 문자 값. 명확성은 일반적으로 문맥에 따라 발생하지만 주의해야 합니다.
지정하기 위해 찍은현 올바른 선택을 보장하기 위해 입력하십시오. 문자열 상수가 가정됩니다.
항상 UTF-8로 인코딩됩니다. 이는 특히 문자열 상수가 실제로
멀티바이트 UTF-8 문자를 포함합니다. 특수 상수 `NIL`은 다음을 나타내는 데 사용할 수 있습니다.
길이가 XNUMX인 문자열과 다른 nil 문자열.
불투명 한 상수는 앞에 0X 또는 0x가 오는 XNUMX진수 시퀀스로 표시됩니다.
예를 들어 0xaa34ffff. 이러한 상수는 여전히 정수 상수로 사용할 수 있으며
필요에 따라 잘리거나 확장할 수 있습니다.
화합물 상수 식
유형이 사용자 정의 유형인 변수(또는 속성)에 값을 지정하려면
상수 표기법은 로 묶인 일련의 상수를 포함하도록 확장되었습니다.
중괄호(예: "{"..."}"). 이러한 상수를 복합상수라고 하며,
복합 상수는 중첩될 수 있습니다.
유형 "T(*) vlen_t"가 주어지면 T는 다른 임의의 기본 유형이며 이에 대한 상수는
다음과 같이 지정해야 합니다.
vlen_t var[2] = {t11,t12,...t1N}, {t21,t22,...t2m};
값 tij는 유형 T의 상수로 간주됩니다.
"compound 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가 정의되기 전에 이 참조가 발생하면 /g1/g1/t2이 실패합니다.
지정 열거 상수
열거형 상수(데이터 목록에서)에 대한 참조는 동일하기 때문에 모호할 수 있습니다.
열거 상수 이름은 둘 이상의 열거에 정의될 수 있습니다. cdl 파일인 경우
모호한 상수를 지정하면 ncgen에서 오류 신호를 보냅니다. 이러한 상수는 다음과 같을 수 있습니다.
두 가지 방식으로 구분됩니다.
1. 열거형 상수 앞에 열거형 이름을 붙입니다.
점: 열거형.econst예를 들어.
2. 사례 XNUMX이 열거 상수를 명확하게 하는 데 충분하지 않은 경우 다음 중 하나입니다.
그룹 경로를 사용하여 정확한 열거 유형을 지정해야 합니다. /g1/g2/enum.econst,
예를 들어.
이달의 스페셜 Attributes
성능 관련 정보를 제공하기 위해 특수한 가상 속성을 지정할 수 있습니다.
파일 형식 및 변수 속성에 대해. 파일은 netCDF-4 파일이어야 합니다.
적용할 수 있습니다.
이러한 특수한 가상 속성은 실제로 파일의 일부가 아니라 단지
CDL에서 데이터의 기타 속성을 설정하는 편리한 방법
현재 지원되는 특수 속성은 다음과 같습니다: `_Format', `_Fletcher32,
`_ChunkSizes', `_Endianness', `_DeflateLevel', `_Shuffle' 및 `_Storage'.
`_Format'은 netCDF 형식 변형을 지정하는 전역 속성입니다. 그 값은
`classic', `64-bit offset', `64-bit data', `netCDF-4' 또는
`netCDF-4 클래식 모델'.
나머지 특수 속성은 모두 변수 속성입니다. 본질적으로 모든
netCDF-4 API에 정의된 일부 해당 `nc_def_var_XXX' 함수에 매핑합니다. 을 위한
본질적으로 부울 속성(_Fletcher32, _Shuffle 및 _NOFILL),
true 값은 문자열 `true' 또는 `1'을 사용하거나 정수 1을 사용하여 지정할 수 있습니다.
false 값은 `false', `0' 또는 정수 0을 예상합니다.
이러한 속성은 다음과 같습니다.
1. `_Fletcher32는 변수에 대한 `fletcher32' 속성을 설정합니다.
2. `_Endianness'는 언제 변수가 저장되는지에 따라 `little' 또는 `big'입니다.
처음으로 작성되었습니다.
3. `_DeflateLevel'은 압축이 완료된 경우 0에서 9 사이의 정수입니다.
변수에 대해 지정되었습니다.
4. `_Shuffle'은 셔플 필터를 사용해야 하는지 여부를 지정합니다.
5. `_Storage'는 `인접' 또는 `청크'입니다.
6. `_ChunkSizes'는 변수의 각 차원에 대한 청크 크기 목록입니다.
"add_offset" 또는 "scale_factor"와 같은 속성에는 특별한 의미가 없습니다.
ncgen.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은 다음과 같은 결과를 가져옵니다. 의 유형인 경우
attribute는 복합(또는 vlen) 유형이며 목록의 항목 수가 하나이면
그런 다음 복합 인스턴스는 중괄호로 묶어야 합니다.
지정 캐릭터 데이터 목록
char 유형의 변수에 대한 데이터 목록을 지정하는 것도 약간 복잡합니다. 고려하다
예
치수: u=무제한; d1=1; d2=2; d3=3;
d4=4; d5=5; u2=UNLIMITED;
변수: char var(d4,d5);
데이터 목록: var="1", "two", "three";
채울 var 요소가 5개 있고(d4 X d1) 길이가 3, XNUMX인 세 개의 문자열이 있습니다.
5. 문자열의 문자를 XNUMX개의 요소에 어떻게 할당합니까?
이는 원래 ncgen(ncgen3)을 모방하는 것이 바람직하기 때문에 어려운 작업입니다. 그만큼
핵심 알고리즘은 개념적으로 다음과 같습니다.
1. 차원 세트 D1..Dn이 있다고 가정합니다. 여기서 D1은 선택적으로 Unlimited일 수 있습니다.
치수. Di의 크기는 모두 알려져 있다고 가정합니다(무제한 포함).
치수).
2. 일련의 문자열 또는 문자 상수 C1..Cm이 주어지면 우리의 목표는 다음을 구성하는 것입니다.
길이가 D1에서 Dn까지의 외적인 단일 문자열입니다. 참고
이 알고리즘에서 문자 상수는 크기 1의 문자열로 처리됩니다.
3. 구성 Dx = D1에서 D(n-1)까지의 외적.
4. 각 상수 Ci에 대해 길이가 다음의 배수가 되도록 필요에 따라 채우기 문자를 추가합니다.
NS.
5. 수정된 C1..Cm을 연결하여 문자열 S를 생성합니다.
6. 길이가 Dn의 배수가 되도록 S에 채우기 문자를 추가합니다.
8. S가 Dx * Dn보다 길면 자르고 경고를 생성합니다.
세 가지 다른 참고 사례가 있습니다.
1. 무제한의 단일 차원만 있는 경우 모든 상수는 다음과 같습니다.
연결 및 채우기 문자가 결과 문자열의 끝에 추가되어
길이는 무제한 차원의 길이입니다. 길이가 생각보다 크면
크기가 무제한인 경우 경고와 함께 잘립니다.
2. 문자형이 vlen인 경우 예를 들어 "char(*) vlen_t". 우리는 단순히
채우지 않고 모든 상수를 연결합니다.
3. 문자 유형 속성의 경우 단순히 모든 상수를 연결합니다.
netcdf-4에서 첫 번째 이외의 차원은 무제한일 수 있습니다. 물론 규정대로
위에서 내부 무제한 인스턴스는 {...}로 구분되어야 합니다. 예를 들어.
변수: char var(u,u2);
데이터 목록: var={"1", "둘"}, {"셋"};
이 경우 u는 2의 유효 길이를 갖게 됩니다. uXNUMX의 각 인스턴스 내에서
위의 규칙이 적용되어 이로 이어집니다.
데이터 목록: var={"1","t","w","o"}, {"t","h","r","e","e"};
u2의 유효 크기는 두 인스턴스 길이(이 경우 XNUMX개)의 최대값이 됩니다.
이것을 생성하기 위해 더 짧은 것이 패딩됩니다.
데이터 목록: var={"1","t","w","o","\0"}, {"t","h","r","e","e"};
훨씬 더 복잡한 경우를 생각해 보십시오.
변수: char var(u,u2,u3);
데이터 목록: var={{"1", "둘"}}, {{"셋"},{"넷","xy"}};
이 경우 u는 다시 2의 유효 길이를 갖게 됩니다. uXNUMX 치수는
크기 = 최대(1,2) = 2; u2의 각 인스턴스 내에서 위의 규칙이 적용되어
이.
데이터 목록: var={{"1","t","w","o"}}, {{"t","h","r","e","e"},{"f","o","u","r","x","y"}};
u3의 유효 크기는 두 인스턴스 길이의 최대값이 됩니다(이 경우 XNUMX개).
이것을 생성하기 위해 더 짧은 것이 채워질 것입니다.
데이터 목록: var={{"1","t","w","o"," "," "}}, {{"t","h","r","e","e "," "},{"f","o","u","r","x","y"}};
그러나 u2의 첫 번째 인스턴스는 u2의 최대 길이보다 작으므로
u2의 다른 인스턴스에 대한 필러를 추가하여 이를 생성합니다.
데이터 목록: var={{"1","t","w","o"," "," "},{" "," "," "," "," "," "}}, {{"t","h","r","e","e"," "},{"f","o","u","r","x","y"}};
onworks.net 서비스를 사용하여 ncgen 온라인 사용
