Bu, Ubuntu Online, Fedora Online, Windows çevrimiçi emülatörü veya MAC OS çevrimiçi emülatörü gibi birden fazla ücretsiz çevrimiçi iş istasyonumuzdan birini kullanarak OnWorks ücretsiz barındırma sağlayıcısında çalıştırılabilen ncgen komutudur.
Program:
ADI
ncgen - Bir CDL dosyasından bir netCDF-3 dosyası, bir netCDF-4 dosyası veya bir C programı oluşturun
SİNOPSİS
ncgen [-b] [-c] [-f] [-k biçim_adı] [-biçim_kodu] [-l çıktı dil] [-numara
netcdf_dosya adı] [-X] [giriş dosyası]
TANIM
ncgen bir netCDF-3 (yani klasik) ikili .nc dosyası, bir netCDF-4 (yani
geliştirilmiş) ikili .nc dosyası veya çalıştırıldığında bazı kaynak dillerdeki bir dosya
karşılık gelen ikili .nc dosyasını oluşturun. giriş ncgen bir açıklamasıdır
netCDF dosyası, CDL (ağ Ortak Veri form Dili) olarak bilinen küçük bir dilde,
Aşağıda açıklanan. input_file belirtilmemişse, girdi standart girdiden okunur. Eğer hayırsa
seçenekler çağırmada belirtilir ncgen, yalnızca giriş CDL'sinin sözdizimini kontrol eder
dosyası, herhangi bir CDL sözdizimi ihlali için hata mesajları üretir. Diğer seçenekler olabilir
örneğin ilgili netCDF dosyasını oluşturmak veya bir C programı oluşturmak için kullanılır
netCDF dosyasını oluşturmak için netCDF C arabirimini kullanır.
Bu ncgen sürümünün orijinal olarak ncgen4 olarak adlandırıldığını unutmayın. Eski ncgen programı
ncgen3 olarak yeniden adlandırıldı.
ncgen tamamlayıcı program ile kullanılabilir ncdump bazı basit işlemleri gerçekleştirmek için
netCDF dosyaları. Örneğin, bir netCDF dosyasındaki bir boyutu yeniden adlandırmak için şunu kullanın: ncdump Bir almak için
NetCDF dosyasının CDL sürümü, boyutların adını değiştirmek için CDL dosyasını düzenleyin,
ve kullan ncgen Düzenlenen CDL dosyasından ilgili netCDF dosyasını oluşturmak için.
SEÇENEKLER
-b Bir (ikili) netCDF dosyası oluşturun. Eğer -o seçenek yok, varsayılan dosya adı
herhangi bir son ek ile değiştirilerek CDL dosyasının taban adından oluşturulacaktır.
`.nc' uzantısı. Belirtilen ada sahip bir dosya zaten mevcutsa,
üzerine yazıldı.
-c Oluşturmak C netCDF ile eşleşen bir netCDF dosyası oluşturacak kaynak kodu
Şartname. C kaynak kodu standart çıktıya yazılır; -lc'ye eşdeğerdir.
-f Oluşturmak FORTRAN 77 netCDF ile eşleşen bir netCDF dosyası oluşturacak kaynak kodu
Şartname. Kaynak kodu standart çıktıya yazılır; -lf77'ye eşdeğerdir.
-o netcdf_file
"nc_create()" çağrılarına iletilecek dosyanın adı. Bu seçenek belirtilirse,
(herhangi bir açık -l bayrağının yokluğunda) "-b" seçeneği. Bu seçenek
netCDF dosyaları doğrudan standart çıktıya yazılamadığından gereklidir, çünkü
standart çıktı aranmaz.
-k biçim_adı
-biçim_kodu
-k bayrağı, oluşturulacak dosyanın biçimini ve çıkarımla,
ncgen tarafından kabul edilen veri modeli (yani netcdf-3 (klasik) ile netcdf-4 ve netcdf-5).
Kısayol olarak, sayısal bir biçim_kodu yerine belirtilebilir. mümkün
biçim_adı -k seçeneği için değerler:
'klasik' veya 'nc3' => netCDF klasik biçimi
'64 bit ofset' veya 'nc6' => netCDF 64 bit biçimi
'64 bit veri veya 'nc5' => netCDF-5 (64 bit veri) formatı
'netCDF-4' 0r 'nc4' => netCDF-4 formatı (gelişmiş veri modeli)
'netCDF-4 klasik model' veya 'nc7' => netCDF-4 klasik model formatı
Kabul edilen format_number argümanlar, yalnızca format_names kısayolları şunlardır:
3 => netcdf klasik biçimi
5 => netcdf 5 formatı
6 => netCDF 64-bit biçimi
4 => netCDF-4 formatı (gelişmiş veri modeli)
7 => netCDF-4 klasik model formatı
"7" sayısal kodu kullanılır, çünkü "7=3+4",
performans için netCDF-3 depolama biçimiyle uyumluluk için netCDF-4 veri modeli.
Kredi, eski ve kafa karıştırıcı kodlar yerine bu sayısal kodların kullanımı için NCO'ya aittir.
sayıları biçimlendirin.
Not: Eski sürüm biçim numaraları '1', '2', '3', '4', biçim adlarına eşdeğerdir.
Sırasıyla 'nc3', 'nc6', 'nc4' veya 'nc7' de hala kabul edilmektedir, ancak şu nedenlerle kullanımdan kaldırılmıştır:
biçim numaraları ve biçim adları arasında kolay karışıklık. Çeşitli eski biçim ad takma adları
ayrıca kabul edilir ancak kullanımdan kaldırılır, örneğin 'hdf5', 'enhanced-nc3' vb. Ayrıca, -v'nin
geriye dönük uyumluluk için -k ile aynı anlama geldiği kabul edilir.
-x Verileri dolgu değerleriyle başlatmayın. Bu, büyük netCDF oluşturulmasını hızlandırabilir
büyük ölçüde dosyalar, ancak daha sonra oluşturulan dosyadan yazılmamış verileri okumaya çalışır
kolayca tespit edilemeyecektir.
-l çıktı_dil
-l bayrağı, kaynak kodu oluştururken kullanılacak çıktı dilini belirtir.
netCDF belirtimine uyan bir netCDF dosyası oluşturacak veya tanımlayacaktır. Çıktı
standart çıktıya yazılır. Şu anda desteklenen diller,
aşağıdaki bayraklar.
c|C' => C dili çıktısı.
f77|fortran77' => FORTRAN 77 dil çıktısı
; Şu anda yalnızca klasik modelin desteklendiğini unutmayın.
j|java' => (deneysel) Java dili çıktısı
; mevcut Unidata Java arabirimini hedefler, bu da yalnızca
klasik model desteklenir.
Seçme the çıktı biçim
Çıktı formatının seçimi üç bayrakla belirlenir.
-k bayrağı.
_Biçim nitelik (görmek altında).
Olay of CDF-5 (64 bit veri) or
giriş CDL'sinde netcdf-4 yapıları." The dönem "netCDF-4 yapılar" anlamına geliyor
yapılar itibaren the gelişmiş veri Model, değil sadece özel performansla ilgili
öznitelikleri böyle as
_ChunkBoyutları, _DeflateSeviye, _Endiyet, vb. The dönem "CDF-5 yapılar" anlamına geliyor
genişletilmiş imzasız tamsayı türleri izin in the 64 bit veri modeli.
netCDF-4 vakası ile CDF-5 vakası arasında bir belirsizlik olduğuna dikkat edin.
girdide unsigned tip görünüyor.
Kurallar uygulama sırasına göre aşağıdaki gibidir.
1. Fortran veya Java çıktısı belirtilmişse, -k bayrak değeri 1 (klasik
modeli) kullanılacaktır. CDL'de geliştirilmiş yapıların kullanımıyla ilgili çatışmalar
bir hata bildirin.
2. Hem -k bayrağı hem de _Format niteliği belirtilirse, _Format bayrağı
görmezden gelindi. -k bayrağı belirtilmezse ve bir _Format öznitelik değeri belirtilirse,
daha sonra -k bayrak değeri, _Format özniteliğinin değerine ayarlanacaktır. Aksi takdirde
-k bayrağı tanımsız.
3. -k seçeneği tanımlanmışsa ve CDL ile tutarlıysa, ncgen bir çıktı verir.
İstenen formda dosya, aksi takdirde bir hata bildirilecektir.
4. -k bayrağı tanımsızsa ve yalnızca CDL'de CDF-5 yapıları varsa, bir
-k bayrak değeri 5 (64-bit veri modeli) kullanılacaktır. Gerçek netCDF-4 varsa
CDL'deki yapılarda, a -k bayrak değeri 3 (gelişmiş model) kullanılacaktır.
5. CDL'de performansla ilgili özel nitelikler belirtilmişse, a -k bayrak değeri
4 adet (netCDF-4 klasik model) kullanılacaktır.
6. Aksi takdirde ncgen, -k bayrağını 1'e ayarlayacaktır (klasik model).
ÖRNEKLER
CDL dosyasının sözdizimini kontrol edin `foo.cdl':
ncgen foo.cdl
CDL dosyasından `foo.cdl', `adlı eşdeğer bir ikili netCDF dosyası oluşturunx.nc':
ncgen -o x.nc foo.cdl
CDL dosyasından `foo.cdl', netCDF işlevini içeren bir C programı oluşturun
` adlı eşdeğer bir ikili netCDF dosyası oluşturmak için gerekli çağrılarx.nc':
ncgen -lc foo.cdl >xc
KULLANIM
CDL Sözdizimi Genel Bakış
Aşağıda, birkaç adlandırılmış boyuta sahip bir netCDF dosyasını tanımlayan bir CDL sözdizimi örneği verilmiştir.
(enlem, boylam ve zaman), değişkenler (Z, t, p, rh, enlem, boylam, zaman), değişken nitelikler (birimler,
long_name, valid_range, _FillValue) ve bazı veriler. CDL anahtar sözcükleri kalın harflerle yazılmıştır. (Bu
örnek, sözdizimini açıklamaya yöneliktir; gerçek bir CDL dosyası daha eksiksiz olurdu
verilerin daha eksiksiz bir şekilde kendini tanımlaması için bir dizi nitelik.)
netcdf foo { // CDL'de örnek bir netCDF özelliği
türleri:
ubayt enum enum_t {Temizle = 0, Cumulonimbus = 1, Stratus = 2};
opak(11) opak_t;
int(*) vlen_t;
boyutlar:
enlem = 10, boylam = 5, zaman = sınırsız ;
değişkenler:
ve kazandırdı enlem(lat), boylam(boylam), zaman(zaman);
şamandıra Z(zaman, enlem, boylam), t(zaman, enlem, boylam);
çift p(zaman, enlem, boylam);
ve kazandırdı rh(zaman, enlem, boylam);
dizi ülke(zaman, enlem, boylam);
ubayt etiket;
// değişken nitelikler
lat:long_name = "enlem";
lat:birimler = "derece_kuzey";
lon:long_name = "boylam";
lon:units = "derece_doğu";
zaman:birimler = "1992-1-1'den bu yana saniye 00:00:00";
// yazılan değişken nitelikleri
dizi Z:units = "jeopotansiyel metre";
şamandıra Z:geçerli_aralık = 0., 5000.;
çift p:_FillValue = -9999.;
ve kazandırdı rh:_FillValue = -1;
vlen_t :globalatt = {17, 18, 19};
veri:
enlem = 0, 10, 20, 30, 40, 50, 60, 70, 80, 90;
boy = -140, -118, -96, -84, -52;
Grup: G {
türleri:
bileşik cmpd_t { vlen_t f1; numaralandırma_t f2;};
} // g grubu
Grup: H {
değişkenler:
/ G /cmpd_t bileşik var;
veri:
bileşikvar = { {3,4,5}, enum_t.Stratus } ;
} // h grubu
}
Tüm CDL ifadeleri noktalı virgül ile sonlandırılır. Boşluklar, sekmeler ve yeni satırlar kullanılabilir
okunabilirlik için özgürce. Yorumlar herhangi bir satırda `//' karakterlerini takip edebilir.
Bir CDL açıklaması beş isteğe bağlı bölümden oluşur: türleri, boyutlar, değişkenler, veri,
anahtar kelime ile başlayan `türler:', `boyutlar:', 'değişkenler:', ve `veri:',
sırasıyla. Birkaç şeye dikkat edin: (1) anahtar kelime sondaki iki noktayı içerir, bu nedenle orada
iki nokta üst üste karakterinden önce boşluk olmamalıdır ve (2) anahtar kelimelerin
küçük harf.
The değişkenleri: bölüm içerebilir değişken bildirimleri ve nitelik ödevler. Herşey
bölümler genel öznitelik atamaları içerebilir.
Ayrıca, sonrasında verileri: bölümünde, kullanıcı bir dizi grup tanımlayabilir (bkz.
yukarıdaki örnek). Grupların kendileri türleri, boyutları, değişkenleri, verileri ve
diğer (iç içe geçmiş) gruplar.
netCDF türleri: bölüm, kullanıcı tanımlı türleri bildirir. Bunlar kullanılarak inşa edilebilir
aşağıdaki türlerden herhangi biri: enum, Vlen, opakya da bileşik.
bir netCDF boyut çok boyutlu nesnelerin bir veya daha fazlasının şeklini tanımlamak için kullanılır.
netCDF dosyasında bulunan değişkenler. Bir netCDF boyutunun bir adı ve boyutu vardır. A
boyuta sahip olabilir sınırsız boyut, yani bu boyutu kullanan bir değişken
o boyutta herhangi bir uzunlukta büyür.
A değişken aynı türden çok boyutlu bir değerler dizisini temsil eder. Bir değişken var
bir ad, bir veri türü ve boyut listesiyle tanımlanan bir şekil. Her değişken
ayrıca ilişkilendirdi öznitelikleri (aşağıya bakın) ve veri değerleri. Ad, veri türü,
ve bir değişkenin şekli, içindeki bildirimi ile belirtilir. değişken bir CDL'nin bölümü
tanım. Bir değişken, boyutla aynı ada sahip olabilir; sözleşmeyle böyle bir
değişken tek boyutludur ve adlandırdığı boyutun koordinatlarını içerir.
Boyutların karşılık gelen değişkenlere sahip olması gerekmez.
bir netCDF nitelik bir netCDF değişkeni veya tüm netCDF hakkında bilgi içerir
veri kümesi. Nitelikler, birimler, özel değerler, maksimum gibi özellikleri belirtmek için kullanılır.
ve minimum geçerli değerler, ölçekleme faktörleri, ofsetler ve parametreler. Özellik bilgisi
tek değerler veya değer dizileri ile temsil edilir. Örneğin, "birimler" bir niteliktir
"santigrat" gibi bir karakter dizisi ile temsil edilir. Bir özniteliğin ilişkili bir
değişken, ad, veri türü, uzunluk ve değer. Değişkenlerin aksine
verilere yöneliktir, nitelikler meta verilere yöneliktir (veriler hakkındaki veriler). farklı
netCDF-3, öznitelik türleri, olağan yerleşik olduğu gibi herhangi bir kullanıcı tanımlı tür olabilir.
türleri.
CDL'de, bir nitelik aa tipi, bir değişken, bir ':' ve ardından bir nitelik ile belirlenir.
isim. Tip isteğe bağlıdır ve eksikse, atanan değerlerden çıkarılacaktır.
özniteliğe. atamak mümkün global hiçbiriyle ilişkili olmayan nitelikler
öznitelikte değişken adını atlayarak bir bütün olarak netCDF'ye değişken
beyanname. Aşağıdaki gibi bir belirtimde potansiyel bir belirsizlik olduğuna dikkat edin.
x : bir = ...
Bu durumda x, global bir öznitelik için bir tür veya değişken adı olabilir.
bir nitelik için. Hem x adında bir tür hem de x adında bir değişken olabileceğinden,
bir belirsizliktir. Kural, bu durumda x'in bir tür olarak yorumlanacağıdır.
mümkün ve aksi takdirde bir değişken olarak.
Belirtilmezse, CDL'deki bir özniteliğin veri türü, özniteliğin türünden türetilir.
kendisine atanan değer(ler). Bir özelliğin uzunluğu, atanan veri değerlerinin sayısıdır.
ona veya ona atanan karakter dizisindeki karakter sayısı. çoklu
değerler, virgülle ayrılarak karakter olmayan özniteliklere atanır. Tüm
bir özniteliğe atanan değerler aynı türde olmalıdır.
CDL boyutları, değişkenler, nitelikler, türler ve gruplar için adlar herhangi birini içerebilir.
eğik çizgi karakteri (`/') dışında kontrol dışı utf-8 karakteri. Ancak, belirli
karakterler bir ad içinde kullanılıyorsa, kaçış karakterinin
ters eğik çizgi `\'. Özellikle, adın başındaki karakter bir rakam ise
(0-9), o zaman kaçış karakterinden önce gelmelidir. Ayrıca, karakterler `
!"#$%&()*,:;<=>?[]^`´{}|~\' bir ismin herhangi bir yerinde geçiyorsa kaçılmalıdır. Ayrıca unutmayın.
alt çizgi ('_') ile başlayan öznitelik adları, kullanım için ayrılmıştır.
Unidata ve kullanıcı tanımlı özniteliklerde kullanılmamalıdır.
Ayrıca 'değişken', 'boyut', 'veri', 'grup' ve 'türler' kelimelerinin yasal olduğuna dikkat edin.
CDL adları, ancak bunlarla sonraki iki nokta üst üste arasında boşluk olmasına dikkat edin.
değişken adı olarak kullanıldığında karakter. Bu çoğunlukla öznitelikle ilgili bir sorundur
beyanlar. Örneğin, bunu düşünün.
netcdf... {
Kendi ID’n ile mağazalarını oluştur
değişkenleri:
int boyutlar;
boyutlar: nitelik=0 ; // bu bir hataya neden olur
boyutlar : nitelik=0 ; // tamamdır.
Kendi ID’n ile mağazalarını oluştur
}
İsteğe bağlı verileri: bir CDL spesifikasyonunun bölümü, netCDF değişkenlerinin olabileceği yerdir.
başlatıldı. Bir başlatmanın sözdizimi basittir: bir değişken adı, bir eşittir işareti,
ve virgülle ayrılmış sabitler listesi (muhtemelen boşluklar, sekmeler ve yeni satırlarla ayrılmış)
noktalı virgül ile sonlandırılır. Çok boyutlu diziler için son boyut değişir
en hızlı. Bu nedenle matrisler için sütun sırası yerine satır sırası kullanılır. Daha az değer varsa
bir değişkeni doldurmak için gerekenden sağlanırsa, türe bağlı olarak genişletilir.
Ayırt edici bir değişken için bir değer sağlayarak geçersiz kılınabilen 'dolgu değeri'
'_FillValue' adlı öznitelik. Sabit türlerinin, belirtilen türle eşleşmesi gerekmez.
bir değişken; örneğin tam sayıları kayan noktaya dönüştürmek için zorlamalar yapılır. NS
Bir değişkenin dolgu değerini belirtmek için sabit '_' kullanılabilir. türü ise
değişken açıkça "dize" ise, özel sabit "NIL" temsil etmek için kullanılabilir.
sıfır uzunluklu bir dize ile aynı olmayan bir sıfır dize.
Ilkel Veri Türleri
tank karakterler
bayt 8-bit veri
kısa 16 bit işaretli tam sayılar
int 32 bit işaretli tam sayılar
ve kazandırdı (ile eşanlamlı int)
int64 64 bit işaretli tam sayılar
şamandıra IEEE tek duyarlıklı kayan nokta (32 bit)
gerçek (ile eşanlamlı şamandıra)
çift IEEE çift duyarlıklı kayan nokta (64 bit)
ubayt imzasız 8 bit veri
ushort 16 bit işaretsiz tam sayılar
uint 32 bit işaretsiz tam sayılar
uint64 64 bit işaretsiz tam sayılar
dizi keyfi uzunluk dizileri
CDL, C'nin ilkel veri türlerinin bir üst kümesini destekler.
veri türleri CDL'de ayrılmış sözcüklerdir, bu nedenle değişkenlerin, boyutların ve
nitelikler ilkel tür adları olmamalıdır. Bildirimlerde tip isimleri belirtilebilir.
ya büyük ya da küçük harf.
Baytların tam sekiz bit veri tutması amaçlanmıştır ve sıfır baytın özel bir özelliği yoktur.
karakter verileri için olabileceği gibi önem. ncgen dönüştürür bayt deklarasyonlar tank
çıktı C kodundaki ve standart dışı bildirimler BYTE çıktıda beyan
Fortran kodu.
Şortlar -32768 ile 32767 arasında değerler alabilir. ncgen dönüştürür kısa deklarasyonlar
kısa çıktı C kodundaki ve standart dışı bildirimler TAM SAYI*2 beyanname
çıktı Fortran kodu.
Int'ler -2147483648 ile 2147483647 arasındaki değerleri tutabilir. ncgen dönüştürür int bildirimleri
için int çıktı C kodundaki bildirimler ve INTEGER Fortran çıktısındaki bildirimler
kodu. ve kazandırdı eş anlamlısı olarak kabul edilir int CDL bildirimlerinde bulunur, ancak o zamandan beri kullanımdan kaldırılmıştır.
artık C uzunlukları için 64-bit temsilleri olan platformlar var.
Int64, -9223372036854775808 ile 9223372036854775807 arasındaki değerleri tutabilir. ncgen
dönüştürür int64 deklarasyonlar uzunca çıktı C kodundaki bildirimler.
Şamandıralar yaklaşık -3.4+38 ile 3.4+38 arasında değerler tutabilir. Onların dış temsili
32-bit IEEE normalleştirilmiş tek duyarlıklı kayan nokta sayıları olarak. ncgen dönüştürür şamandıra
deklarasyonlar şamandıra çıktı C kodundaki bildirimler ve GERÇEK çıktıdaki bildirimler
Fortran kodu. gerçek eş anlamlısı olarak kabul edilir şamandıra CDL beyannamelerinde.
Çiftler yaklaşık -1.7+308 ile 1.7+308 arasında değerler tutabilir. Onların dış temsili
64-bit IEEE standart normalleştirilmiş çift duyarlıklı kayan nokta sayıları gibidir. ncgen
dönüştürür çift deklarasyonlar çift çıktı C kodundaki bildirimler ve ÇİFT
HASSAS Çıktı Fortran kodundaki bildirimler.
Yukarıdaki tamsayı türlerinin işaretsiz karşılıkları, karşılık gelen sayılarla eşlenir.
imzasız C türleri. Aralıkları, sıfırdan başlayacak şekilde uygun şekilde değiştirilir.
char türünün teknik yorumu, işaretsiz 8 bitlik bir değer olmasıdır. NS
256 olası değerin kodlaması varsayılan olarak belirtilmemiştir. char türünde bir değişken olabilir
kullanılacak karakter kümesini belirtmek için bir "_Encoding" özelliği ile işaretlenmelidir: US-
ASCII, ISO-8859-1, vb. UTF-8 kodlamasının şununla eşdeğer olduğunu unutmayın.
US-ASCII belirtme Bunun nedeni, çok baytlı UTF-8 karakterlerinin bir
8 bit karakter. Tek yasal tek baytlık UTF-8 değerleri, tanım gereği 7-bit US-
Üst bit sıfıra ayarlanmış ASCII kodlaması.
Dizelerin varsayılan olarak UTF-8 kullanılarak kodlandığı varsayılır. Bunun şu anlama geldiğini unutmayın
dizede çok baytlı UTF-8 kodlamaları mevcut olabilir, bu nedenle sayının
bir dizedeki farklı UTF-8 karakterlerinin sayısı, kullanılan 8 bitlik bayt sayısından daha küçüktür.
dizeyi saklayın.
CDL Sabitler
Niteliklere veya değişkenlere atanan sabitler, temel netCDF türlerinden herhangi biri olabilir.
Sabitlerin sözdizimi, tür soneklerinin
onları uzun ve çiftlerden ayırt etmek için şortlara ve şamandıralara eklenir.
A bayt sabit, bir "b" (veya "B") eklenmiş bir tamsayı sabiti ile temsil edilir. İçinde
eski netCDF-2 API'sinde bayt sabitleri, tek karakterler veya
"a" veya "0" gibi standart C karakter kaçış dizileri. Bu hala için destekleniyor
geriye dönük uyumluluk, ancak sayısal arasındaki farkı netleştirmek için kullanımdan kaldırıldı
bayt türü ve metinsel karakter türü. Örnek bayt sabitleri şunları içerir:
0b // sıfır bayt
-1b // -1 8 bitlik bir bayt olarak
255b // ayrıca imzalı 1 bitlik bayt olarak -8
kısa tamsayı sabitleri, 16 bitlik işaretli miktarları temsil etmek için tasarlanmıştır. form
bir bölgesinin kısa sabit, sonuna "s" veya "S" eklenmiş bir tam sayı sabitidir. Eğer bir kısa
sabit "0" ile başlar, sekizli olarak yorumlanır, ancak "0x" ile başlıyorsa,
onaltılık bir sabit olarak yorumlanır. Örneğin:
-2s // kısa bir -2
0123s // sekizli
0x7ffs // onaltılık
int tamsayı sabitleri, 32 bitlik işaretli miktarları temsil etmek için tasarlanmıştır. Şekli
an int sabit, isteğe bağlı olarak kabul edilebilir olmasına rağmen, sıradan bir tamsayı sabitidir.
tek bir "l" veya "L" ekleyin (yine, kullanımdan kaldırıldı). Ancak dikkatli olun, L son eki
32 bit tam sayı olarak yorumlanır ve asla 64 bit tam sayı olarak yorumlanmaz. Bu kafa karıştırıcı olabilir
çünkü C uzun türü belirsiz bir şekilde 32 bit veya 64 bit olabilir.
bir varsa int sabit '0' ile başlar, başlarsa sekizlik olarak yorumlanır.
'0x' ile, onaltılık bir sabit olarak yorumlanır (ancak aşağıdaki opak sabitlere bakın).
geçerli örnekler int sabitler şunları içerir:
-2
1234567890L
0123 // sekizli
0x7ff // onaltılık
int64 tamsayı sabitleri, 64 bitlik işaretli miktarları temsil etmek için tasarlanmıştır. form
Bir of int64 sabit, "ll" veya "LL" eklenmiş bir tam sayı sabitidir. eğer bir int64
sabit "0" ile başlar, sekizli olarak yorumlanır, ancak "0x" ile başlıyorsa,
onaltılık bir sabit olarak yorumlanır. Örneğin:
-2ll // imzasız bir -2
0123LL // sekizli
0x7ffLL // onaltılık
Türün kayan nokta sabitleri şamandıra kayan noktayı temsil etmek için uygundur
yaklaşık yedi önemli basamaklı kesinlik içeren veriler. formu bir şamandıra sabit
"f" veya "F" eklenmiş bir C kayan nokta sabiti ile aynı. örneğin
Aşağıdakilerin tümü kabul edilebilir şamandıra sabitler:
-2.0f
3.14159265358979f // daha az hassasiyetle kesilecek
1.f.
Türün kayan nokta sabitleri çift kayan noktayı temsil etmek için uygundur
yaklaşık on altı önemli basamaklı kesinlik içeren veriler. formu bir çift sabit
C kayan nokta sabiti ile aynı. İsteğe bağlı bir "d" veya "D" eklenebilir. İçin
örnek, aşağıdakilerin tümü kabul edilebilir çift sabitler:
-2.0
3.141592653589793
1.0e-20
1. d
İşaretsiz tamsayı sabitleri, aralarına 'U' veya 'u' karakteri eklenerek oluşturulabilir.
sabit ve sondaki herhangi bir boyut belirteci veya boyutun hemen sonunda
belirleyici. Böylece örneğin 10U, 100su, 100000ul veya 1000000llu söylenebilir.
Tek karakterli sabitler tek tırnak içine alınabilir. Bir veya daha fazla dizi varsa
karakterler çift tırnak içine alınırsa, yorumu şundan çıkarılmalıdır:
bağlam. Veri kümesi netCDF klasik modeli kullanılarak oluşturulmuşsa, bu tür tüm sabitler
bir karakter dizisi olarak yorumlanır, dolayısıyla sabitteki her karakter şu şekilde yorumlanır:
tek karakter olsaydı. Veri kümesi netCDF uzatılmışsa, sabit
bağlı olarak klasik model için veya gerçek bir dize olarak yorumlanabilir (aşağıya bakın).
dizenin içinde bulunduğu özniteliğin veya değişkenin türü.
Karakter sabitlerinin yorumlanması, yazdırılabilir ASCII aralığında olanların
(' '..'~') UTF-1'in 8 baytlık alt kümesi olarak kodlandığı varsayılır;
ABD-ASCII. Her durumda, olağan C dizesi kaçış kuralları, aşağıdaki değerler için geçerlidir:
0 - 127. 127'den büyük değerlere izin verilir, ancak kodlamaları tanımsızdır. İçin
netCDF genişletildiğinde, char türünün kullanımı, dize türü lehine kaldırılmıştır.
Bazı karakter sabiti örnekleri aşağıdaki gibidir.
'a' // ASCII 'a'
"a" // 'a'ya eşdeğer
"İki\nsatır\n" // iki gömülü yeni satır içeren 10 karakterlik bir dize
"a bell:\007" // bir ASCII zili içeren bir dize
"a" netCDF karakter dizisinin tek elemanlı bir değişkene sığacağını unutmayın, çünkü hiçbir
NULL karakterinin sonlandırıldığı varsayılır. Ancak, bir karakter dizisindeki sıfır bayt
tarafından önemli karakterlerin sonu olarak yorumlanır. ncdump programı takip ederek,
C kongresi. Bu nedenle, bir NULL bayt, bir karakter dizgisine gömülmemelidir.
sonunda: kullanın bayt sıfır bayt içeren bayt dizileri için veri türü.
dizi sabitler, karakter sabitleri gibi çift tırnak kullanılarak temsil edilir. Bu
potansiyel bir belirsizliği temsil eder, çünkü çok karakterli bir dizi aynı zamanda bir
boyutlu karakter değeri. Belirsizliği giderme genellikle bağlama göre gerçekleşir, ancak dikkatli olunmalıdır.
belirtmek için alınandizi doğru seçimi sağlamak için yazın. Dize sabitleri varsayılır
her zaman UTF-8 kodlu olmak. Bu özellikle, dize sabitinin aslında
çok baytlı UTF-8 karakterleri içerir. Özel sabit 'NIL' temsil etmek için kullanılabilir
sıfır uzunluklu bir dize ile aynı olmayan bir sıfır dize.
Opak sabitler, önünde 0X veya 0x bulunan onaltılık basamak dizileri olarak temsil edilir:
0xaa34ffff, örneğin. Bu sabitler hala tamsayı sabitleri olarak kullanılabilir ve
gerekirse kısaltılabilir veya uzatılabilir.
Bileşik sabit İfadeler
Tipi kullanıcı tanımlı tip olan değişkenlere (veya niteliklere) değer atamak için,
sabit gösterimi, içinde yer alan sabit dizilerini içerecek şekilde genişletildi.
küme parantezleri (örneğin "{"..."}"). Böyle bir sabite bileşik sabit denir ve
bileşik sabitler yuvalanabilir.
Bir "T(*) vlen_t" türü verildiğinde, burada T başka bir rasgele temel türdür, bunun için sabitler
aşağıdaki gibi belirtilmelidir.
vlen_t var[2] = {t11,t12,...t1N}, {t21,t22,...t2m};
tij değerlerinin T tipi sabitler olduğu varsayılır.
Ti'nin diğer keyfi olduğu "compd_t {T1 f1; T2 f2...Tn fn}" türünde bir bileşik verildiğinde
baz türleri, bunun için sabitler aşağıdaki gibi belirtilmelidir.
cmpd_t var[2] = {t11,t12,...t1N}, {t21,t22,...t2n};
tij değerlerinin Ti tipi sabitler olduğu varsayılır. Alanlar eksikse, o zaman
alanın temel türü için belirtilen veya varsayılan herhangi bir dolgu değeri kullanılarak ayarlanacaktır.
Parantezlerin kullanımına ilişkin genel kurallar, aşağıdaki bölümde tanımlanmıştır: Belirtme veri listeleri Bölüm
altında.
Kapsam Belirleme kurallar
Grupların eklenmesiyle, tanımlanmış nesnelerin ad alanı artık düz değildir.
Herhangi bir tür, boyut veya değişkenin referansları (adları), mutlak
belirli bir bildirimi belirten yol. Böylece biri diyebilir
değişkenleri:
/g1/g2/t1 v1;
Başvurulan tür (t1), sırayla iç içe olan g2 grubu içindeki türdür.
grup g1. Bu gösterimin Unix dosya yollarıyla benzerliği kasıtlıdır ve
grupları bir dizin yapısı biçimi olarak düşünün.
Ad ön eki olmadığında, belirtilen öğeyi bulmak için kapsam kuralları uygulanır.
beyanname. Şu anda üç kural vardır: biri boyutlar için, biri türler için ve
numaralandırma sabitleri ve diğerleri için bir tane.
Bir boyutun ön eksiz adı kullanıldığında (bir değişken bildiriminde olduğu gibi), önce ncgen
boyut için hemen çevreleyen gruba bakar. bulunamazsa
orada, o zaman bu grubu çevreleyen gruba bakar. Bu devam ediyor
boyut bulunana veya başka grup kalmayana kadar grup hiyerarşisi
arama.
2. Bir türün ön eksiz adı veya numaralandırma sabiti kullanıldığında, ncgen arama yapar
bir ön sipariş derinlik araması kullanan grup ağacı. Bu esasen şu anlama gelir
cdl'de metinsel olarak referanstan önce gelen eşleşen bildirimi bulur
dosya ve bu grup hiyerarşisinde "en yüksek".
3. Diğer tüm adlar için yalnızca hemen çevreleyen grup aranır.
Son bir not. İleri referanslara izin verilmez. Bunun anlamı şudur:
örneğin, bu başvuru g1 ve/veya g2 tanımlanmadan önce gerçekleşirse /g1/g1/t2 başarısız olur.
Belirtme sayım Sabitler
Numaralandırma sabitlerine yapılan başvurular (veri listelerinde) aynı olduğundan belirsiz olabilir.
numaralandırma sabiti adı birden fazla numaralandırmada tanımlanabilir. Eğer bir cdl dosyası
belirsiz bir sabit belirtirseniz, ncgen bir hata sinyali verir. Bu tür sabitler olabilir
iki şekilde anlamlandırılır.
1. Numaralandırma sabitinin önüne, bir ile ayrılmış numaralandırmanın adını ekleyin.
nokta: enum.econst, Örneğin.
2. Durum bir numaralandırma sabitinin belirsizliğini gidermek için yeterli değilse, o zaman bir
bir grup yolu kullanarak kesin numaralandırma türünü belirtmelidir: /g1/g2/enum.econst,
örneğin.
Özel Özellikler
Performansla ilgili bilgi sağlamak için özel, sanal öznitelikler belirtilebilir
dosya formatı ve değişken özellikleri hakkında. Dosya, aşağıdakiler için bir netCDF-4 dosyası olmalıdır:
bunlar yürürlüğe girecek.
Bu özel sanal öznitelikler aslında dosyanın bir parçası değildir, yalnızca
CDL'deki verilerin çeşitli özelliklerini ayarlamanın uygun yolu
Şu anda desteklenen özel nitelikler şunlardır: '_Format', '_Fletcher32,
'_ChunkSizes', '_Endianness', '_DeflateLevel', '_Shuffle' ve '_Storage'.
'_Format', netCDF biçim değişkenini belirten genel bir niteliktir. Değeri bir olmalıdır
'klasik', '64-bit offset', '64-bit data', 'netCDF-4' veya 'netCDF-XNUMX' ile eşleşen tek dize
`netCDF-4 klasik modeli'.
Özel niteliklerin geri kalanının tümü değişken niteliklerdir. Esasen hepsi o zaman
netCDF-4 API'sinde tanımlandığı gibi bazı karşılık gelen 'nc_def_var_XXX' işleviyle eşleyin. İçin
temelde boole olan öznitelikler (_Fletcher32, _Shuffle ve _NOFILL),
true değeri, "true" veya "1" dizeleri veya 1 tamsayı kullanılarak belirtilebilir.
false değeri "false", "0" veya 0 tamsayısını bekler. İlişkili eylemler
bu niteliklerle aşağıdaki gibidir.
1. `_Fletcher32, bir değişken için `fletcher32' özelliğini ayarlar.
2. '_Endianness', değişkenin ne zaman saklandığına bağlı olarak 'küçük' veya 'büyük'tür.
ilk yazılan.
3. '_DeflateLevel', sıkıştırma yapılmışsa 0 ile 9 arasında bir tamsayıdır.
değişken için belirtilmiştir.
4. '_Shuffle', shuffle filtresinin kullanılıp kullanılmayacağını belirtir.
5. '_Depolama', 'bitişik' veya 'parçalı'dır.
6. `_ChunkSizes', değişkenin her boyutu için yığın boyutlarının bir listesidir.
"add_offset" veya "scale_factor" gibi özniteliklerin özel bir anlamı olmadığını unutmayın.
ncgen. Bu öznitelikler şu anda, kitaplık katmanının üzerinde şu şekilde işlenen kurallardır:
diğer yardımcı program paketleri, örneğin NCO.
Belirtme veri listeleri
'veri:' bölümünde değişkenler için veri listeleri belirtmek biraz karmaşık olabilir.
Veri listelerinin doğru bir şekilde ayrıştırıldığından emin olmak için uyulması gereken bazı kurallar vardır.
tarafından
İlk olarak, en üst seviyenin otomatik olarak bir öğe listesi olduğu varsayılır, bu nedenle
içeri {...}. Bu, değişken bir skaler ise, tek bir tepe noktası olacağı anlamına gelir.
seviye elemanı ve değişken bir dizi ise, N adet üst seviye eleman olacaktır. İçin
üst düzey listenin her elemanı için aşağıdaki kurallar uygulanmalıdır.
1. SINIRSIZ boyut örnekleri (birinci boyut dışında) çevrelenmelidir
boyutu belirtmek için {...} ile.
2. Bileşik örnekler {...} içine yerleştirilmelidir.
3. Bileşik örneklerin skaler olmayan alanları {...} içine gömülmelidir.
4. Boyutu belirtmek için vlens örnekleri {...} ile çevrelenmelidir.
Niteliklerle ilişkili veri listeleri, örtük olarak aşağıdaki değerlerin bir vektörüdür (yani bir liste).
özniteliğin türü ve yukarıdaki kurallar bunu akılda tutarak uygulanmalıdır.
7. Başka hiçbir diş teli kullanımına izin verilmez.
Bu kuralların bir sonucunun, değer dizilerinin alt dizilere sahip olamayacağına dikkat edin.
parantez içinde. Örneğin, int var(d1)(d2)...(dn) düşünün, burada d2...dn öğelerinin hiçbiri
sınırsız. Bu değişken için bir veri listesi, tek bir tamsayı listesi olmalıdır;
tamsayı sayısı D=d1*d2*...dn değerlerinden fazla değildir; listenin daha az olabileceğini unutmayın
D'den farklıdır, bu durumda listeyi doldurmak için doldurma değerleri kullanılacaktır.
Nitelik veri listesiyle ilgili Kural 6 aşağıdaki sonuca sahiptir. türü ise
nitelik bir bileşik (veya vlen) türüdür ve listedeki giriş sayısı bir ise,
o zaman bileşik örnekler parantez içine alınmalıdır.
Belirtme Karakter veri listeleri
char türündeki değişkenler için veri listesi belirtmenin de bazı komplikasyonları vardır. düşünün, için
örnek
boyutlar: u=SINIRSIZ; d1=1; d2=2; d3=3;
d4=4; d5=5; u2=UNLIMITED;
değişkenler: char var(d4,d5);
veri listesi: var="1", "iki", "üç";
Doldurulacak yirmi var elemanımız var (d5 X d4) ve uzunlukları 1, 3 olan üç dizimiz var.
5. Dizelerdeki karakterleri yirmi elemente nasıl atayacağız?
Bu zordur çünkü orijinal ncgen'i (ncgen3) taklit etmek istenir. NS
çekirdek algoritması kavramsal olarak aşağıdaki gibidir.
1. Diyelim ki D1..Dn boyutlarımız var, burada D1 isteğe bağlı olarak Sınırsız olabilir
boyut. Di'nin boyutlarının hepsinin bilindiği varsayılır (sınırsız
boyutlar).
2. Bir dizi dizi veya C1..Cm karakter sabiti verildiğinde, amacımız bir
uzunluğu D1 ila Dn'nin çapraz ürünü olan tek dize. amaçlar için unutmayın
Bu algoritmada karakter sabitleri 1 boyutlu diziler olarak değerlendirilir.
3. Dx = D1 ile D(n-1)'in çapraz çarpımını oluşturun.
4. Her bir Ci sabiti için, uzunluğunun katları olacak şekilde gerektiği gibi dolgu karakterleri ekleyin.
Dn.
5. S dizesini üretmek için değiştirilmiş C1..Cm'yi birleştirin.
6. Uzunluğunu Dn'nin katı yapmak için S'ye dolgu karakterleri ekleyin.
8. S, Dx * Dn'den daha uzunsa, kısaltın ve bir uyarı oluşturun.
Dikkat edilmesi gereken üç durum daha var.
1. Yalnızca tek, sınırsız bir boyut varsa, o zaman tüm sabitler
elde edilen dizenin sonuna birleştirilmiş ve dolgu karakterleri eklenir.
uzunluğu sınırsız boyutunki kadardır. Uzunluk daha büyükse
sınırsız boyut, daha sonra bir uyarı ile kesilir.
2. Karakter tipi vlen olması durumunda, örneğin "char(*) vlen_t". biz basitçe
tüm sabitleri hiç doldurmadan birleştirin.
3. Karakter tipi bir öznitelik durumunda, tüm sabitleri basitçe birleştiririz.
netcdf-4'te birincisi dışındaki boyutlar sınırsız olabilir. Tabii ki kurallara göre
yukarıda, iç sınırsız örnekler {...} ile sınırlandırılmalıdır. Örneğin.
değişkenler: char var(u,u2);
veri listesi: var={"1", "iki"}, {"üç"};
Bu durumda, iki efektif uzunluğa sahip olacaksınız. Her u2 örneği içinde,
yukarıdaki kurallar geçerli olacak ve buna yol açacaktır.
veri listesi: var={"1","t","w","o"}, {"t","h","r","e","e"};
u2'nin etkin boyutu, iki örnek uzunluğunun maksimumu olacaktır (bu durumda beş)
ve daha kısa olanı bunu üretmek için doldurulacaktır.
veri listesi: var={"1","t","w","o","\0"}, {"t","h","r","e","e"};
Daha da karmaşık bir durum düşünün.
değişkenler: char var(u,u2,u3);
veri listesi: var={{"1", "iki"}}, {{"üç"},{"four","xy"}};
Bu durumda u yine iki etkin uzunluğa sahip olacaktır. u2 boyutlarında bir
boyut = maks(1,2) = 2; Her u2 örneğinde, yukarıdaki kurallar geçerli olacak ve aşağıdakilere yol açacaktır:
bu.
veri listesi: var={{"1","t","w","o"}}, {{"t","h","r","e","e"},{"f ","o","u","r","x","y"}};
u3'ün etkin boyutu, iki örnek uzunluğunun maksimumu olacaktır (bu durumda altı)
ve daha kısa olanlar bunu üretmek için doldurulacaktır.
veri listesi: var={"1","t","w","o"," "," "}}, {{"t","h","r","e","e","e "," "},{"f","o","u","r","x","y"}};
Bununla birlikte, u2'nin ilk örneğinin, u2'nin maksimum uzunluğundan daha az olduğuna dikkat edin, bu nedenle
bunu üreten başka bir u2 örneği için bir dolgu eklemek için.
veri listesi: var={"1","t","w","o"," "," "},{" "," "," "," "," "," "}}, {{"t","h","r","e","e"," "},{"f","o","u","r","x","y" }};
onworks.net hizmetlerini kullanarak ncgen'i çevrimiçi kullanın